it-swarm-eu.dev

oracle - seznam uživatelů s přístupem k určitým tabulkám

Jsem si jistý, že to bylo požádáno již dříve, ale nemohu najít relevantní podrobnosti pro následující.

Existuje nějaká předpřipravená tabulka, která může dělat následující (použila jsem dba_tab_privs, ale je omezená a nesplňuje všechny mé potřeby), pokud ne, má někdo nějaké dotazy k zodpovězení následujícího?

  1. Seznam všech uživatelů, kterým byla přidělena určitá role?
  2. Seznam všech rolí přidělených uživateli?
  3. Seznam všech oprávnění udělených uživateli?
  4. Seznam, ke kterým tabulkám určitá role dává SELECT přístup?
  5. Seznam všech tabulek, ze kterých může uživatel VYBRAT?
  6. Uveďte všechny uživatele, kteří se mohou VYBRAT na konkrétní tabulce (buď prostřednictvím přiřazení relevantní role nebo přímým grantem (tj. Výběrem grantu se můžete připojit))? Výsledek tohoto dotazu by měl také ukázat, jakou rolí má uživatel tento přístup nebo zda šlo o přímý grant.
29
dgf

Seznam všech uživatelů, kterým byla přidělena určitá role

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

Seznam všech rolí přidělených uživateli

-- Change '[email protected] to the required user
select * from dba_role_privs where grantee = 'PHIL';

Seznam všech oprávnění udělených uživateli

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;

Poznámka: Převzato z http://www.adp-gmbh.ch/ora/misc/recursively_list_privilege.html

Seznam tabulek, které určitá role dává SELECT přístupu?

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

Seznam všech tabulek, z nichž si uživatel může VYBRAT?

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

Seznam všech uživatelů, kteří se mohou VYBRAT na konkrétní tabulce (buď prostřednictvím přiřazení relevantní role nebo přímým grantem (tj. Výběr grantu na možnost, aby se připojili))? Výsledek tohoto dotazu by měl také ukázat, jakou rolí má uživatel tento přístup nebo zda se jedná o přímý grant.

-- 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' ;
35
Philᵀᴹ

Existuje mnoho způsobů, jak získat informace, které chcete použít:

zobrazení datového slovníku

přítomen v Oracle.

Můžete pouze dotazovat pohledy a načíst podrobnosti: Například:

vyberte * z DBA_COL_PRIVS;

vyberte * z ALL_COL_PRIVS;

vyberte * z USER_COL_PRIVS;

To vám řekne:

Pohled DBA popisuje všechny udělení objektu sloupce v databázi. Zobrazení ALL popisuje všechny granty objektu sloupce, pro které je aktuální uživatel nebo PUBLIC vlastníkem objektu, poskytovatelem grantu nebo příjemcem grantu. Pohled USER popisuje granty objektu sloupce, pro které je aktuálním uživatelem vlastník objektu, poskytovatel grantu nebo příjemce grantu.

Pro více informací podívejte se na toto

Snad to pomůže.

2
Vimalnath