Das Abrufen aller Benutzerberechtigungen in Oracle kann von einer einfachen Aufgabe mit einer einfachen SQL-Abfrage bis hin zu einem erweiterten Skript reichen, in erster Linie abhängig davon, wie umfassend die Rollen und Berechtigungen innerhalb des Servers konfiguriert sind.
In diesem kurzen Tutorial behandeln wir sowohl die grundlegende SQL-Abfragemethode als auch die erweiterte Skriptmethode, sodass Sie unabhängig von der Komplexität Ihrer Einrichtung keine Probleme haben werden.
DBA/USER-Berechtigungsansichten abfragen
Ein Datenbankadministrator (DBA) für Oracle kann einfach eine Abfrage ausführen, um die Zeilen in DBA_SYS_PRIVS
anzuzeigen , DBA_TAB_PRIVS
und DBA_ROLE_PRIVS
um Informationen über Benutzerprivilegien in Bezug auf das system
abzurufen , tables
und roles
.
Beispiel:Ein DBA möchte alle system
anzeigen Berechtigungen, die allen Benutzern gewährt werden, würden die folgende Abfrage ausgeben:
SELECT
*
FROM
DBA_SYS_PRIVS;
Der DBA_SYS_PRIVS
Ansicht enthält drei Datenspalten:
GRANTEE
ist der Name, die Rolle oder der Benutzer, dem die Berechtigung zugewiesen wurde.PRIVILEGE
ist das zugewiesene Privileg.ADMIN_OPTION
gibt an, ob das gewährte Privileg auch denADMIN
enthält Möglichkeit.
Um festzustellen, welche Benutzer direkt haben Zugriff auf eine table
gewähren wir verwenden den DBA_TAB_PRIVS
Ansicht:
SELECT
*
FROM
DBA_TAB_PRIVS;
Weitere Informationen zu den von dieser Abfrage zurückgegebenen Spalten finden Sie in der offiziellen Dokumentation, aber die kritischen Spalten sind:
GRANTEE
ist der Name des Benutzers mit gewährtem Zugriff.TABLE_NAME
ist der Name des Objekts (Tabelle, Index, Sequenz usw.).PRIVILEGE
ist das demGRANTEE
zugewiesene Privileg für das zugehörige Objekt.
Abschließend Abfrage von DBA_ROLE_PRIVS
view enthält viele der gleichen Informationen, ist aber auf roles
anwendbar stattdessen, wo die GRANTED_ROLE
Spalte gibt die betreffende Rolle an:
SELECT
*
FROM
DBA_ROLE_PRIVS;
Abfragen der Berechtigungen des aktuellen Benutzers
Wenn kein DBA-Zugriff möglich oder erforderlich ist, ist es auch möglich, die obigen Abfragen leicht zu ändern, um die Berechtigungen nur für den aktuellen Benutzer anzuzeigen .
Dies geschieht durch die alternative Abfrage von USER_
Versionen des obigen DBA_
Ansichten. Anstatt also auf DBA_SYS_PRIVS
zu schauen Wir würden USER_SYS_PRIVS
abfragen , etwa so:
SELECT
*
FROM
USER_SYS_PRIVS;
Da der USER_
Berechtigungsansichten sind effektiv die gleichen wie ihr DBA_
Gegenstücke, aber nur für den aktuellen Benutzer spezifisch, sind der Typ der zurückgegebenen Daten und Spaltennamen alle identisch mit denen bei der Abfrage von DBA_
stattdessen Aufrufe.
Erweitertes Skript zum Finden aller Berechtigungen
Während die oben genannten Methoden für grundlegende Systemkonfigurationen funktionieren, beginnen die Dinge in Oracle chaotisch zu werden, wenn viele Rollen vorhanden sind, die wiederum anderen Rollen Rollenberechtigungen gewähren, und so weiter im Kaninchenbau. Da der DBA_
und USER_
Berechtigungsansichten zeigen nur GRANTEES
an mit direkt zugeordnet Zugang, oft werden Privilegien, die von anderen Rollen geerbt werden, nicht sofort angezeigt.
Um dies zu beheben, ist es ratsam, ein fortgeschrittenes Skript zu verwenden, wie z. B. das vertrauenswürdige Werk von Pete Finnigan und seine find_all_privs.sql
Skript. Sie können sich auch für eine modifizierte Version von David Arthur entscheiden, find_all_privs2.sql
.
In beiden Fällen besteht der Zweck dieser Skripte darin, Ihnen rekursiv zu ermöglichen Finden Sie alle Privilegien, die einem bestimmten Benutzer gewährt wurden. Wenn das Skript eine role
findet Für den Benutzer sucht es rekursiv nach anderen Rollen und Privilegien, die dieser Rolle gewährt wurden, und wiederholt den Prozess den ganzen Weg nach unten in der Kette. Die Ergebnisse des Skripts können wahlweise auf dem Bildschirm oder in einer Datei ausgegeben werden.
Weitere Informationen zu diesen Skripten und ihrer Verwendung finden Sie unter petefinigan.com.