报错,无权限。虽然
system
有执行
create table scott.tb_01
的权限,但这个权限是角色
DBA
中的权限,在
authid definer
的存储过程是
disabled
。
[All roles are disabled in any named PL/SQL block (stored
procedure, function, or trigger) that executes with definer's rights.]
ORA-01031: insufficient privileges
ORA-06512: at "SYSTEM.P_TEST2", line 5
ORA-06512: at line 2
用户
system
新建一个存储过程
p_test2
,这里
authid current_user
create or replace procedure p_test2
authid current_user
begin
execute immediate
'create table scott.tb_01 as select * from dual';
用户
system
执行存储过程
system.p_test
begin
system.p_test2;
执行成功。
authid current_user
时,使用存储过程的会话的角色
DBA
中的权限是
enabled
,所以执行成功。这一点可以通过在存储过程中查看
session_roles
视图来验证。
执行成功。