问题描述
我在Oracle Cloud中使用的是自治DB 19c。
当我通过sqlDevedaer以admin用户身份运行一个过程时,我是否会遇到权限不足的问题。
当我将代码复制到一个sqlDeveloper窗口中并不作为一个过程(也作为admin用户)运行它时,它就可以工作了。
我已经将几乎所有的隐私都应用到了管理和程序中,但它仍然不能工作。
我错过了什么?
尝试运行PL/SQL过程后的输出:
当我通过sqlDevedaer以admin用户身份运行一个过程时,我是否会遇到权限不足的问题。
当我将代码复制到一个sqlDeveloper窗口中并不作为一个过程(也作为admin用户)运行它时,它就可以工作了。
我已经将几乎所有的隐私都应用到了管理和程序中,但它仍然不能工作。
我错过了什么?
尝试运行PL/SQL过程后的输出:
ORA-01031: insufficient privileges ORA-06512: at "SYS.DBMS_AQADM", line 2093 ORA-06512: at "SYS.DBMS_AQADM", line 69 ORA-06512: at "SYS.DBMS_AQADM_INV", line 754 ORA-06512: at "SYS.DBMS_AQADM", line 65 ORA-06512: at "SYS.DBMS_AQADM", line 2072 ORA-06512: at "ADMIN.QUEUE_CLEANUP", line 21 ORA-06512: at line 2
专家解答
您正在运行的代码的一个例子,错误会很有帮助,但可以猜测:
要在运行存储过程时执行特权操作,需要授予这些directly用户。不是通过角色。
角色访问(仅)在匿名块中运行代码时有效。请参见下面的示例。
所以我猜Advanced通过一个角色拥有特权,您需要它来执行您的代码。找到这些并将其授予管理员。
要在运行存储过程时执行特权操作,需要授予这些directly用户。不是通过角色。
角色访问(仅)在匿名块中运行代码时有效。请参见下面的示例。
所以我猜Advanced通过一个角色拥有特权,您需要它来执行您的代码。找到这些并将其授予管理员。
grant dba to u identified by u;
conn u/u
create or replace procedure p as
begin
execute immediate 'create table t ( x int )';
end p;
/
exec p();
ORA-01031: insufficient privileges
begin
execute immediate 'create table t ( x int )';
end;
/
select count(*) from t;
COUNT(*)
0
drop table t;
conn chris
grant create table to u;
conn u/u
exec p();
select count(*) from t;
COUNT(*)
0 文章转载自askTom,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




