ver usuarios usuario sobre rol privilegios permisos esquema developer dar crear asignar all sql oracle rules privileges

sql - usuarios - ver privilegios de un usuario oracle



¿Cómo mostrar todos los privilegios de un usuario en Oracle? (4)

Hay varios guiones flotando que harán eso dependiendo de lo loco que quieras obtener. Yo personalmente usaría el script find_all_privs de Pete Finnigan.

Si quiere escribirlo usted mismo, la consulta se vuelve bastante desafiante. Los usuarios pueden recibir privilegios del sistema que son visibles en DBA_SYS_PRIVS . Se les pueden otorgar privilegios de objetos que son visibles en DBA_TAB_PRIVS . Y se les pueden otorgar roles visibles en DBA_ROLE_PRIVS (los roles pueden ser predeterminados o no predeterminados y también pueden requerir una contraseña, por lo que el hecho de que un usuario tenga un rol asignado no significa que el usuario pueda usar necesariamente los privilegios). adquirió el papel por defecto). Pero a esas funciones, a su vez, se les pueden otorgar privilegios de sistema, privilegios de objeto y roles adicionales que se pueden ver mirando ROLE_SYS_PRIVS , ROLE_TAB_PRIVS y ROLE_ROLE_PRIVS . El guión de Pete revisa esas relaciones para mostrar todos los privilegios que terminan fluyendo a un usuario.

¿Puede alguien decirme cómo mostrar todos los privilegios / reglas de un usuario específico en la consola sql?



Puede probar estas vistas a continuación.

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

Los DBA y otros usuarios DBA_ pueden encontrar los privilegios otorgados a otros usuarios con las versiones DBA_ de estas mismas vistas. Están cubiertos en la documentation .

Esas vistas solo muestran los privilegios otorgados directamente al usuario. Encontrar todos los privilegios, incluidos los otorgados indirectamente a través de roles, requiere sentencias SQL recursivas más complicadas:

select * from dba_role_privs connect by prior granted_role = grantee start with grantee = ''&USER'' order by 1,2,3; select * from dba_sys_privs where grantee = ''&USER'' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = ''&USER'') order by 1,2,3; select * from dba_tab_privs where grantee = ''&USER'' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = ''&USER'') order by 1,2,3,4;


Puede usar el código a continuación para obtener toda la lista de privilegios de todos los usuarios.

select * from dba_sys_privs