Jak wyświetlić listę wszystkich użytkowników, którzy mają granty w pakiecie

9

Szukam zapytania, aby wyświetlić listę wszystkich użytkowników, którzy mają granty w pakiecie.

Na przykład użytkownik Schema_A otrzymał uprawnienia do wykonania pakietu: B.MyPackage.

Pytam widoki lub tabele, takie jak: role_tab_privs, role_sys_privs, sys.dba_sys_privs, dba_role_privs ... ale nie mogę znaleźć tego, czego szukam.

Delmonte
źródło

Odpowiedzi:

15

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 granteejest to rola, musisz sprawdzić, dba_role_privsktó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) ANYdotacji (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ć.

Justin Cave
źródło