Att hämta alla användarbehörigheter inom Oracle kan sträcka sig från en enkel uppgift med en grundläggande SQL-fråga till ett avancerat skript, främst beroende på hur involverade rollerna och privilegierna är konfigurerade inom servern.
I den här korta handledningen kommer vi att täcka både den grundläggande SQL-frågemetoden och den avancerade skriptmetoden så att du inte har några problem oavsett hur komplex din installation är.
Fråga DBA/USER Privilege Views
En databasadministratör (DBA) för Oracle kan helt enkelt köra en fråga för att se raderna i DBA_SYS_PRIVS , DBA_TAB_PRIVS och DBA_ROLE_PRIVS för att hämta information om användarbehörigheter relaterade till system , tables och roles , respektive.
Till exempel en DBA som vill se alla system privilegier som ges till alla användare skulle utfärda följande fråga:
SELECT
*
FROM
DBA_SYS_PRIVS;
DBA_SYS_PRIVS vyn innehåller tre kolumner med data:
GRANTEEär namnet, rollen eller användaren som tilldelades privilegiet.PRIVILEGEär den behörighet som tilldelas.ADMIN_OPTIONindikerar om den beviljade behörigheten även inkluderarADMINalternativ.
För att avgöra vilka användare som har direkt ge åtkomst till en table vi använder DBA_TAB_PRIVS visa:
SELECT
*
FROM
DBA_TAB_PRIVS;
Du kan kontrollera den officiella dokumentationen för mer information om kolumnerna som returneras från den här frågan, men de kritiska kolumnerna är:
GRANTEEär namnet på användaren med beviljad åtkomst.TABLE_NAMEär namnet på objektet (tabell, index, sekvens, etc).PRIVILEGEär den behörighet som tilldelatsGRANTEEför det associerade objektet.
Slutligen, fråga efter DBA_ROLE_PRIVS vyn har mycket av samma information men är tillämplig på roles istället, där GRANTED_ROLE kolumnen anger rollen i fråga:
SELECT
*
FROM
DBA_ROLE_PRIVS;
Fråga den aktuella användarens rättigheter
Om DBA-åtkomst inte är möjlig eller nödvändig är det också möjligt att ändra ovanstående frågor något för att se privilegierna enbart för den aktuella användaren .
Detta görs genom att alternativt fråga USER_ versioner av ovanstående DBA_ vyer. Alltså istället för att titta på DBA_SYS_PRIVS vi skulle fråga USER_SYS_PRIVS , som så:
SELECT
*
FROM
USER_SYS_PRIVS;
Sedan USER_ behörighetsvyer är i praktiken desamma som deras DBA_ motsvarigheter, men endast specifika för den aktuella användaren, typen av returnerad data och kolumnnamn är alla identiska med dem när man frågar DBA_ visningar intead.
Avancerat skript för att hitta alla rättigheter
Även om metoderna ovan kommer att fungera för grundläggande systemkonfigurationer, börjar det bli rörigt i Oracle när det finns många roller som i sin tur ger rollprivilegier till andra roller, och så vidare i kaninhålet. Sedan DBA_ och USER_ privilegievyer visar endast GRANTEES med direkt tilldelad åtkomst, ofta kommer privilegier som är nedärvda genom andra roller inte att visas lätt.
För att lösa detta är det tillrådligt att använda ett avancerat skript som Pete Finnigans betrodda arbete och hans find_all_privs.sql manus. Du kan också välja en modifierad version av David Arthur, find_all_privs2.sql .
I båda fallen är syftet med dessa skript att låta dig rekursivt hitta alla privilegier som beviljats en viss användare. När skriptet hittar en role för användaren söker den rekursivt efter andra roller och privilegier som tilldelats den rollen, och upprepar processen hela vägen ner i kedjan. Resultaten av skriptet kan matas ut på skärmen eller till en fil efter önskemål.
Mer information om dessa skript och deras användning finns på petefinnigan.com.