Het ophalen van alle gebruikersrechten binnen Oracle kan variëren van een eenvoudige taak met behulp van een eenvoudige SQL-query tot een geavanceerd script, voornamelijk afhankelijk van hoe betrokken de rollen en privileges zijn geconfigureerd binnen de server.
In deze korte zelfstudie behandelen we zowel de basis SQL-querymethode als de geavanceerde scriptmethode, zodat u geen probleem zult hebben, ongeacht de complexiteit van uw installatie.
Opvragen van DBA/USER Privilege-weergaven
Een databasebeheerder (DBA) voor Oracle kan eenvoudig een query uitvoeren om de rijen in DBA_SYS_PRIVS
te bekijken , DBA_TAB_PRIVS
, en DBA_ROLE_PRIVS
om informatie op te halen over gebruikersrechten gerelateerd aan het system
, tables
, en roles
, respectievelijk.
Bijvoorbeeld, een DBA die alle system
. wil bekijken privileges die aan alle gebruikers worden verleend, geven de volgende vraag:
SELECT
*
FROM
DBA_SYS_PRIVS;
De DBA_SYS_PRIVS
weergave bevat drie kolommen met gegevens:
GRANTEE
is de naam, rol of gebruiker waaraan het privilege is toegewezen.PRIVILEGE
is het privilege dat is toegewezen.ADMIN_OPTION
geeft aan of het verleende privilege ook deADMIN
. omvat optie.
Om te bepalen welke gebruikers direct . hebben toegang verlenen tot een table
we gebruiken de DBA_TAB_PRIVS
bekijken:
SELECT
*
FROM
DBA_TAB_PRIVS;
U kunt de officiële documentatie raadplegen voor meer informatie over de kolommen die uit deze zoekopdracht zijn geretourneerd, maar de kritieke kolommen zijn:
GRANTEE
is de naam van de gebruiker met verleende toegang.TABLE_NAME
is de naam van het object (tabel, index, reeks, enz.).PRIVILEGE
is het privilege dat is toegewezen aan deGRANTEE
voor het bijbehorende object.
Ten slotte, het opvragen van de DBA_ROLE_PRIVS
weergave heeft veel van dezelfde informatie, maar is van toepassing op roles
in plaats daarvan, waar de GRANTED_ROLE
kolom specificeert de rol in kwestie:
SELECT
*
FROM
DBA_ROLE_PRIVS;
De rechten van de huidige gebruiker opvragen
Als DBA-toegang niet mogelijk of nodig is, is het ook mogelijk om de bovenstaande zoekopdrachten enigszins te wijzigen om de privileges alleen voor de huidige gebruiker te bekijken .
Dit wordt gedaan door als alternatief USER_
. op te vragen versies van de bovenstaande DBA_
keer bekeken. Dus, in plaats van te kijken naar DBA_SYS_PRIVS
we vragen USER_SYS_PRIVS
, zoals zo:
SELECT
*
FROM
USER_SYS_PRIVS;
Sinds de USER_
privilegeweergaven zijn in feite hetzelfde als hun DBA_
tegenhangers, maar specifiek voor de huidige gebruiker, het type geretourneerde gegevens en kolomnamen zijn allemaal identiek aan die bij het opvragen van DBA_
weergaven in plaats van.
Geavanceerd script om alle rechten te vinden
Hoewel de bovenstaande methoden zullen werken voor basissysteemconfiguraties, beginnen de zaken in Oracle rommelig te worden wanneer er veel rollen bestaan die op hun beurt rolprivileges verlenen aan andere rollen, enzovoort in het konijnenhol. Sinds de DBA_
en USER_
privilegeweergaven tonen alleen GRANTEES
met direct toegewezen toegang, vaak worden privileges die via andere rollen zijn geërfd niet direct getoond.
Om dit op te lossen is het raadzaam om een geavanceerd script te gebruiken zoals het vertrouwde werk van Pete Finnigan en zijn find_all_privs.sql
script. U kunt ook kiezen voor een aangepaste versie van David Arthur, find_all_privs2.sql
.
In beide gevallen is het doel van deze scripts om u in staat te stellen recursief zoek alle rechten die aan een bepaalde gebruiker zijn toegekend. Wanneer het script een role
vindt voor de gebruiker zoekt het recursief naar andere rollen en privileges die aan die rol zijn toegekend, waarbij het proces de hele keten wordt herhaald. De resultaten van het script kunnen naar wens naar het scherm of naar een bestand worden uitgevoerd.
Meer informatie over deze scripts en hun gebruik is te vinden op petefinnigan.com.