Si encuentras algún fallo en tu código o trabajo, recuerda probar siempre en un ambiente de testing antes subir el código al trabajo final.
Solución:
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 el DBA_
versiones de estas mismas vistas. Están cubiertos en la documentación.
Esas vistas solo muestran los privilegios otorgados directamente al usuario Hallazgo todos los privilegios, incluidos los otorgados indirectamente a través de roles, requieren 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 harán eso dependiendo de qué tan loco quieras volverte. Yo personalmente usaría el script find_all_privs de Pete Finnigan.
Si desea escribirlo usted mismo, la consulta se vuelve bastante desafiante. A los usuarios se les pueden otorgar 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 adquirió a través del rol de forma predeterminada). Pero a esos roles se les pueden otorgar, a su vez, privilegios de sistema, privilegios de objeto y roles adicionales que se pueden ver mirando ROLE_SYS_PRIVS
, ROLE_TAB_PRIVS
y ROLE_ROLE_PRIVS
. La secuencia de comandos de Pete recorre esas relaciones para mostrar todos los privilegios que terminan fluyendo hacia un usuario.
Otro recurso útil:
http://psoug.org/reference/roles.html
- DBA_SYS_PRIVS
- DBA_TAB_PRIVS
- DBA_ROLE_PRIVS
Si aceptas, puedes dejar un ensayo acerca de qué le añadirías a este artículo.