usuario - ver privilegios de un rol oracle
¿Cómo encontrar los privilegios y roles otorgados a un usuario en Oracle? (8)
Además de la respuesta de VAV, la primera fue más útil en mi entorno
select * from USER_ROLE_PRIVS where USERNAME=''SAMPLE'';
select * from USER_TAB_PRIVS where Grantee = ''SAMPLE'';
select * from USER_SYS_PRIVS where USERNAME = ''SAMPLE'';
Estoy usando Linux, Oracle10g. He creado un usuario llamado prueba. y concedió crear sesión y seleccionar cualquier permiso de diccionario para el mismo usuario.
También otorgué los roles de sysdba y sysoper a los mismos usuarios.
Ahora quiero mostrar todos los privilegios y roles otorgados al usuario. Encontré la siguiente consulta pero muestra solo crear sesión y seleccionar privilegios de diccionario.
select privilege
from dba_sys_privs
where grantee=''SAMPLE''
order by 1;
por favor ayuda a resolver el problema.
Gracias
Combinando las sugerencias anteriores para determinar tus permisos personales (es decir, permisos de "USUARIO"), utiliza esto:
-- 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);
Mira http://docs.oracle.com/cd/B10501_01/server.920/a96521/privs.htm#15665
Compruebe las tablas USER_SYS_PRIVS, USER_TAB_PRIVS, USER_ROLE_PRIVS.
Ninguna de las otras respuestas funcionó para mí, así que escribí mi propia solución:
A partir de Oracle 11g.
Reemplazar al USUARIO con el nombre de usuario deseado
Roles concedidos:
SELECT *
FROM DBA_ROLE_PRIVS
WHERE GRANTEE = ''USER'';
Privilegios otorgados directamente al usuario:
SELECT *
FROM DBA_TAB_PRIVS
WHERE GRANTEE = ''USER'';
Privilegios concedidos a la función otorgada al usuario:
SELECT *
FROM DBA_TAB_PRIVS
WHERE GRANTEE IN (SELECT granted_role
FROM DBA_ROLE_PRIVS
WHERE GRANTEE = ''USER'');
Privilegios del sistema concedidos:
SELECT *
FROM DBA_SYS_PRIVS
WHERE GRANTEE = ''USER'';
Si desea buscar el usuario al que está conectado actualmente, puede reemplazar el DBA en el nombre de la tabla con el USUARIO y eliminar la cláusula WHERE.
Si se otorgan privilegios a un usuario a través de algunos roles, se puede usar SQL debajo
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'';
siempre haz SQL reutilizable: - :)
-- ===================================================
-- &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
;
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'')
)