Як перелічити всіх користувачів, які отримують гранти на пакет


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.