Может кто-нибудь скажет мне, как показать все привилегии/правила от конкретного пользователя в sql-консоли?
Как показать все привилегии от пользователя в oracle?
Ответ 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 просматривает эти отношения, чтобы показать все привилегии, которые в конечном итоге передаются пользователю.
Ответ 3
Еще один полезный ресурс:
http://psoug.org/reference/roles.html
- DBA_SYS_PRIVS
- DBA_TAB_PRIVS
- DBA_ROLE_PRIVS
Ответ 4
Вы можете использовать приведенный ниже код, чтобы получить список всех привилегий от всех пользователей.
select * from dba_sys_privs