¿Alguien puede decirme cómo mostrar todos los privilegios / reglas de un usuario específico en la consola sql?
fuente
¿Alguien puede 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 avanzados pueden encontrar los privilegios otorgados a otros usuarios con las DBA_versiones de estas mismas vistas. Están cubiertos en la documentación .
Esas vistas solo muestran los privilegios otorgados directamente al usuario. Encontrar todos los privilegios, incluidos los otorgados indirectamente a través de roles, requiere declaraciones 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;
Hay varios scripts flotando que lo harán dependiendo de qué tan loco quiera volverse. Yo personalmente usaría el script find_all_privs de Pete Finnigan .
Si desea escribirlo usted mismo, la consulta se vuelve bastante desafiante. Los usuarios pueden obtener privilegios del 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 que son 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 a un usuario se le haya otorgado un rol no significa que el usuario necesariamente pueda usar los privilegios que adquirido a través del rol de forma predeterminada). Pero esos papeles pueden, a su vez, ser privilegios concedidos sistema, privilegios de objeto y las funciones adicionales que se pueden ver examinado ROLE_SYS_PRIVS, ROLE_TAB_PRIVSy ROLE_ROLE_PRIVS. El guión de Pete recorre esas relaciones para mostrar todos los privilegios que terminan fluyendo hacia un usuario.
SYSprivilegios y solo queremos ver los privilegios de nuestra propia cuenta, el guión no tiene ningún valor. No tengo acceso aUTL_FILEni aDBA_SYS_PRIVSlas otras áreasDBAy queSYSmira el guión.ROLE_SYS_PRIVS,ROLE_TAB_PRIVSyROLE_ROLE_PRIVSnecesita ser examinado. Los documentos indican que son para el usuario actual .Otro recurso útil:
http://psoug.org/reference/roles.html
fuente
DBAoSYS, y solo desea encontrar los privilegios de su propia cuenta.Si bien la respuesta de Raviteja Vutukuri funciona y es rápida de armar, no es particularmente flexible para variar los filtros y no ayuda demasiado si está buscando hacer algo mediante programación. Así que armé mi propia consulta:
Ventajas:
WHEREcláusula.DBMS_OUTPUTo algo (en comparación con el guión vinculado de Pete Finnigan). Esto lo hace útil para uso programático y para exportar.GRANT.fuente
USER_SYS_PRIVS(privilegios del sistema otorgados directamente),USER_TAB_PRIVS( privilegios de objeto otorgados directamente)USER_ROLE_PRIVS(roles otorgados directamente por el usuario),ROLE_ROLE_PRIVS(para obtener roles heredados),ROLE_SYS_PRIVS(privilegios del sistema a través de roles) yROLE_TAB_PRIVS(privilegios de objeto a través de roles). Ugh. Oracle es tan complicado.Puede usar el siguiente código para obtener toda la lista de privilegios de todos los usuarios.
fuente
Para mostrar todos los privilegios:
fuente