Какое разрешение необходимо предоставить для доступа к sys.dba_systems

Я работаю над приложением, которое работает на Oracle. Для какой-то логики мне нужно получить список таблиц от данного пользователя БД с указанной схемой. В моем случае у меня есть пользователь, который предоставил доступ к данной схеме. Поэтому, когда мой код создает соединение, используя заданные учетные данные, и пытается извлечь таблицы из следующего запроса, список возвращаемых таблиц.

SELECT * FROM dba_objects where owner ='schema' and object_type = 'TABLE'

Приведенный выше запрос работал с пользователем, которому предоставлены все привилегии, но когда я попытался с ограниченными правами, он выдает ошибку msg.

ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"

Дополнительному пользователю, из которого наш код создает соединение, предоставлены разрешения по следующему запросу.

create user johnsmith identified by Passw0rd;;
grant connect to johnsmith ;
grant select any table to johnsmith ;
grant UPDATE any table to johnsmith ;
grant DELETE any table to johnsmith ;
grant INSERT any table to johnsmith ;

Какое разрешение я должен предоставить пользователю для доступа к следующим системным таблицам...?

  • DBA_OBJECTS
  • user_constraints
  • user_cons_columns
  • USER_TABLES
  • all_tab_cols, а также разрешить доступ к методу dbms_metadata.get_dependent_ddl()

1 ответ

С O7_DICTIONARY_ACCESSIBILITY Для параметра initialisation установлено значение false, которое является значением по умолчанию, затем:

Системные привилегии, которые предоставляют доступ к объектам в других схемах, не дают другим пользователям доступ к объектам в SYS схемы. Например, привилегия SELECT ANY TABLE позволяет пользователям получать доступ к представлениям и таблицам в других схемах, но не позволяет им выбирать объекты словаря (базовые таблицы динамических представлений производительности, обычные представления, пакеты и синонимы). Однако вы можете предоставить этим пользователям явные права доступа к объектам в SYS схемы.

Таким образом, вы можете предоставить привилегии выбора для определенных представлений, которые вам нужны:

grant select on sys.dba_objects to johnsmith;

и то же самое для других взглядов; или если вам нужно, чтобы они имели более широкий доступ к объектам схемы SYS, вы можете дать им это с ролью:

grant select_catalog_role to johnsmith;

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

Вам не нужно ничего предоставлять, чтобы пользователь мог запрашивать user_* Просмотры. Если вы имели в виду DBA эквиваленты этих - например, dba_tables - тогда предоставь их как dba_objects выше; или они будут включены в select_catalog_role, Но опять же, дайте только то, что действительно нужно.

В любом случае, для dbms_metadata вы можете просто предоставить привилегии для этого пакета (вы не можете предоставить привилегии для отдельных процедур в пакете):

grant execute on dbms_metadata to johnsmith;

или - опять, вероятно, гораздо больше, чем необходимо, и потенциально гораздо более опасно, чем роль выбора:

grant execute_catalog_role to johnsmith
Другие вопросы по тегам