国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle之AUTHID CURRENT_USER 3

2024-08-29 13:54:36
字體:
來源:轉載
供稿:網友

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 succeeded  

5. 在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下是不成功的。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河源市| 蕲春县| 崇阳县| 武平县| 阜康市| 阿拉善盟| 西藏| 沁水县| 五原县| 商城县| 柘荣县| 关岭| 永修县| 手游| 章丘市| 山阳县| 安吉县| 会泽县| 望城县| 安远县| 习水县| 贵南县| 醴陵市| 库车县| 即墨市| 苏尼特右旗| 布尔津县| 扬州市| 蒙山县| 拉萨市| 白朗县| 武隆县| 信阳市| 临洮县| 方城县| 新民市| 肥东县| 海宁市| 晋江市| 荣成市| 抚州市|