it-swarm.com.de

Wie finde ich die Berechtigungen und Rollen, die einem Benutzer in Oracle gewährt wurden?

Ich benutze Linux, Oracle10g. Ich habe einen Benutzer namens test erstellt. und die Berechtigung zum Erstellen einer Sitzung erhalten und eine Wörterbuchberechtigung für denselben Benutzer auswählen.

ich habe denselben Benutzern auch die Rollen sysdba und sysoper gewährt.

Jetzt möchte ich alle Privilegien und Rollen anzeigen, die dem Benutzer gewährt wurden. Ich habe die folgende Abfrage gefunden, aber sie zeigt nur die Berechtigung zum Erstellen einer Sitzung und zum Auswählen von Wörterbuchberechtigungen an.

select privilege 
from dba_sys_privs 
where grantee='SAMPLE' 
order by 1;

bitte helfen Sie, das Problem zu beheben.

Vielen Dank

73
Abhimanyu garg

Schauen Sie sich http://docs.Oracle.com/cd/B10501_01/server.920/a96521/privs.htm#15665 an

Überprüfen Sie die Tabellen USER_SYS_PRIVS, USER_TAB_PRIVS, USER_ROLE_PRIVS.

50
VAV

Neben der 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';
65
user2668478

Keine der anderen Antworten funktionierte für mich und ich schrieb meine eigene Lösung:

Ab Oracle 11g.

Ersetzen Sie USER durch den gewünschten Benutzernamen

Zugelassene Rollen:

SELECT * 
  FROM DBA_ROLE_PRIVS 
 WHERE GRANTEE = 'USER';

Berechtigungen, die dem Benutzer direkt gewährt wurden:

SELECT * 
  FROM DBA_TAB_PRIVS 
 WHERE GRANTEE = 'USER';

Berechtigungen, die der Rolle gewährt werden, die dem Benutzer gewährt wird:

SELECT * 
  FROM DBA_TAB_PRIVS  
 WHERE GRANTEE IN (SELECT granted_role 
                     FROM DBA_ROLE_PRIVS 
                    WHERE GRANTEE = 'USER');

Erteilte Systemprivilegien:

SELECT * 
  FROM DBA_SYS_PRIVS 
 WHERE GRANTEE = 'USER';

Wenn Sie nach dem Benutzer suchen möchten, unter dem Sie gerade verbunden sind, können Sie den DBA im Tabellennamen durch USER ersetzen und die WHERE-Klausel entfernen.

48
Mocking

WENN einem Benutzer über einige Rollen Berechtigungen erteilt werden, kann die folgende 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';
10
upog

Kombinieren Sie die früheren Vorschläge, um Ihre persönlichen Berechtigungen (z. B. "USER" -Berechtigungen) zu bestimmen, 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);
8
ShamrockCS
SELECT * 
FROM DBA_ROLE_PRIVS 
WHERE UPPER(GRANTEE) LIKE '%XYZ%';
1
user2615480
select * 
from ROLE_TAB_PRIVS 
where role in (
    select granted_role
    from dba_role_privs 
    where granted_role in ('ROLE1','ROLE2')
)
1
shans

sQL immer wiederverwendbar machen: - :)

-- ===================================================
-- &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
;
0
dave