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

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

Ответ 1

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

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;

Ответ 2

Существуют различные сценарии, плавающие вокруг, которые будут делать это в зависимости от того, насколько безумны вы хотите получить. Я бы лично использовал 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 просматривает эти отношения, чтобы показать все привилегии, которые в конечном итоге передаются пользователю.

Ответ 4

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

select * from dba_sys_privs