Oracle - Benutzer mit Zugriff auf bestimmte Tabellen auflisten

28

Ich bin sicher, dass dies schon einmal gefragt wurde, aber ich kann die relevanten Details für Folgendes nicht finden.

Gibt es eine vorgefertigte Tabelle, die Folgendes kann (ich habe dba_tab_privs verwendet, sie ist jedoch begrenzt und erfüllt nicht alle meine Anforderungen), wenn nicht jemand Fragen zur Beantwortung der folgenden Fragen hat?

  1. Alle Benutzer auflisten, denen eine bestimmte Rolle zugewiesen wurde?
  2. Alle Rollen auflisten, die einem Benutzer zugewiesen wurden?
  3. Alle einem Benutzer erteilten Berechtigungen auflisten?
  4. Auflisten, auf welche Tabellen eine bestimmte Rolle SELECT Zugriff gewährt.
  5. Alle Tabellen auflisten, aus denen ein Benutzer AUSWÄHLEN kann.
  6. Alle Benutzer auflisten, die für eine bestimmte Tabelle AUSWÄHLEN können (entweder durch Zuweisung einer relevanten Rolle oder durch direkte Zuweisung (dh durch Zuweisung von select on atable to joe))? Das Ergebnis dieser Abfrage sollte auch anzeigen, über welche Rolle der Benutzer über diesen Zugriff verfügt oder ob es sich um eine direkte Erteilung handelt.
dgf
quelle

Antworten:

33

Listen Sie alle Benutzer auf, denen eine bestimmte Rolle zugewiesen wurde

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

Listet alle Rollen auf, die einem Benutzer zugewiesen wurden

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

Listet alle Berechtigungen auf, die einem Benutzer erteilt wurden

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;

Hinweis: Entnommen aus http://www.adp-gmbh.ch/ora/misc/recursively_list_privilege.html

Auflisten, auf welche Tabellen eine bestimmte Rolle SELECT Zugriff gewährt.

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

Alle Tabellen auflisten, aus denen ein Benutzer AUSWÄHLEN kann.

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

Alle Benutzer auflisten, die für eine bestimmte Tabelle AUSWÄHLEN können (entweder durch Zuweisung einer relevanten Rolle oder durch direkte Zuweisung (dh durch Zuweisung von select on atable to joe))? Das Ergebnis dieser Abfrage sollte auch anzeigen, über welche Rolle der Benutzer über diesen Zugriff verfügt oder ob es sich um eine direkte Erteilung handelt.

-- 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' ;
Philᵀᴹ
quelle
Dies ist ein guter Anfang, aber # 3 enthält keine Objektberechtigungen, # 5 enthält keine SELECTBerechtigungen, die aufgrund einer Rolle verfügbar sind, und # 6 fehlt.
Leigh Riffel
Opps, brauche etwas CONNECT BY .. PRIOR für # 6
Philᵀᴹ
Enthält Ihre Antwort für # 5 Tabellen, die der Benutzer über eine ihm zugewiesene Rolle auswählen kann?
dgf
Funktioniert dies, wenn der Benutzer das Privileg einer Rolle erhält, der eine andere Rolle zugewiesen wurde?
jpmc26
2

Es gibt viele Möglichkeiten, um die gewünschten Informationen abzurufen:

Datenwörterbuchansichten

im Orakel vorhanden.

Sie können einfach die Ansichten abfragen und die Details abrufen: Zum Beispiel:

Wählen Sie * aus DBA_COL_PRIVS;

Wählen Sie * aus ALL_COL_PRIVS;

Wählen Sie * aus USER_COL_PRIVS.

Dies sagt Ihnen:

In der DBA-Ansicht werden alle Spaltenobjektzuweisungen in der Datenbank beschrieben. In der Ansicht ALL werden alle Spaltenobjekt-Berechtigungen beschrieben, für die der aktuelle Benutzer oder PUBLIC der Objekteigentümer, -geber oder -empfänger ist. In der USER-Ansicht werden Spaltenobjektzuteilungen beschrieben, für die der aktuelle Benutzer der Objektbesitzer, -zuteiler oder -empfänger ist.

Weitere Informationen finden Sie hier

Hoffe das hilft.

Vimalnath
quelle
1
Dies scheint die Frage nicht zu beantworten: Wie kann ein DBA herausfinden, auf was ein bestimmter beliebiger Benutzer zugreifen kann?
Jon of All Trades