J'utilise Linux, Oracle10g. J'ai créé un utilisateur appelé test. et accordé une session de création et sélectionnez une autorisation de dictionnaire pour le même utilisateur.
j'ai également attribué des rôles sysdba et sysoper aux mêmes utilisateurs.
Maintenant, je veux afficher tous les privilèges et rôles accordés à l'utilisateur. J'ai trouvé la requête suivante, mais elle ne montre que l'option créer une session et sélectionner les privilèges du dictionnaire.
select privilege
from dba_sys_privs
where grantee='SAMPLE'
order by 1;
s'il vous plaît aider à résoudre le problème.
Merci
Regardez 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.
En plus de la réponse de VAV, la première était 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';
Aucune des autres réponses ne fonctionnant 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 attribué à 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 pour lequel vous êtes actuellement connecté, vous pouvez remplacer DBA dans le nom de la table par USER et supprimer la clause WHERE.
Les privilèges SI sont accordés à un utilisateur via certains rôles, puis SQL 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';
En combinant les suggestions précédentes pour déterminer vos autorisations personnelles (autorisations "UTILISATEUR"), 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);
SELECT *
FROM DBA_ROLE_PRIVS
WHERE UPPER(GRANTEE) LIKE '%XYZ%';
select *
from ROLE_TAB_PRIVS
where role in (
select granted_role
from dba_role_privs
where granted_role in ('ROLE1','ROLE2')
)
toujours rendre SQL réutilisable: - :)
-- ===================================================
-- &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
;