sql >> Database >  >> RDS >> Oracle

Alle Oracle Database-rechten voor een gebruiker weergeven

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 de ADMIN . 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 de GRANTEE 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.


  1. MariaDB (Master-Slave)-replicatie instellen in CentOS/RHEL 7 en Debian 8/9

  2. Snelste methode om MySQL Backup and Restore te gebruiken

  3. Beheer MDF-bestanden in SQL Server 2019

  4. T-sql - bepaal of de waarde een geheel getal is