我主要是一个神谕新手,如果这是一个愚蠢的问题,请原谅我......
我已经阅读了很多关于authID的文章,我的理解是AUTHID子句指示Oracle是否要使用调用者权限(CURRENT_USER)或所有者权限(DEFINER)运行例程。如果未指定该子句,Oracle将默认使用AUTHID DEFINER。
您能否给我一个简单的例子来更好地理解authID?
答案 0 :(得分:2)
这里的例子是:
User1有DEPARTMENTS表。
User2也有DEPARTMENTS表。
如果我们在User2架构中创建此过程
-- 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