Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So zeigen Sie alle Oracle-Datenbankberechtigungen für einen Benutzer an

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 den ADMIN 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 dem GRANTEE 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.