2012-03-21 18 views

risposta

127

È possibile provare queste seguenti viste.

SELECT * FROM USER_SYS_PRIVS; 
SELECT * FROM USER_TAB_PRIVS; 
SELECT * FROM USER_ROLE_PRIVS; 

amministratori di database e gli altri utenti di alimentazione possono trovare i privilegi concessi agli altri utenti con le DBA_ versioni di questi stessi punti di vista. Sono coperti nello documentation.

Queste visualizzazioni mostrano solo i privilegi concessi direttamente all'utente. Trovare tutti i privilegi, compresi quelli concessi indirettamente tramite ruoli, richiede più complicate istruzioni SQL ricorsive:

select * from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER' order by 1,2,3; 
select * from dba_sys_privs where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3; 
select * from dba_tab_privs where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3,4; 
18

Ci sono vari script galleggianti intorno che faranno che a seconda di come pazzo che si desidera ottenere. Personalmente utilizzerei Pete Finnigan find_all_privs script.

Se si desidera scrivere da soli, la query diventa piuttosto impegnativa. Agli utenti possono essere concessi privilegi di sistema che sono visibili in DBA_SYS_PRIVS. Possono essere concessi i privilegi dell'oggetto che sono visibili in DBA_TAB_PRIVS. E possono essere assegnati ruoli che sono visibili in DBA_ROLE_PRIVS (i ruoli possono essere predefiniti o non predefiniti e possono richiedere anche una password, quindi solo perché un utente ha ottenuto un ruolo non significa che l'utente possa necessariamente utilizzare i privilegi ha acquisito attraverso il ruolo di default). Ma a questi ruoli possono, a loro volta, essere concessi privilegi di sistema, privilegi di oggetti e ruoli aggiuntivi che possono essere visualizzati guardando a ROLE_SYS_PRIVS, ROLE_TAB_PRIVS e ROLE_ROLE_PRIVS. Lo script di Pete attraversa queste relazioni per mostrare tutti i privilegi che finiscono per fluire verso un utente.

+0

Lo script è impressionante appena controllato fuori –

+1

È necessario privilegi al pacchetto UTL_FILE altrimenti si ottiene un errore durante l'esecuzione di script di Pete Finnigan: "identificatore 'UTL_FILE' deve essere dichiarato". È possibile connettersi come sys con roll sysdba tramite SQL Developer e quindi funzionerà o concederà i privilegi di esecuzione a questo pacchetto utilizzando: concessione esecuzione su UTL_FILE a ; – Jan

+1

E per quelli di noi senza privilegi 'SYS' e vogliono solo vedere i privilegi del nostro account, la sceneggiatura è assolutamente inutile. Non ho accesso a 'UTL_FILE' né a' DBA_SYS_PRIVS' e alle altre aree 'DBA' e' SYS' a cui lo script guarda. – vapcguy

2

È possibile utilizzare sotto codice per ottenere tutta la lista di privilegi da tutti gli utenti.

select * from dba_sys_privs 
Problemi correlati