GRANT EXECUTE ON DBMS_ALERT时权限不足

时间:2018-01-11 14:12:11

标签: oracle grant

我正在安装新的Oracle 12.1.0.2 in docker。安装后我只想执行一些准备好的(不是我)脚本。

其中一个执行失败的是

GRANT EXECUTE ON DBMS_ALERT to TESTUSR;

ORA-01031: insufficient privileges

我在SQLDeveloper中使用SYSTEM用户执行脚本。有人可以告诉我,为了能够执行这个脚本我需要做什么?

1 个答案:

答案 0 :(得分:0)

管理员权限或执行DBMS_ALERTS所需的EXECUTE_CATALOG_ROLE角色

根据此处的文档https://docs.oracle.com/database/121/DBSEG/authorization.htm#DBSEG99875(“用户访问SYS架构中的对象”一节)

它说: 具有显式对象权限的用户或使用管理权限(SYSDBA)连接的用户可以访问SYS架构中的对象。

由于您使用的是system帐户,因此您可以执行DBMS_ALERTS程序包,以system@db as sysdba登录。请参阅下面的屏幕截图,了解如何添加dbs角色或sysdba权限

或者,您可以使用EXECUTE_CATALOG_ROLE执行DBMS_ALERTS

您可以在此处查看具有此访问权限的用户或角色:

usr@db>SELECT
  2      grantee,
  3      granted_role,
  4      default_role
  5  FROM
  6      dba_role_privs
  7  WHERE
  8      1 = 1
  9      AND   grantee IN (
 10          'DBA',
 11          'SYS',
 12          'SYSTEM'
 13      )
 14          AND   granted_role IN (
 15          'DELETE_CATALOG_ROLE',
 16          'EXECUTE_CATALOG_ROLE',
 17          'SELECT_CATALOG_ROLE'
 18      )
 19  ORDER BY
 20      1,
 21      2;
GRANTEE   GRANTED_ROLE           DEFAULT_ROLE
DBA       DELETE_CATALOG_ROLE    YES
DBA       EXECUTE_CATALOG_ROLE   YES
DBA       SELECT_CATALOG_ROLE    YES
SYS       DELETE_CATALOG_ROLE    YES
SYS       EXECUTE_CATALOG_ROLE   YES
SYS       SELECT_CATALOG_ROLE    YES


6 rows selected.

usr@db>SELECT
  2      grantee,
  3      granted_role
  4  FROM
  5      dba_role_privs
  6  WHERE
  7      1 = 1
  8      AND   granted_role = 'DBA'
  9  ORDER BY
 10      1,
 11*     2;
usr@db>/
GRANTEE   GRANTED_ROLE
SYS       DBA
SYSTEM    DBA

使用sys帐户是不好的做法,即使它有足够的权限。

最佳解决方案是将dba角色授予用户帐户,例如usr

使用sysdba权限(例如system@db as sysdba),创建具有所需权限的用户:

create user usr identified by Pa$$W0rD;
grant create session to usr;
grant dba to usr;

因此,您可以使用dba角色登录来执行此程序包。

在SQL * Plus中,这看起来像这样(假设usr已被授予dba角色):

usr@db as dba

在SQL Developer中,您将如下所示设置连接,选择角色dba:  enter image description here