2.调用者权限,AUTHID CURRENT_USER
存储过程有编译和执行2个阶段。
从编译阶段来看,调用者权限存储过程与定义者权限存储过程是一样的,角色都无效,都必须进行显式授权。
但在执行阶段,调用者权限存储过程的role是生效可见的。
-
CREATE USER userb IDENTIFIED BY userb;
-
GRANT CONNECT, RESOURCE TO userb;
-
-
conn userb/userb;
-
CREATE TABLE userb_tab AS SELECT * FROM all_objects;
-
-
conn luise/luise;
-
-
--调用者权限存储过程(同样没有权限)
-
CREATE OR REPLACE PROCEDURE luise_proc1
-
AUTHID CURRENT_USER
-
AS
-
BEGIN
-
DELETE FROM userb.userb_tab;
-
COMMIT;
-
END;
-
/
-
-
Warning: Procedure created with compilation errors.
-
-
--使用动态SQL,将权限的检查推迟到运行时,即可成功编译
-
CREATE OR REPLACE PROCEDURE luise_proc1
-
AUTHID CURRENT_USER
-
AS
-
BEGIN
-
EXECUTE IMMEDIATE \'DELETE FROM userb.userb_tab\';
-
COMMIT;
-
END;
-
/
-
-
--执行(正常)
-
EXEC luise_proc1;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1070898/
,如需转载,请注明出处,否则将追究法律责任。