Как показать все привилегии от пользователя в Oracle?

88

Может кто-нибудь скажет мне, как показать все привилегии/правила от конкретного пользователя в sql-консоли?

Теги:
rules
privileges

4 ответа

115
Лучший ответ

Вы можете попробовать эти представления ниже.

SELECT * FROM USER_SYS_PRIVS; 
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;

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

Эти представления показывают только привилегии, предоставленные пользователю. Поиск всех привилегий, в том числе предоставляемых косвенно через роли, требует более сложных рекурсивных операторов SQL:

select * from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER' order by 1,2,3;
select * from dba_sys_privs  where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3;
select * from dba_tab_privs  where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3,4;
18

Существуют различные сценарии, плавающие вокруг, которые будут делать это в зависимости от того, насколько безумны вы хотите получить. Я бы лично использовал Pete Finnigan find_all_privs script.

Если вы хотите написать его самостоятельно, запрос становится довольно сложным. Пользователям могут быть предоставлены системные привилегии, которые видны в DBA_SYS_PRIVS. Им могут быть предоставлены права объекта, которые видны в DBA_TAB_PRIVS. И им могут быть предоставлены роли, которые видны в DBA_ROLE_PRIVS (роли могут быть по умолчанию или не по умолчанию и могут также требовать пароль, поэтому только потому, что пользователю предоставлена ​​роль, это не означает, что пользователь может обязательно использовать привилегии, которые он приобрел по ролям по умолчанию). Но эти роли могут, в свою очередь, получать системные привилегии, привилегии объектов и дополнительные роли, которые можно просмотреть, просмотрев ROLE_SYS_PRIVS, ROLE_TAB_PRIVS и ROLE_ROLE_PRIVS. Pete script просматривает эти отношения, чтобы показать все привилегии, которые в конечном итоге передаются пользователю.

  • 0
    Сценарий потрясающий, только что проверил
  • 1
    Вам нужны привилегии для пакета UTL_FILE, иначе вы получите ошибку при запуске скрипта Пита Финнигана: «должен быть объявлен идентификатор« UTL_FILE »». Вы можете подключиться как sys с помощью roll sysdba через SQL Developer, и тогда он будет работать или предоставит себе права на выполнение этого пакета, используя: grant execute для UTL_FILE для <user>;
Показать ещё 2 комментария
6

Еще один полезный ресурс:

http://psoug.org/reference/roles.html

  • DBA_SYS_PRIVS
  • DBA_TAB_PRIVS
  • DBA_ROLE_PRIVS
  • 1
    За исключением случаев, когда у вас нет ролей DBA или SYS , и вы просто хотите найти привилегии своей учетной записи.
1

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

select * from dba_sys_privs 
  • 0
    Это не перечисляет все привилегии. Как показали несколько других ответов, которые предшествовали вашим годам , в нем не указаны привилегии таблиц и все привилегии, предоставляемые ролями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню