dbms_metadata.get_granted_ddl('SYSTEM_GRANT', 'AQ_ADMINISTRATOR_ROLE') ora-31608 错误的原因是什么?



我想使用dbms_metadata包获取数据库中所有角色的ddl。不幸的是,当角色没有授权(对象、系统或角色类型)时,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: 在"系统。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

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

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

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;

如果要将授予对象的权限从当前用户提取到另一个架构用户,请使用以下命令:-

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

相关内容

最新更新