La recuperación de todos los privilegios de usuario dentro de Oracle puede variar desde una tarea simple que utiliza una consulta SQL básica hasta un script avanzado, dependiendo principalmente de qué tan involucrados estén configurados los roles y privilegios dentro del servidor.
En este breve tutorial, cubriremos tanto el método de consulta SQL básico como el método de script avanzado para que no tenga ningún problema, independientemente de la complejidad de su configuración.
Consulta de vistas de privilegios de DBA/USUARIO
Un administrador de base de datos (DBA) para Oracle puede simplemente ejecutar una consulta para ver las filas en DBA_SYS_PRIVS
, DBA_TAB_PRIVS
y DBA_ROLE_PRIVS
para recuperar información sobre los privilegios de usuario relacionados con el system
, tables
y roles
, respectivamente.
Por ejemplo, un DBA que desee ver todo el system
privilegios otorgados a todos los usuarios generaría la siguiente consulta:
SELECT
*
FROM
DBA_SYS_PRIVS;
El DBA_SYS_PRIVS
vista contiene tres columnas de datos:
GRANTEE
es el nombre, la función o el usuario al que se le asignó el privilegio.PRIVILEGE
es el privilegio que se asigna.ADMIN_OPTION
indica si el privilegio otorgado también incluye elADMIN
opción.
Para determinar qué usuarios tienen directo conceder acceso a una table
usaremos el DBA_TAB_PRIVS
ver:
SELECT
*
FROM
DBA_TAB_PRIVS;
Puede consultar la documentación oficial para obtener más información sobre las columnas devueltas de esta consulta, pero las columnas críticas son:
GRANTEE
es el nombre del usuario con acceso concedido.TABLE_NAME
es el nombre del objeto (tabla, índice, secuencia, etc.).PRIVILEGE
es el privilegio asignado alGRANTEE
para el objeto asociado.
Finalmente, consultando el DBA_ROLE_PRIVS
view tiene mucha de la misma información pero aplicable a roles
en cambio, donde GRANTED_ROLE
columna especifica el rol en cuestión:
SELECT
*
FROM
DBA_ROLE_PRIVS;
Consultar los privilegios del usuario actual
Si el acceso DBA no es posible o necesario, también es posible modificar ligeramente las consultas anteriores para ver los privilegios únicamente para el usuario actual .
Esto se hace consultando alternativamente USER_
versiones del DBA_
anterior puntos de vista. Por lo tanto, en lugar de buscar en DBA_SYS_PRIVS
consultaríamos USER_SYS_PRIVS
, así:
SELECT
*
FROM
USER_SYS_PRIVS;
Dado que el USER_
las vistas de privilegios son efectivamente las mismas que sus DBA_
contrapartes, pero específico solo para el usuario actual, el tipo de datos devueltos y los nombres de las columnas son todos idénticos a los de la consulta DBA_
vistas en cambio.
Script avanzado para encontrar todos los privilegios
Si bien los métodos anteriores funcionarán para las configuraciones básicas del sistema, las cosas comienzan a complicarse en Oracle cuando existen muchos roles que, a su vez, otorgan privilegios de rol a otros roles, y así sucesivamente. Dado que el DBA_
y USER_
las vistas privilegiadas solo muestran GRANTEES
con asignación directa acceso, a menudo los privilegios que se heredan a través de otros roles no se mostrarán fácilmente.
Para solucionar esto, es recomendable utilizar un script avanzado como el trabajo de confianza de Pete Finnigan y su find_all_privs.sql
texto. También puede optar por una versión modificada de David Arthur, find_all_privs2.sql
.
En cualquier caso, el propósito de estos scripts es permitirle recursivamente localizar todos los privilegios otorgados a un usuario en particular. Cuando el script localiza un role
para el usuario, busca recursivamente otros roles y privilegios otorgados a ese rol, repitiendo el proceso en toda la cadena. Los resultados de la secuencia de comandos se pueden mostrar en la pantalla o en un archivo, según se desee.
Puede encontrar más información sobre estos scripts y su uso en petefinnigan.com.