3調用者的舉例詳解
沒有AUTHID CURRENT_USER表示定義者權限(definer rights),以定義者身份執行;
加上AUTHID CURRENT_USER表示調用者權限(invoker rights),以調用者身份執行。
例:
1. 創建兩個用戶:xxpo,xxgl
2. 在xxpo下創建一張表:xxpo_authid_test
[c-sharp] view plaincopyCREATE TABLE xxpo.xxpo_authid_test(ID NUMBER,NAME VARCHAR2(20));3. 在xxpo下創建如下兩個PRocedure
3.1 xxpo_no_authid_test_prc:
[c-sharp] view plaincopyCREATE OR REPLACE PROCEDURE xxpo_no_authid_test_prc ( p_id IN NUMBER ,p_name IN VARCHAR2 ) IS BEGIN INSERT INTO xxpo_authid_test (id ,NAME) VALUES (p_id ,p_name); END xxpo_no_authid_test_prc;3.2 xxpo_has_authid_test_prc:
[c-sharp] view plaincopyCREATE OR REPLACE PROCEDURE xxpo_has_authid_test_prc ( p_id IN NUMBER ,p_name IN VARCHAR2 ) AUTHID CURRENT_USER IS BEGIN INSERT INTO xxpo_authid_test (id ,NAME) VALUES (p_id ,p_name); END xxpo_has_authid_test_prc;4. 將兩個procedure的執行權限(EXECUTE)賦予xxgl:
[c-sharp] view plaincopySQL> GRANT EXECUTE ON xxpo_no_authid_test_prc TO xxgl; Grant succeeded SQL> GRANT EXECUTE ON xxpo_has_authid_test_prc TO xxgl; Grant succeeded5. 在xxgl分別調用xxpo下面的兩個procedure,查看結果:
[c-sharp] view plaincopySQL> BEGIN 2 xxpo.xxpo_no_authid_test_prc(1,'nameXXGL001'); 3 END; 4 / PL/SQL procedure successfully completed SQL> SQL> BEGIN 2 xxpo.xxpo_has_authid_test_prc(2,'nameXXGL002'); 3 END; 4 / BEGIN xxpo.xxpo_has_authid_test_prc(2,'nameXXGL002'); END; ORA-00942: table or view does not exist ORA-06512: at "XXPO.XXPO_HAS_AUTHID_TEST_PRC", line 7 ORA-06512: at line 3 SQL> SELECT * FROM xxpo.xxpo_authid_test; ID NAME ---------- -------------------- 1 nameXXGL001 SQL>由于我們并沒有在xxgl用戶下創建一個名為xxpo_authid_test的表,所以當我們在xxgl用戶下以調用者(xxgl)權限去執行xxpo.xxpo_has_authid_test_prc這個procedure的時候,會報表不能找到(ORA-00942)的錯誤;而以定義者(xxpo)權限去執行則不存在此問題。
---
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下是不成功的。
新聞熱點
疑難解答