【问题标题】:what's the reason of dbms_metadata.get_granted_ddl('SYSTEM_GRANT', 'AQ_ADMINISTRATOR_ROLE') ora-31608 error?dbms_metadata.get_granted_ddl('SYSTEM_GRANT', 'AQ_ADMINISTRATOR_ROLE') ora-31608 错误的原因是什么?
【发布时间】:2012-06-14 07:43:32
【问题描述】:

我想使用 dbms_metadata 包获取数据库中所有角色的 ddls。不幸的是,当角色没有授予(对象、系统或角色类型)时,dbms_metadata.get_granted_ddl 失败并出现错误。这就是为什么我必须检查 dba_tab_privs、dba_sys_privs 和 dba_role_privs 视图中是否存在特权。 但是 AQ_ADMINISTRATOR_ROLE 角色具有系统权限以下语句失败。检查了两个数据库。

sqlplus system/pass@db1

select dbms_metadata.get_granted_ddl('SYSTEM_GRANT', 'AQ_ADMINISTRATOR_ROLE')
  from dual
  where exists (select 1 from dba_sys_privs where grantee = 'AQ_ADMINISTRATOR_ROLE')
/

ORA-31608:未找到 SYSTEM_GRANT 类型的指定对象 ORA-06512: 在“SYS.DBMS_METADATA”,第 4018 行 ORA-06512:在“SYS.DBMS_METADATA”, 第 5991 行 ORA-06512:在第 1 行

select * from v$version
/

Oracle Database 11g Release 11.2.0.2.0 - 64bit Production PL/SQL
Release 11.2.0.2.0 - Production CORE    11.2.0.2.0  Production

【问题讨论】:

  • 问题标题和正文中的代码不匹配。标题说“get_granted_ddl”,但描述说“get_dependent_ddl”。需要修复。

标签: oracle ddl role dbms-metadata


【解决方案1】:

如果没有与您的参数匹配的行,Oracle 将返回该异常。 QA_ADMINISTRATOR_ROLE 不能有 SYSTEM_GRANT 对象

【讨论】:

  • 它是正确的,但在这种情况下,@hotmori 通过传递角色“AQ_ADMINISTRATOR_ROLE”代替模式用户来错误地使用“dbms_metadata.get_granted_ddl”。我做了一个假设,并给出了一些“dbms_metadata”用法的示例。
  • 受赠者包括用户和角色。示例: SELECT dbms_metadata.get_granted_ddl('SYSTEM_GRANT', 'DBA') FROM DUAL;我来这个问题是因为 AQ_ADMINISTRATOR_ROLE 是唯一不起作用的角色。
【解决方案2】:

这将返回您要查找的内容:

select dbms_metadata.GET_GRANTED_DDL('SYSTEM_GRANT')  from dual;

这将返回如下内容:

GRANT CREATE JOB TO "SCOTT"

GRANT SELECT ANY DICTIONARY TO "SCOTT"

GRANT EXECUTE ANY TYPE TO "SCOTT"

我假设,您想提取授予当前模式用户的所有权限(角色/权限)的 DDL(当您说“数据库”时)。

如果要为给定用户提取信息,请使用以下内容:

select dbms_metadata.GET_GRANTED_DDL('SYSTEM_GRANT', 'SCOTT')  from dual;

如果想要从当前用户提取对 OBJECT 赋予的权限给另一个模式用户,请使用以下命令:-

select DBMS_METADATA.GET_DEPENDENT_DDL('OBJECT_GRANT','TEST_TABLE') from dual;

【讨论】:

  • DBMS_METADATA.GET_DEPENDENT_DDL 如果没有授予其他用户对对象“TEST_TABLE”的授权,则将抛出“ORA-31608”异常。但是,我不确定它是 Oracle 错误还是预期行为。我本来希望'没有行返回'
猜你喜欢
  • 2011-12-14
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 2020-01-29
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多