我正在安装新的Oracle 12.1.0.2 in docker。安装后我只想执行一些准备好的(不是我)脚本。
其中一个执行失败的是
GRANT EXECUTE ON DBMS_ALERT to TESTUSR;
ORA-01031: insufficient privileges
我在SQLDeveloper中使用SYSTEM用户执行脚本。有人可以告诉我,为了能够执行这个脚本我需要做什么?
答案 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