Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 授予在DBMS_上执行警报时权限不足_Oracle_Grant - Fatal编程技术网

Oracle 授予在DBMS_上执行警报时权限不足

Oracle 授予在DBMS_上执行警报时权限不足,oracle,grant,Oracle,Grant,我正在安装新的Oracle。安装之后,我只想执行一些准备好的(不是我自己编写的)脚本 其中一个执行失败的是 GRANT EXECUTE ON DBMS_ALERT to TESTUSR; ORA-01031:权限不足 我正在使用SQLDeveloper的系统用户执行脚本。有人能告诉我执行这个脚本需要做什么吗 管理员权限或执行DBMS\u警报所需的执行目录\u角色角色 根据此处的文档,(部分“用户访问SYS模式中的对象”) 它说: 具有显式对象权限的用户或具有管理权限(SYSDBA)的用户可以访

我正在安装新的Oracle。安装之后,我只想执行一些准备好的(不是我自己编写的)脚本

其中一个执行失败的是

GRANT EXECUTE ON DBMS_ALERT to TESTUSR;
ORA-01031:权限不足


我正在使用SQLDeveloper的系统用户执行脚本。有人能告诉我执行这个脚本需要做什么吗

管理员权限或执行DBMS\u警报所需的
执行目录\u角色
角色

根据此处的文档,(部分“用户访问SYS模式中的对象”)

它说: 具有显式对象权限的用户或具有管理权限(SYSDBA)的用户可以访问SYS模式中的对象

由于您使用的是
系统
帐户,因此可以执行包
DBMS\u警报
,以
system@db作为sysdba
。请参阅下面的屏幕截图,了解如何添加
dbs
角色或
sysdba
权限


或者,您可以使用
EXECUTE\u CATALOG\u角色
执行
DBMS\u警报

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

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作为sysdba
),创建具有所需权限的用户:

create user usr identified by Pa$$W0rD;
grant create session to usr;
grant dba to usr;
因此,您可以使用
dba
角色登录以执行此包

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

在SQL Developer中,您可以如下所示设置连接,选择角色,
dba

以SYSDBA的身份登录并运行脚本。您可能需要以sysbda的身份连接。你有这个特权吗?尝试如下连接:conn/as sysdba。如果连接成功,请尝试grant语句。以sysdba身份连接是关键。我就像没有sysdba的系统用户一样连接。
usr@db as dba