暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 运行过程的权限不足

askTom 2021-08-04
1076

问题描述

我在Oracle Cloud中使用的是自治DB 19c。
当我通过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通过一个角色拥有特权,您需要它来执行您的代码。找到这些并将其授予管理员。

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论