Come elencare tutti gli utenti che hanno sovvenzioni su un pacchetto


9

Sto cercando qualche query per elencare tutti gli utenti che hanno sovvenzioni su un pacchetto.

Ad esempio, all'utente Schema_A è stato concesso per eseguire il pacchetto: B.MyPackage.

Sto interrogando viste o tabelle come: role_tab_privs, role_sys_privs, sys.dba_sys_privs, dba_role_privs ... ma non riesco a trovare quello che sto cercando.

Risposte:


15

Se il privilegio è stato concesso direttamente o a un ruolo, verrà visualizzata la concessione DBA_TAB_PRIVS

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

Se si granteetratta di un ruolo, dovrai quindi dba_role_privsvedere quali utenti (o ruoli) hanno ottenuto quel ruolo e seguire la catena se hai ruoli assegnati ad altri ruoli. Se è necessario tenere conto degli utenti che dispongono di sovvenzioni a causa delle sovvenzioni (molto pericolose) ANY(ovvero EXECUTE ANY PROCEDURE), ciò richiederebbe una query separata.

Se vuoi diventare più sofisticato del semplice fare una semplice query contro dba_tab_privs, però, probabilmente stai meglio usando uno degli script di Pete Finnigan come il who_has_priv.sql(o who_has_priv_procedure.sql). Pete è probabilmente il principale esperto di sicurezza Oracle, quindi è molto più probabile che tenga conto di ogni possibile caso angolare rispetto a qualsiasi cosa tenterei di mettere insieme.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.