zoukankan      html  css  js  c++  java
  • Oracle之AUTHID CURRENT_USER

    没有AUTHID CURRENT_USER表示定义者权限(definer rights),以定义者身份执行;

    加上AUTHID CURRENT_USER表示调用者权限(invoker rights),以调用者身份执行。

    例:

    1. 创建两个用户:xxpo,xxgl

    2. 在xxpo下创建一张表:xxpo_authid_test

    CREATE TABLE xxpo.xxpo_authid_test(ID NUMBER,NAME VARCHAR2(20));  

    3. 在xxpo下创建如下两个procedure

    3.1 xxpo_no_authid_test_prc:

        CREATE 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:
        CREATE 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:

        SQL> 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,查看结果:

        SQL> 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)权限去执行则不存在此问题。

  • 相关阅读:
    228. Summary Ranges
    324. Wiggle Sort II
    42. Trapping Rain Water
    工作之后
    279. Perfect Squares
    391. Perfect Rectangle
    351. Android Unlock Patterns
    246. Strobogrammatic Number
    [LeetCode] 75. Sort Colors Java
    [Java] 80. Remove Duplicates from Sorted Array II Java
  • 原文地址:https://www.cnblogs.com/pekkle/p/6568781.html
Copyright © 2011-2022 走看看