Hentning af alle brugerrettigheder i Oracle kan variere fra en simpel opgave ved hjælp af en grundlæggende SQL-forespørgsel til et avanceret script, primært afhængigt af, hvor involverede rollerne og privilegierne er konfigureret på serveren.
I denne korte vejledning dækker vi både den grundlæggende SQL-forespørgselsmetode såvel som den avancerede scriptmetode, så du ikke har noget problem uanset kompleksiteten af din opsætning.
Forespørgsel på DBA/BRUGER-privilegievisninger
En databaseadministrator (DBA) for Oracle kan simpelthen udføre en forespørgsel for at se rækkerne i DBA_SYS_PRIVS , DBA_TAB_PRIVS , og DBA_ROLE_PRIVS for at hente information om brugerrettigheder relateret til system , tables , og roles hhv.
For eksempel en DBA, der ønsker at se alle system privilegier givet til alle brugere ville udstede følgende forespørgsel:
SELECT
*
FROM
DBA_SYS_PRIVS;
DBA_SYS_PRIVS visningen indeholder tre kolonner med data:
GRANTEEer navnet, rollen eller brugeren, der blev tildelt privilegiet.PRIVILEGEer det privilegium, der er tildelt.ADMIN_OPTIONangiver, om det tildelte privilegium også inkludererADMINmulighed.
For at afgøre, hvilke brugere der har direkte give adgang til en table vi bruger DBA_TAB_PRIVS se:
SELECT
*
FROM
DBA_TAB_PRIVS;
Du kan tjekke den officielle dokumentation for mere information om de kolonner, der returneres fra denne forespørgsel, men de kritiske kolonner er:
GRANTEEer navnet på brugeren med tildelt adgang.TABLE_NAMEer navnet på objektet (tabel, indeks, sekvens osv.).PRIVILEGEer det privilegium, der er tildeltGRANTEEfor det tilknyttede objekt.
Til sidst forespørger du DBA_ROLE_PRIVS visningen har meget af de samme oplysninger, men gælder for roles i stedet hvor GRANTED_ROLE kolonne angiver den pågældende rolle:
SELECT
*
FROM
DBA_ROLE_PRIVS;
Forespørgsel efter den aktuelle brugers privilegier
Hvis DBA-adgang ikke er mulig eller nødvendig, er det også muligt at ændre ovenstående forespørgsler lidt for at se privilegierne udelukkende for den aktuelle bruger .
Dette gøres ved alternativt at forespørge USER_ versioner af ovenstående DBA_ visninger. Således i stedet for at se på DBA_SYS_PRIVS vi ville forespørge USER_SYS_PRIVS , sådan:
SELECT
*
FROM
USER_SYS_PRIVS;
Siden USER_ privilegievisninger er faktisk de samme som deres DBA_ modparter, men kun specifikke for den aktuelle bruger, typen af returnerede data og kolonnenavne er alle identiske med dem, når du forespørger DBA_ visninger intead.
Avanceret script til at finde alle privilegier
Selvom ovenstående metoder vil fungere for grundlæggende systemkonfigurationer, begynder tingene at blive rodet i Oracle, når der eksisterer mange roller, som igen giver rolleprivilegier til andre roller, og så videre nede i kaninhullet. Siden DBA_ og USER_ privilegievisninger viser kun GRANTEES med direkte tildelt adgang, vil ofte privilegier, der er nedarvet gennem andre roller, ikke umiddelbart blive vist.
For at løse dette, er det tilrådeligt at bruge et avanceret script, såsom Pete Finnigans betroede arbejde og hans find_all_privs.sql manuskript. Du kan også vælge en ændret version af David Arthur, find_all_privs2.sql .
I begge tilfælde er formålet med disse scripts at give dig mulighed for rekursivt finde alle privilegier givet til en bestemt bruger. Når scriptet finder en role for brugeren søger den rekursivt efter andre roller og privilegier givet til denne rolle, og gentager processen hele vejen ned i kæden. Resultaterne af scriptet kan outputtes til skærmen eller til en fil efter ønske.
Mere information om disse scripts og deres brug kan findes på petefinnigan.com.