¿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_PRIVS
y ROLE_ROLE_PRIVS
. El guión de Pete recorre esas relaciones para mostrar todos los privilegios que terminan fluyendo hacia un usuario.
SYS
privilegios y solo queremos ver los privilegios de nuestra propia cuenta, el guión no tiene ningún valor. No tengo acceso aUTL_FILE
ni aDBA_SYS_PRIVS
las otras áreasDBA
y queSYS
mira el guión.ROLE_SYS_PRIVS
,ROLE_TAB_PRIVS
yROLE_ROLE_PRIVS
necesita ser examinado. Los documentos indican que son para el usuario actual .Otro recurso útil:
http://psoug.org/reference/roles.html
fuente
DBA
oSYS
, 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:
WHERE
cláusula.DBMS_OUTPUT
o 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