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 ancheADMIN
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 alGRANTEE
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.