日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用 Authid Current_User 为调用者授权

發布時間:2024/8/26 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 Authid Current_User 为调用者授权 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Authid Current_User 是調用者權限。 oracle DB下面有2種執行的權限:定義者權限和調用者權限。 默認都是定義者權限。聲明Authid Current_User后就是調用者權限。定義者權限的現象是,如果在APPS下創建的procedure,那其他user,只要能執行procedure,都是以apps的名義來執行的。因為APPS是procedure的定義者。 APPS能做什么,那這個procedure就能做什么。調用者權限的現象是,如果在APPS下創建的procedure,如果其他user有權限執行這個procedure,這個procedure所做的內容都是以當前user的名義來做的。如果某個table,只有APPS才有權限修改,那這個procedure在apps下面才執行成功。其他user下是不成功的。我在一些技術論壇里面,常常看到有朋友問這種問題: 為什么我的用戶具有DBA權限,卻無法在存儲過程里面創建一張普通表呢?下面就結合具體案例來談談這個問題:SQL> conn eric/eric; Connected.SQL> select * from dba_role_privs where grantee='ERIC';GRANTEE??????????????????????? GRANTED_ROLE?????????????????? ADM DEF ------------------------------ ------------------------------ --- --- ERIC?????????????????????????? DBA??????????????????????????? NO? YES ERIC?????????????????????????? CONNECT??????????????????????? NO? YES ERIC?????????????????????????? RESOURCE?????????????????????? NO? YES ERIC?????????????????????????? RECOVERY_CATALOG_OWNER???????? NO? YES可以看到,用戶eric擁有 DBA 權限!用此用戶創建一個存儲過程:create or replace procedure p_CreateTable? as beginexecute immediate 'create table test_tb(id number)'; end p_CreateTable; /Procedure created.運行時會發現,系統提示權限不足(insufficient privileges)!SQL> exec p_CreateTable; BEGIN p_CreateTable; END;* ERROR at line 1: ORA-01031: insufficient privileges ORA-06512: at "ERIC.P_CREATETABLE", line 3 ORA-06512: at line 1由上可以看到,即使擁有DBA role,也不能創建表。即?role在存儲過程中不可見!查閱資料發現:Oracle8i以前的版本,所有已編譯存儲對象,包括packages, procedures, functions, triggers, views等,只能以定義者(Definer)身份解析運行;而Oracle8i及其后的新版本,Oracle引入調用者(invoker)權限,使得對象可以以調用者身份和權限執行。遇到這種情況,通常解決方法是進行顯式的系統權限: grant create table to eric;但是,此方法太笨,因為有可能執行一個存儲過程,需要很多不同權限(oracle對權限劃分粒度越來越細)。最好的方法是,利用 oracle 提供的方法,在創建存儲過程時,加入 Authid Current_User 條件進行權限分配。?create or replace procedure p_CreateTable?Authid Current_User? as? beginexecute immediate 'create table test_tb(id number)'; end p_CreateTable; /Procedure created.SQL> exec p_CreateTable;PL/SQL procedure successfully completed.SQL> desc test_tbName????????????????????????????????????? Null???? Type----------------------------------------- -------- ----------------------------ID???????????????????????????????????????????????? NUMBER成功啦!!!由此可以引申出一個問題:如果用戶B要執行A用戶的某存儲過程,傳統的解決方案是:A用戶將此存儲過程的執行權限賦予B用戶: grant execute on p_test to B;在B用戶下創建一個同義詞: create synonym p_test for a.p_test;然后B用戶就可以直接執行p_test了.但是,如果使用 Authid Current_User 選項,在創建時給調用者授權,就簡單多了! 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的使用 Authid Current_User 为调用者授权的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。