Как перечислить всех пользователей, которые имеют гранты на пакет


9

Я ищу какой-либо запрос, чтобы перечислить всех пользователей, которые имеют гранты на пакет.

Например, пользователю Schema_A предоставлено выполнение пакета: B.MyPackage.

Я запрашиваю представления или таблицы, такие как: role_tab_privs, role_sys_privs, sys.dba_sys_privs, dba_role_privs ... но я не могу найти то, что я ищу.

Ответы:


15

Если привилегия была предоставлена ​​непосредственно или роли, грант появится в DBA_TAB_PRIVS

SELECT grantee, privilege
  FROM dba_tab_privs
 WHERE owner = 'B'
   AND table_name = 'MYPACKAGE'
   AND privilege = 'EXECUTE'

Если granteeэто роль, вам нужно будет посмотреть, dba_role_privsкакие пользователи (или роли) получили эту роль, и следовать цепочке, если у вас есть роли, предоставленные другим ролям. Если вам нужно учитывать пользователей, которые имеют гранты из-за (очень опасных) ANYгрантов (то есть EXECUTE ANY PROCEDURE), для этого потребуется отдельный запрос.

Если вы хотите стать более сложным, чем просто выполнять простой запрос dba_tab_privs, вам, вероятно, лучше использовать сценарии Пита Финнигана, такие как who_has_priv.sql(или who_has_priv_procedure.sql). Пит, вероятно, является ведущим экспертом в области безопасности Oracle, поэтому они с большей вероятностью будут учитывать все возможные варианты, чем все, что я пытался бы объединить.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.