Якщо пільгу надано безпосередньо або на роль, грант з’явиться у 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, тому вони набагато більше шансів пояснювати кожен можливий випадок, ніж все, що я намагався би спільно зв'язати.