oracle - список користувачів, які мають доступ до певних таблиць


28

Я впевнений, що про це запитували і раніше, але я не можу знайти відповідні деталі для наступного.

Чи є якась заздалегідь складена таблиця, яка може виконати наступне (я використовувала dba_tab_privs, але вона обмежена і не відповідає всім моїм потребам), якщо хтось не має запитів щодо відповіді на наступне?

  1. Перерахуйте всіх користувачів, яким призначена певна роль?
  2. Список усіх ролей, наданих користувачеві?
  3. Список усіх привілеїв, наданих користувачеві?
  4. Перелічіть, до яких таблиць певна роль надає SELECT доступ?
  5. Список усіх таблиць, з яких користувач може ВИБІРИТИ?
  6. Перерахуйте всіх користувачів, які можуть ВИБІРАТИ в певній таблиці (або через надання відповідної ролі, або через прямий грант (тобто вибір грантів на atable to joe))? Результат цього запиту також повинен показувати, через яку роль користувач має цей доступ або чи це був прямий грант.

Відповіді:


33

Перерахуйте всіх користувачів, яким призначена певна роль

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

Перерахуйте всі ролі, надані користувачеві

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

Перерахуйте всі привілеї, надані користувачеві

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;

Примітка: взято з http://www.adp-gmbh.ch/ora/misc/recursively_list_privilege.html

Перелічіть, до яких таблиць певна роль надає SELECT доступ?

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

Список усіх таблиць, з яких користувач може ВИБІРИТИ?

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

Перерахуйте всіх користувачів, які можуть ВИБІРАТИ в певній таблиці (або через надання відповідної ролі, або через прямий грант (тобто вибір грантів на atable to joe))? Результат цього запиту також повинен показувати, через яку роль користувач має цей доступ або чи це був прямий грант.

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

Це вдалий початок, але №3 не включає привілеї об'єкта, №5 не містить SELECTпривілеїв, доступних через роль, а №6 відсутній.
Лей Ріффер

Опс, потрібно трохи
ПІДКЛЮЧИТИ .. ПРИВІР

Чи включає Ваша відповідь №5 таблиці, які користувач може вибрати через роль, яку їм було призначено?
dgf

Чи працює це, якщо користувач отримує привілей від ролі, якій надано іншу роль?
jpmc26

2

Існує багато способів отримати потрібну інформацію:

перегляди словника даних

присутній в оракулі.

Ви можете просто запитувати перегляди та отримувати деталі: Наприклад:

виберіть * з DBA_COL_PRIVS;

виберіть * з ALL_COL_PRIVS;

виберіть * з USER_COL_PRIVS;

Це говорить вам:

Перегляд DBA описує всі грантові об’єкти стовпців у базі даних. ВСЕ подання описує всі грантові об’єкти стовпців, для яких поточний користувач або PUBLIC є власником об'єкта, грантодавцем або одержувачем. Перегляд USER описує грантові об’єкти стовпців, для яких поточним користувачем є власник об'єкта, грант або грант.

Для отримання додаткової інформації перевірте це

Сподіваюся, це допомагає.


1
Схоже, це не відповідає на питання: як DBA може з'ясувати, що конкретний довільний користувач може отримати доступ?
Джон з усіх торгів
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.