Kann mir bitte jemand sagen, wie alle Berechtigungen / Regeln eines bestimmten Benutzers in der SQL-Konsole angezeigt werden sollen?
quelle
Kann mir bitte jemand sagen, wie alle Berechtigungen / Regeln eines bestimmten Benutzers in der SQL-Konsole angezeigt werden sollen?
Sie können diese Ansichten unten ausprobieren.
SELECT * FROM USER_SYS_PRIVS;
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;
Datenbankadministratoren und andere Hauptbenutzer können die Berechtigungen finden, die anderen Benutzern mit den DBA_
Versionen derselben Ansichten gewährt wurden . Sie werden in der Dokumentation behandelt .
Diese Ansichten zeigen nur die Berechtigungen an, die dem Benutzer direkt gewährt wurden . Das Finden aller Berechtigungen, einschließlich der Berechtigungen, die indirekt über Rollen gewährt werden, erfordert kompliziertere rekursive SQL-Anweisungen:
select * from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER' order by 1,2,3;
select * from dba_sys_privs where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3;
select * from dba_tab_privs where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3,4;
Es gibt verschiedene Skripte, die das tun, je nachdem, wie verrückt Sie werden möchten. Ich würde persönlich das Skript find_all_privs von Pete Finnigan verwenden .
Wenn Sie es selbst schreiben möchten, wird die Abfrage ziemlich schwierig. Benutzern können Systemberechtigungen gewährt werden, die in sichtbar sind DBA_SYS_PRIVS
. Ihnen können Objektberechtigungen gewährt werden, die in sichtbar sind DBA_TAB_PRIVS
. Und ihnen können Rollen zugewiesen werden, die in sichtbar sind DBA_ROLE_PRIVS
(Rollen können standardmäßig oder nicht standardmäßig sein und auch ein Kennwort erfordern. Nur weil einem Benutzer eine Rolle gewährt wurde, bedeutet dies nicht, dass der Benutzer die von ihm verwendeten Berechtigungen unbedingt verwenden kann standardmäßig über die Rolle erworben). Aber diese Rollen können, die wiederum gewährt Systemprivilegien, Objektprivilegien und zusätzliche Rollen , die durch einen Blick auf eingesehen werden können ROLE_SYS_PRIVS
, ROLE_TAB_PRIVS
und ROLE_ROLE_PRIVS
. Petes Skript geht diese Beziehungen durch, um alle Berechtigungen anzuzeigen, die einem Benutzer letztendlich zufließen.
SYS
Privilegien haben und nur die Privilegien unseres eigenen Kontos betrachten möchten, ist das Skript absolut wertlos. Ich habe weder Zugriff aufUTL_FILE
noch aufDBA_SYS_PRIVS
die anderenDBA
undSYS
Bereiche, auf die sich das Skript bezieht.ROLE_SYS_PRIVS
,ROLE_TAB_PRIVS
undROLE_ROLE_PRIVS
Bedürfnisse untersucht werden. Die Dokumente geben an, dass sie für den aktuellen Benutzer bestimmt sind.Eine weitere nützliche Ressource:
http://psoug.org/reference/roles.html
quelle
DBA
oder keineSYS
Rollen haben und nur die Berechtigungen Ihres eigenen Kontos suchen möchten.Während die Antwort von Raviteja Vutukuri funktioniert und schnell zusammengestellt werden kann, ist sie nicht besonders flexibel für die Variation der Filter und hilft nicht allzu viel, wenn Sie etwas programmgesteuert tun möchten. Also habe ich meine eigene Frage zusammengestellt:
Vorteile:
WHERE
Klausel ändere.DBMS_OUTPUT
oder so (im Vergleich zu Pete Finnigans verknüpftem Skript). Dies macht es nützlich für die programmatische Verwendung und für den Export.GRANT
.quelle
USER_SYS_PRIVS
(direkt gewährte Systemberechtigungen),USER_TAB_PRIVS
(direkt gewährte Objektprivilegien)USER_ROLE_PRIVS
(direkt gewährte Rollen des Benutzers),ROLE_ROLE_PRIVS
(zumROLE_SYS_PRIVS
Abrufen geerbter Rollen), (Systemprivilegien über Rollen) undROLE_TAB_PRIVS
(Objektprivilegien über Rollen). Pfui. Oracle ist so kompliziert.Sie können den folgenden Code verwenden, um alle Berechtigungslisten von allen Benutzern abzurufen.
quelle
So zeigen Sie alle Berechtigungen an:
quelle