Oracle
 sql >> Database >  >> RDS >> Oracle

Come mostrare tutti i privilegi del database Oracle per un utente

Il recupero di tutti i privilegi utente all'interno di Oracle può variare da una semplice attività che utilizza una query SQL di base a uno script avanzato, a seconda principalmente di come i ruoli e i privilegi coinvolti sono configurati all'interno del server.

In questo breve tutorial tratteremo sia il metodo di query SQL di base che il metodo di script avanzato, quindi non avrai problemi indipendentemente dalla complessità della tua configurazione.

Interrogazione di viste privilegi DBA/USER

Un amministratore di database (DBA) per Oracle può semplicemente eseguire una query per visualizzare le righe in DBA_SYS_PRIVS , DBA_TAB_PRIVS e DBA_ROLE_PRIVS per recuperare informazioni sui privilegi utente relativi al system , tables e roles , rispettivamente.

Ad esempio, un DBA che desidera visualizzare tutto il system i privilegi concessi a tutti gli utenti emetterebbero la seguente query:

SELECT
  *
FROM
  DBA_SYS_PRIVS;

Il DBA_SYS_PRIVS view contiene tre colonne di dati:

  • GRANTEE è il nome, il ruolo o l'utente a cui è stato assegnato il privilegio.
  • PRIVILEGE è il privilegio assegnato.
  • ADMIN_OPTION indica se il privilegio concesso include anche ADMIN opzione.

Per determinare quali utenti hanno diretto concedere l'accesso a una table useremo il DBA_TAB_PRIVS visualizza:

SELECT
  *
FROM
  DBA_TAB_PRIVS;

Puoi controllare la documentazione ufficiale per ulteriori informazioni sulle colonne restituite da questa query, ma le colonne critiche sono:

  • GRANTEE è il nome dell'utente con accesso concesso.
  • TABLE_NAME è il nome dell'oggetto (tabella, indice, sequenza, ecc.).
  • PRIVILEGE è il privilegio assegnato al GRANTEE per l'oggetto associato.

Infine, interrogando il DBA_ROLE_PRIVS view ha molte delle stesse informazioni ma è applicabile a roles invece, dove il GRANTED_ROLE la colonna specifica il ruolo in questione:

SELECT
  *
FROM
  DBA_ROLE_PRIVS;

Interrogazione dei privilegi dell'utente corrente

Se l'accesso al DBA non è possibile o necessario, è anche possibile modificare leggermente le query di cui sopra per visualizzare i privilegi esclusivamente per l'utente corrente .

Questo viene fatto interrogando in alternativa USER_ versioni del precedente DBA_ visualizzazioni. Quindi, invece di guardare DBA_SYS_PRIVS interrogheremo USER_SYS_PRIVS , in questo modo:

SELECT
  *
FROM
  USER_SYS_PRIVS;

Dal momento che il USER_ le viste privilegiate sono effettivamente le stesse del loro DBA_ controparti, ma specifici solo per l'utente corrente, il tipo di dati restituiti e i nomi delle colonne sono tutti identici a quelli durante la query DBA_ viste invece.

Script avanzato per trovare tutti i privilegi

Sebbene i metodi precedenti funzionino per le configurazioni di sistema di base, le cose iniziano a diventare disordinate in Oracle quando esistono molti ruoli che a loro volta concedono privilegi di ruolo ad altri ruoli, e così via. Dal momento che il DBA_ e USER_ le visualizzazioni privilegiate mostrano solo GRANTEES con assegnato direttamente accesso, spesso i privilegi ereditati tramite altri ruoli non verranno mostrati immediatamente.

Per risolvere questo problema, è consigliabile utilizzare uno script avanzato come il lavoro di fiducia di Pete Finnigan e il suo find_all_privs.sql sceneggiatura. Puoi anche optare per una versione modificata di David Arthur, find_all_privs2.sql .

In entrambi i casi, lo scopo di questi script è di consentirti di eseguire in modo ricorsivo individuare tutti i privilegi concessi a un particolare utente. Quando lo script individua un role per l'utente, ricerca ricorsivamente altri ruoli e privilegi concessi a quel ruolo, ripetendo il processo lungo tutta la catena. I risultati dello script possono essere visualizzati sullo schermo o su un file come desiderato.

Maggiori informazioni su questi script e sul loro utilizzo sono disponibili su petefinnigan.com.