我主要是一个 Oracle 新手,所以请原谅我,如果这是一个愚蠢的问题......
我已经阅读了很多关于 authID 的文章,我的理解是 AUTHID 子句指示 Oracle 例程是使用调用者权限 (CURRENT_USER) 还是使用所有者权限 (DEFINER) 运行。如果未指定该子句,Oracle 将默认使用 AUTHID DEFINER。
您能给我一个简单的例子来更好地理解 authID 吗?
这里是例子:
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;
/
Run Code Online (Sandbox Code Playgroud)
然后,如果我们在授予适当的权限后从 User1 调用此过程,
-- Connected as User1
CALL create_dept(44, 'Information Technology', 200, 1700);
Run Code Online (Sandbox Code Playgroud)
该记录将被插入到:
用户1.部门
因为过程是作为当前用户执行的 - User1 调用者。
如果我们在创建过程时省略了 AUTHID CURRENT_USER,则记录将像往常一样插入到 User2.DEPARTMENTS 中。
华泰
归档时间: |
|
查看次数: |
12016 次 |
最近记录: |