2

当我运行 dbms_metadata 时,我得到 ORA-00904: "DBMS_METADATA"."GET_DDL": invalid identifier 错误。

该错误是因为列名或别名错误。我不确定我为什么会得到它。

这是一些显示错误的代码:我创建了一个表:

create table test_table (
   column1 varchar2(300));

我插入一行数据:

insert into test_table values (55);

我尝试为它获取 DDL:

SELECT DBMS_METADATA.GET_DDL('TABLE','test_table') FROM dual;

这是错误:

>> SELECT DBMS_METADATA.GET_DDL('TABLE','test_table') FROM dual
       *
Error at line 1
ORA-00904: "DBMS_METADATA"."GET_DDL": invalid identifier

我检查了权限,看来我拥有正确的权限:

select * FROM DBA_ROLE_PRIVS where granted_role = 'SELECT_CATALOG_ROLE';

我的用户(又名模式)在该列表中。

以下是我相信的文档:https ://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_metada.htm#i1016867

4

1 回答 1

2

以 SYS 身份运行此命令:

grant execute on sys.dbms_metadata to public;

授予您特定用户的访问权限可能已经解决了您当前的问题,但该软件包确实需要对整个系统可用。许多第三方程序依赖于DBMS_METADATA. 默认情况下,该包应授予PUBLIC.

一些旧版本的 STIG(安全技术实施指南,几乎每个审计员都将其用作其安全脚本的基础)将撤销对公共包的访问权限。但即使在 10 年前,这也是一个愚蠢的想法,而且它已经不在现在的 STIG 中了。

于 2019-05-18T03:27:38.817 回答