Ich benutze Linux, Oracle10g. Ich habe einen Benutzer namens test erstellt. und erteilte Erstellungssitzung und wähle eine beliebige Wörterbuchberechtigung für denselben Benutzer aus.
Ich habe den gleichen Benutzern auch Sysdba- und Sysoper-Rollen gewährt.
Jetzt möchte ich alle Berechtigungen und Rollen anzeigen, die dem Benutzer gewährt wurden. Ich habe die folgende Abfrage gefunden, aber es werden nur Sitzungen zum Erstellen und Auswählen von Wörterbuchberechtigungen angezeigt.
select privilege
from dba_sys_privs
where grantee='SAMPLE'
order by 1;
Bitte helfen Sie, das Problem zu beheben.
Vielen Dank
oracle
security
oracle10g
user-accounts
Abhimanyu garg
quelle
quelle
Antworten:
Siehe http://docs.oracle.com/cd/B10501_01/server.920/a96521/privs.htm#15665
Überprüfen Sie die Tabellen USER_SYS_PRIVS, USER_TAB_PRIVS und USER_ROLE_PRIVS mit diesen select-Anweisungen
SELECT * FROM USER_SYS_PRIVS; SELECT * FROM USER_TAB_PRIVS; SELECT * FROM USER_ROLE_PRIVS;
quelle
SELECT * FROM
diese Tabellen. Lass uns nicht faul werden ... Ich ärgere mich, wenn ich keinen Code sehe. Nicht jeder kann Ihre Gedanken über die genaue Syntax lesen, und Dokumentationslinks können verschoben werden.SELECT * FROM USER_SYS_PRIVS;
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;
USER_ROLE_PRIVS
funktioniert dies nicht für Sie, weil: "USER_ROLE_PRIVS beschreibt die Rollen, die dem aktuellen Benutzer gewährt wurden", wie in der Oracle-Dokumentation angegeben. Stattdessen sollten Sie in derDBA_ROLE_PRIVS
Ansicht nach Informationen suchen . Warum? Denn: "DBA_ROLE_PRIVS beschreibt die Rollen, die allen Benutzern und Rollen in der Datenbank gewährt wurden"Zusätzlich zur Antwort von VAV war die erste in meiner Umgebung am nützlichsten
select * from USER_ROLE_PRIVS where USERNAME='SAMPLE'; select * from USER_TAB_PRIVS where Grantee = 'SAMPLE'; select * from USER_SYS_PRIVS where USERNAME = 'SAMPLE';
quelle
dba_XXX_privs
, lautet der Spaltennamegrantee
anstelle vonusername
.Keine der anderen Antworten hat bei mir funktioniert, also habe ich meine eigene Lösung geschrieben:
Ab Oracle 11g.
Ersetzen Sie USER durch den gewünschten Benutzernamen
Zugegebene Rollen:
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'USER';
Direkt dem Benutzer gewährte Berechtigungen:
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'USER';
Berechtigungen für die dem Benutzer gewährte Rolle:
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE IN (SELECT granted_role FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'USER');
Gewährte Systemberechtigungen:
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'USER';
Wenn Sie nach dem Benutzer suchen möchten, mit dem Sie gerade verbunden sind, können Sie DBA im Tabellennamen durch USER ersetzen und die WHERE-Klausel entfernen.
quelle
Wenn einem Benutzer über einige Rollen Berechtigungen erteilt werden, kann unten SQL verwendet werden
select * from ROLE_ROLE_PRIVS where ROLE = 'ROLE_NAME'; select * from ROLE_TAB_PRIVS where ROLE = 'ROLE_NAME'; select * from ROLE_SYS_PRIVS where ROLE = 'ROLE_NAME';
quelle
Kombinieren Sie die früheren Vorschläge, um Ihre persönlichen Berechtigungen (dh 'USER'-Berechtigungen) zu ermitteln, und verwenden Sie dann Folgendes:
-- your permissions select * from USER_ROLE_PRIVS where USERNAME= USER; select * from USER_TAB_PRIVS where Grantee = USER; select * from USER_SYS_PRIVS where USERNAME = USER; -- granted role permissions select * from ROLE_ROLE_PRIVS where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER); select * from ROLE_TAB_PRIVS where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER); select * from ROLE_SYS_PRIVS where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER);
quelle
SELECT * FROM DBA_ROLE_PRIVS WHERE UPPER(GRANTEE) LIKE '%XYZ%';
quelle
select * from ROLE_TAB_PRIVS where role in ( select granted_role from dba_role_privs where granted_role in ('ROLE1','ROLE2') )
quelle
Machen Sie SQL immer wieder verwendbar: - :)
-- =================================================== -- &role_name will be "enter value for 'role_name'". -- Date: 2015 NOV 11. -- sample code: define role_name=&role_name -- sample code: where role like '%&&role_name%' -- =================================================== define role_name=&role_name select * from ROLE_ROLE_PRIVS where ROLE = '&&role_name'; select * from ROLE_SYS_PRIVS where ROLE = '&&role_name'; select role, privilege,count(*) from ROLE_TAB_PRIVS where ROLE = '&&role_name' group by role, privilege order by role, privilege asc ;
quelle
ROLES
Gruppe nur auf eine bestimmte Rolle. Wenn wir Wiederverwertbarkeit sprechen, sollte es 1) Schleife durch dieUSER
Gruppe und spuckte*
ausUSER_ROLE_PRIVS
,USER_TAB_PRIVS
undUSER_SYS_PRIVS
, für einen bestimmten Benutzer, dann 2) die Rollen für den jeweiligen Benutzer geben , die eingegeben wird (wie in ShamrockCS‘Antwort). Ich denke, angesichts der Frage des OP wollen wir hier die Eigenschaften eines bestimmten Benutzers kennen, nicht die Benutzer mit einer bestimmten Rolle.Das einzige sichtbare Ergebnis, das ich verstehen konnte, war, mich zuerst mit dem Benutzer zu verbinden, für den ich die Rechte erhalten wollte, und dann mit der folgenden Abfrage:
SELECT GRANTEE, PRIVILEGE, TABLE_NAME FROM USER_TAB_PRIVS;
quelle