国产探花免费观看_亚洲丰满少妇自慰呻吟_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下是不成功的。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉林市| 汝城县| 蒙城县| 南宫市| 集安市| 沙湾县| 五大连池市| 鄂尔多斯市| 本溪| 泌阳县| 平罗县| 大化| 清苑县| 木兰县| 房山区| 南投县| 龙游县| 博白县| 镇平县| 贵州省| 林芝县| 南雄市| 东港市| 闵行区| 蓬安县| 科尔| 施甸县| 同德县| 永川市| 合阳县| 武夷山市| 尼玛县| 中阳县| 调兵山市| 迁西县| 岐山县| 北京市| 绵竹市| 独山县| 报价| 香港 |