Может кто-нибудь подскажите, как показать все привилегии / правила от конкретного пользователя в sql-консоли?
источник
Может кто-нибудь подскажите, как показать все привилегии / правила от конкретного пользователя в sql-консоли?
Вы можете попробовать эти виды ниже.
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;
Существуют различные сценарии, которые будут делать это в зависимости от того, насколько сумасшедшим вы хотите стать. Я бы лично использовал скрипт find_all_privs Пита Финнигана .
Если вы хотите написать это самостоятельно, запрос становится довольно сложным. Пользователям могут быть предоставлены системные привилегии, которые отображаются вDBA_SYS_PRIVS
. Им могут быть предоставлены объектные привилегии, которые видны в DBA_TAB_PRIVS
. И им могут быть предоставлены роли, которые видны в DBA_ROLE_PRIVS
(роли могут быть по умолчанию или не по умолчанию, а также могут требовать пароль, поэтому только то, что пользователю была предоставлена роль, не означает, что пользователь обязательно может использовать привилегии, которые он приобретается через роль по умолчанию). Но эти роли могут, в свою очередь, предоставляется система льгот, привилегий объектов, а также дополнительные роли , которые могут быть просмотрены, глядя ROLE_SYS_PRIVS
, ROLE_TAB_PRIVS
и ROLE_ROLE_PRIVS
. Сценарий Пита просматривает эти отношения, чтобы показать все привилегии, которые в конечном итоге передаются пользователю.
SYS
привилегий, и кто просто хочет посмотреть на привилегии своей учетной записи, сценарий совершенно бесполезен. У меня нет доступа кUTL_FILE
ни к ,DBA_SYS_PRIVS
а другойDBA
иSYS
площади выглядит скрипт в.ROLE_SYS_PRIVS
,ROLE_TAB_PRIVS
иROLE_ROLE_PRIVS
нужно исследовать. В документации указано, что они предназначены для текущего пользователя.Еще один полезный ресурс:
http://psoug.org/reference/roles.html
источник
DBA
илиSYS
, и вы просто хотите получить привилегии своей учетной записи.Хотя ответ Равитеи Вутукури работает и его можно быстро собрать, он не особенно гибкий для изменения фильтров и не очень помогает, если вы хотите что-то делать программно. Итак, я составил свой собственный запрос:
Преимущества:
WHERE
предложение.DBMS_OUTPUT
или что-то в этом роде (по сравнению со связанным скриптом Пита Финнигана). Это делает его полезным для программного использования и для экспорта.GRANT
.источник
USER_SYS_PRIVS
(напрямую предоставленные системные привилегии),USER_TAB_PRIVS
(напрямую предоставленные объектные привилегии)USER_ROLE_PRIVS
(напрямую предоставленные пользователем роли),ROLE_ROLE_PRIVS
(для получения унаследованных ролей),ROLE_SYS_PRIVS
(системные привилегии через роли) иROLE_TAB_PRIVS
(объектные привилегии через роли). Тьфу. Oracle такой сложный.Вы можете использовать приведенный ниже код, чтобы получить весь список привилегий от всех пользователей.
источник
Чтобы показать все привилегии:
источник