oracle: enumera los usuarios con acceso a ciertas tablas


28

Estoy seguro de que esto se ha preguntado antes, pero parece que no puedo encontrar los detalles relevantes para lo siguiente.

¿Hay algún tipo de tabla preconstruida que pueda hacer lo siguiente (he usado dba_tab_privs pero es limitado y no satisface todas mis necesidades), de lo contrario, ¿alguien tiene alguna pregunta para responder lo siguiente?

  1. ¿Enumerar todos los usuarios a los que se les ha asignado un rol en particular?
  2. ¿Enumerar todas las funciones asignadas a un usuario?
  3. ¿Enumerar todos los privilegios otorgados a un usuario?
  4. ¿Enumerar a qué tablas un determinado rol le da acceso a SELECT?
  5. ¿Enumerar todas las tablas de las que un usuario puede SELECCIONAR?
  6. ¿Enumerar todos los usuarios que pueden SELECCIONAR en una tabla en particular (ya sea mediante un rol relevante o mediante una subvención directa (es decir, selección de subvención en una tabla para Joe))? El resultado de esta consulta también debe mostrar a través de qué rol tiene el usuario este acceso o si fue una concesión directa.

Respuestas:


33

Listar todos los usuarios a los que se les ha asignado un rol particular

-- Change 'DBA' to the required role
select * from dba_role_privs where granted_role = 'DBA'

Enumerar todas las funciones asignadas a un usuario.

-- Change 'PHIL@ to the required user
select * from dba_role_privs where grantee = 'PHIL';

Listar todos los privilegios otorgados a un usuario

select
  lpad(' ', 2*level) || granted_role "User, his roles and privileges"
from
  (
  /* THE USERS */
    select 
      null     grantee, 
      username granted_role
    from 
      dba_users
    where
      username like upper('%&enter_username%')
  /* THE ROLES TO ROLES RELATIONS */ 
  union
    select 
      grantee,
      granted_role
    from
      dba_role_privs
  /* THE ROLES TO PRIVILEGE RELATIONS */ 
  union
    select
      grantee,
      privilege
    from
      dba_sys_privs
  )
start with grantee is null
connect by grantee = prior granted_role;

Nota: Tomado de http://www.adp-gmbh.ch/ora/misc/recursively_list_privilege.html

¿Enumerar a qué tablas un determinado rol le da acceso a SELECT?

-- Change 'DBA' to the required role.
select * from role_tab_privs where role='DBA' and privilege = 'SELECT';

¿Enumerar todas las tablas de las que un usuario puede SELECCIONAR?

--Change 'PHIL' to the required user
select * from dba_tab_privs where GRANTEE ='PHIL' and privilege = 'SELECT';

¿Enumerar todos los usuarios que pueden SELECCIONAR en una tabla en particular (ya sea mediante un rol relevante o mediante una subvención directa (es decir, selección de subvención en una tabla para Joe))? El resultado de esta consulta también debe mostrar a través de qué rol tiene el usuario este acceso o si fue una concesión directa.

-- Change 'TABLENAME' below
select Grantee,'Granted Through Role' as Grant_Type, role, table_name
from role_tab_privs rtp, dba_role_privs drp
where rtp.role = drp.granted_role
and table_name = 'TABLENAME' 
union
select Grantee,'Direct Grant' as Grant_type, null as role, table_name
from dba_tab_privs
where table_name = 'TABLENAME' ;

Este es un buen comienzo, pero el n. ° 3 no incluye privilegios de objeto, el n. ° 5 no incluye SELECTprivilegios disponibles debido a un rol y falta el n. ° 6.
Leigh Riffel

Opps, necesita un poco de CONECTAR POR ... ANTES para # 6
Philᵀᴹ

¿Su respuesta para el n. ° 5 incluye tablas que el usuario puede seleccionar a través de un rol que se les ha asignado?
dgf

¿Funciona esto si el usuario obtiene el privilegio de un rol al que se le ha otorgado otro rol?
jpmc26

2

Hay muchas formas de obtener la información que desea usar:

vistas del diccionario de datos

presente en oráculo.

Puede consultar las vistas y recuperar los detalles: por ejemplo:

seleccione * de DBA_COL_PRIVS;

seleccione * de ALL_COL_PRIVS;

seleccione * de USER_COL_PRIVS;

Esto te dice:

La vista DBA describe todas las concesiones de objetos de columna en la base de datos. La vista ALL describe todas las concesiones de objetos de columna para las cuales el usuario actual o PUBLIC es el propietario, otorgante o concesionario del objeto. La vista USUARIO describe las concesiones de objetos de columna para las cuales el usuario actual es el propietario, otorgante o concesionario del objeto.

Para más información, mira esto

Espero que esto ayude.


1
Esto no parece responder a la pregunta: ¿cómo puede un DBA descubrir a qué puede acceder un usuario arbitrario específico?
Jon of All Trades
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.