Qualcuno può dirmi come mostrare tutti i privilegi/le regole di un utente specifico in sql-console?Come mostrare tutti i privilegi di un utente in oracle?
risposta
È 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;
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.
Un'altra risorsa utile:
http://psoug.org/reference/roles.html
- DBA_SYS_PRIVS
- DBA_TAB_PRIVS
- DBA_ROLE_PRIVS
Tranne se non si dispone di ruoli 'DBA' o' SYS' e si desidera solo trovare i privilegi del proprio account. – vapcguy
È possibile utilizzare sotto codice per ottenere tutta la lista di privilegi da tutti gli utenti.
select * from dba_sys_privs
Lo script è impressionante appena controllato fuori –
È 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
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