oracolo: elenca gli utenti con accesso a determinate tabelle


28

Sono sicuro che questo è stato chiesto prima, ma non riesco a trovare i dettagli rilevanti per quanto segue.

Esiste una sorta di tabella precostruita che può fare quanto segue (ho usato dba_tab_privs ma è limitato e non soddisfa tutti i miei bisogni), se no qualcuno ha qualche domanda per rispondere a quanto segue?

  1. Elencare tutti gli utenti a cui è stato assegnato un ruolo particolare?
  2. Elencare tutti i ruoli assegnati a un utente?
  3. Elencare tutti i privilegi dati a un utente?
  4. Elencare a quali tabelle un determinato ruolo consente a SELECT di accedere?
  5. Elencare tutte le tabelle che un utente può selezionare?
  6. Elencare tutti gli utenti che possono SELEZIONARE su una determinata tabella (o ricevendo un ruolo rilevante o attraverso una sovvenzione diretta (ovvero selezionare la sovvenzione in grado di partecipare))? Il risultato di questa query dovrebbe anche mostrare attraverso quale ruolo l'utente ha questo accesso o se si trattava di una concessione diretta.

Risposte:


33

Elencare tutti gli utenti a cui è stato assegnato un ruolo particolare

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

Elencare tutti i ruoli assegnati a un utente

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

Elencare tutti i privilegi assegnati a un utente

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: tratto da http://www.adp-gmbh.ch/ora/misc/recursively_list_privilege.html

Elencare a quali tabelle un determinato ruolo consente a SELECT di accedere?

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

Elencare tutte le tabelle che un utente può selezionare?

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

Elencare tutti gli utenti che possono SELEZIONARE su una determinata tabella (o ricevendo un ruolo rilevante o attraverso una sovvenzione diretta (ovvero selezionare la sovvenzione in grado di partecipare))? Il risultato di questa query dovrebbe anche mostrare attraverso quale ruolo l'utente ha questo accesso o se si trattava di una concessione diretta.

-- 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' ;

Questo è un buon inizio, ma il n. 3 non include i privilegi sugli oggetti, il n. 5 non include i SELECTprivilegi disponibili a causa di un ruolo e il n. 6 è mancante.
Leigh Riffel,

Opps, ho bisogno di un po 'di CONNECT BY .. PRIOR per # 6
Philᵀᴹ

La tua risposta per # 5 include tabelle che l'utente può selezionare attraverso un ruolo che gli è stato assegnato?
dgf

Funziona se l'utente ottiene il privilegio da un ruolo a cui è stato concesso un altro ruolo?
jpmc26

2

Esistono molti modi per ottenere le informazioni desiderate utilizzando:

visualizzazioni del dizionario dei dati

presente in oracolo.

Puoi semplicemente interrogare le viste e recuperare i dettagli: Ad esempio:

seleziona * da DBA_COL_PRIVS;

seleziona * da ALL_COL_PRIVS;

seleziona * da USER_COL_PRIVS;

Questo ti dice:

La vista DBA descrive tutte le concessioni di oggetti colonna nel database. TUTTA la vista descrive tutte le concessioni di oggetti colonna per le quali l'utente corrente o PUBLIC è il proprietario, il concedente o il beneficiario dell'oggetto. La vista USER descrive le concessioni di oggetti colonna per le quali l'utente corrente è il proprietario, il concedente o il beneficiario dell'oggetto.

Per maggiori informazioni, dai un'occhiata

Spero che sia di aiuto.


1
Ciò non sembra rispondere alla domanda: come può un DBA scoprire a cosa può accedere un determinato utente arbitrario?
Jon of All Trades,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.