2012-03-21 15 views

Respuesta

127

Puede probar estas vistas a continuación.

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

DBA y otros usuarios avanzados pueden encontrar los privilegios concedidos a otros usuarios con las versiones DBA_ de estos mismos puntos de vista. Están cubiertos en el documentation.

Esas vistas solo muestran los privilegios concedidos directamente al usuario. Encontrar todos los los privilegios, incluidas las concedidas indirectamente a través de los roles, requiere sentencias SQL recursivas más complicados:

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

Hay varios guiones que flotan alrededor que va a hacer que dependiendo de lo loco que desea obtener. Yo personalmente usaría el find_all_privs script de Pete Finnigan.

Si quiere escribirlo usted mismo, la consulta se vuelve bastante desafiante. Los usuarios pueden tener privilegios de sistema que son visibles en DBA_SYS_PRIVS. Se les pueden otorgar privilegios de objeto 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 se le haya otorgado un rol no significa que el usuario pueda usar los privilegios necesariamente). adquirió el papel por defecto). Pero a esos roles 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.

+0

El guión es impresionante simplemente echamos un vistazo –

+1

Necesita privilegios de que el paquete UTL_FILE o de lo contrario se produce un error cuando se ejecuta el guión de Pete Finnigan: "identificador 'UTL_FILE' deben ser declarados". Puede conectarse como sys con roll sysdba a través de SQL Developer y luego funcionará o se otorgará privilegios de ejecución para este paquete usando: grant execute en UTL_FILE al ; – Jan

+1

Y para aquellos de nosotros sin privilegios 'SYS' y solo queremos ver los privilegios de nuestra propia cuenta, el script es completamente inútil. No tengo acceso a 'UTL_FILE' ni a' DBA_SYS_PRIVS' ni a las otras áreas 'DBA' y' SYS' que examina el script. – vapcguy

2

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

select * from dba_sys_privs 
Cuestiones relacionadas