sql >> Base de Datos >  >> RDS >> Oracle

Cómo mostrar todos los privilegios de Oracle Database para un usuario

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 el ADMIN 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 al GRANTEE 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.