86 votes

Comment trouver les privilèges et les rôles accordés à un utilisateur dans Oracle ?

J'utilise Linux, Oracle10g. J'ai créé un utilisateur appelé test et je lui ai accordé les autorisations de créer une session et de sélectionner n'importe quel dictionnaire.

J'ai également attribué les rôles sysdba et sysoper aux mêmes utilisateurs.

Je veux maintenant afficher tous les privilèges et rôles accordés à l'utilisateur. J'ai trouvé la requête suivante, mais elle n'affiche que les privilèges de création de session et de sélection de dictionnaire.

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

veuillez nous aider à résoudre le problème.

T

76voto

user2668478 Points 764

En complément de la réponse de VAV, la première a été la plus utile dans mon environnement

select * from USER_ROLE_PRIVS where USERNAME='SAMPLE';
select * from USER_TAB_PRIVS where Grantee = 'SAMPLE';
select * from USER_SYS_PRIVS where USERNAME = 'SAMPLE';

69voto

VAV Points 1608

Regarder http://docs.oracle.com/cd/B10501_01/server.920/a96521/privs.htm#15665

Vérifiez les tables USER_SYS_PRIVS, USER_TAB_PRIVS, USER_ROLE_PRIVS à l'aide des instructions suivantes

SELECT * FROM USER_SYS_PRIVS; 
SELECT * FROM USER_TAB_PRIVS; 
SELECT * FROM USER_ROLE_PRIVS;

64voto

Mocking Points 900

Aucune des autres réponses n'a fonctionné pour moi, j'ai donc écrit ma propre solution :

À partir d'Oracle 11g.

Remplacer USER par le nom d'utilisateur souhaité

Rôles accordés :

SELECT * 
  FROM DBA_ROLE_PRIVS 
 WHERE GRANTEE = 'USER';

Privilèges accordés directement à l'utilisateur :

SELECT * 
  FROM DBA_TAB_PRIVS 
 WHERE GRANTEE = 'USER';

Privilèges accordés au rôle accordé à l'utilisateur :

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

Privilèges système accordés :

SELECT * 
  FROM DBA_SYS_PRIVS 
 WHERE GRANTEE = 'USER';

Si vous souhaitez rechercher l'utilisateur sous lequel vous êtes actuellement connecté, vous pouvez remplacer DBA par USER dans le nom de la table et supprimer la clause WHERE.

15voto

ShamrockCS Points 151

Combinez les suggestions précédentes pour déterminer vos autorisations personnelles (c'est-à-dire les autorisations "USER"), puis utilisez ceci :

-- 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);

10voto

upog Points 2208

Si des privilèges sont accordés à un utilisateur par le biais de certains rôles, le code SQL suivant peut être utilisé

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';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X