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:
GRANTEEis de naam, rol of gebruiker waaraan het privilege is toegewezen.PRIVILEGEis het privilege dat is toegewezen.ADMIN_OPTIONgeeft 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:
GRANTEEis de naam van de gebruiker met verleende toegang.TABLE_NAMEis de naam van het object (tabel, index, reeks, enz.).PRIVILEGEis het privilege dat is toegewezen aan deGRANTEEvoor 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.