ORA-00904: «DBMS_METADATA». «GET_DDL»: неверный идентификатор - PullRequest
2 голосов
/ 17 мая 2019

Я получаю ORA-00904: «DBMS_METADATA». «GET_DDL»: ошибка неверного идентификатора при запуске dbms_metadata.

Эта ошибка из-за неправильного имени столбца или псевдонима. Я не уверен, почему я получаю это.

Вот код, показывающий ошибку: я создаю таблицу:

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

1 Ответ

2 голосов
/ 18 мая 2019

Запустите эту команду как SYS:

grant execute on sys.dbms_metadata to public;

Предоставление доступа конкретному пользователю, возможно, решило вашу текущую проблему, но этот пакет действительно должен быть доступен для всей системы.Многие сторонние программы зависят от DBMS_METADATA.По умолчанию этот пакет должен быть предоставлен PUBLIC.

. Некоторые старые версии STIG (Руководства по безопасной технической реализации, которые почти каждый аудитор использует в качестве основы для своих скриптов безопасности) отменяют доступ из общедоступных пакетов.,Но это была глупая идея даже 10 лет назад, и ее больше нет в нынешних STIG.

...