Jeśli przywilej został przyznany bezpośrednio lub roli, przyznanie pojawi się w DBA_TAB_PRIVS
SELECT grantee, privilege
FROM dba_tab_privs
WHERE owner = 'B'
AND table_name = 'MYPACKAGE'
AND privilege = 'EXECUTE'
Jeśli grantee
jest to rola, musisz sprawdzić, dba_role_privs
którzy użytkownicy (lub role) otrzymali tę rolę, i postępować zgodnie z łańcuchem, jeśli masz role przydzielone innym rolom. Jeśli musisz wziąć pod uwagę użytkowników, którzy mają granty z powodu (bardzo niebezpiecznych) ANY
dotacji (tj. EXECUTE ANY PROCEDURE
), Wymagałoby to osobnego zapytania.
Jeśli jednak chcesz się bardziej wyrafinować niż proste zapytanie dba_tab_privs
, prawdopodobnie lepiej jest użyć skryptów Pete Finnigan, takich jak who_has_priv.sql
(lub who_has_priv_procedure.sql
). Pete jest prawdopodobnie wiodącym ekspertem w dziedzinie bezpieczeństwa Oracle, więc są one o wiele bardziej prawdopodobne, by wziąć pod uwagę każdą możliwą sprawę narożną niż wszystko, co chciałbym połączyć.