oracle - lista użytkowników z dostępem do niektórych tabel

28

Jestem pewien, że już o to pytano, ale nie mogę znaleźć odpowiednich informacji na następujące tematy.

Czy istnieje jakiś rodzaj gotowej tabeli, który może wykonać następujące czynności (użyłem dba_tab_privs, ale jest on ograniczony i nie spełnia wszystkich moich potrzeb), jeśli nie, ktoś ma jakieś pytania dotyczące odpowiedzi na poniższe pytania?

  1. Wymień wszystkich użytkowników, którym przypisano określoną rolę?
  2. Wymień wszystkie role przypisane użytkownikowi?
  3. Czy wymienić wszystkie uprawnienia nadane użytkownikowi?
  4. Lista tabel, do których dana rola daje dostęp SELECT?
  5. Lista wszystkich tabel, z których użytkownik może wybrać?
  6. Wymień wszystkich użytkowników, którzy mogą WYBRAĆ w konkretnej tabeli (albo poprzez przypisanie im odpowiedniej roli, albo poprzez bezpośrednią dotację (tj. Przyznanie dotacji na podstawie Joe))? Wynik tego zapytania powinien również wskazywać, przez jaką rolę użytkownik ma ten dostęp lub czy było to bezpośrednie przyznanie.
dgf
źródło

Odpowiedzi:

33

Lista wszystkich użytkowników, którym przypisano określoną rolę

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

Wymień wszystkie role przypisane użytkownikowi

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

Lista wszystkich uprawnień przyznanych użytkownikowi

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;

Uwaga: pochodzi z http://www.adp-gmbh.ch/ora/misc/recursively_list_privilege.html

Lista tabel, do których dana rola daje dostęp SELECT?

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

Lista wszystkich tabel, z których użytkownik może wybrać?

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

Wymień wszystkich użytkowników, którzy mogą WYBRAĆ w konkretnej tabeli (albo poprzez przypisanie im odpowiedniej roli, albo poprzez bezpośrednią dotację (tj. Przyznanie dotacji na podstawie Joe))? Wynik tego zapytania powinien również wskazywać, przez jaką rolę użytkownik ma ten dostęp lub czy było to bezpośrednie przyznanie.

-- 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ᵀᴹ
źródło
To dobry początek, ale # 3 nie obejmuje uprawnień do obiektów, # 5 nie obejmuje SELECTuprawnień dostępnych z powodu roli i brakuje # 6.
Leigh Riffel
Opps, potrzebuję CONNECT BY .. PRIOR dla # 6
Philᵀᴹ
Czy Twoja odpowiedź na nr 5 obejmuje tabele, które użytkownik może wybrać według przypisanej mu roli?
dgf
Czy to działa, jeśli użytkownik uzyska uprawnienia z roli, której przyznano inną rolę?
jpmc26,
2

Istnieje wiele sposobów uzyskania potrzebnych informacji:

widoki słownika danych

obecny w wyroczni.

Możesz po prostu zapytać o widoki i pobrać szczegóły: Na przykład:

wybierz * z DBA_COL_PRIVS;

wybierz * z ALL_COL_PRIVS;

wybierz * z USER_COL_PRIVS;

To mówi ci:

Widok DBA opisuje wszystkie dotacje obiektów kolumna w bazie danych. Widok WSZYSTKIE opisuje wszystkie przydziały obiektów kolumnowych, dla których bieżący użytkownik lub PUBLIC jest właścicielem obiektu, podmiotem udzielającym lub beneficjentem. Widok UŻYTKOWNIK opisuje przydziały obiektów kolumnowych, dla których bieżący użytkownik jest właścicielem obiektu, podmiotem udzielającym lub beneficjentem.

Aby uzyskać więcej informacji, sprawdź to

Mam nadzieję że to pomoże.

Vimalnath
źródło
1
To nie wydaje się odpowiadać na pytanie: w jaki sposób DBA może dowiedzieć się, do czego może uzyskać dostęp dowolny określony użytkownik?
Jon of All Trades