Какое разрешение необходимо предоставить для доступа к 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