何时提及authID为current_user

时间:2015-11-24 15:26:15

标签: oracle

我主要是一个神谕新手,如果这是一个愚蠢的问题,请原谅我......

我已经阅读了很多关于authID的文章,我的理解是AUTHID子句指示Oracle是否要使用调用者权限(CURRENT_USER)或所有者权限(DEFINER)运行例程。如果未指定该子句,Oracle将默认使用AUTHID DEFINER。

您能否给我一个简单的例子来更好地理解authID?

1 个答案:

答案 0 :(得分:2)

这里的例子是:

User1有DEPARTMENTS表。

User2也有DEPARTMENTS表。

如果我们在U​​ser2架构中创建此过程

    -- Connected as User2    
    CREATE OR REPLACE PROCEDURE create_dept (

       v_deptno NUMBER,
       v_dname  VARCHAR2,
       v_mgr    NUMBER,
       v_loc    NUMBER) 
    AUTHID CURRENT_USER AS
    BEGIN
       INSERT INTO departments VALUES (v_deptno, v_dname, v_mgr, v_loc);
    END;
    /

然后,如果我们在从User1提供适当的权限之后调用此过程,

-- Connected as User1
CALL create_dept(44, 'Information Technology', 200, 1700);

记录将插入:

<强> User1.DEPARTMENTS

因为程序已执行为当前用户 - 用户1是来电者。

如果我们在创建过程时省略了AUTHID CURRENT_USER,那么记录将像往常一样插入到User2.DEPARTMENTS上。

HTH