oracle - список пользователей с доступом к определенным таблицам

28

Я уверен, что об этом уже спрашивали, но я не могу найти соответствующие детали для следующего.

Существует ли какая-то предварительно созданная таблица, которая может выполнять следующие действия (я использовал dba_tab_privs, но она ограничена и не отвечает всем моим потребностям), если нет, у кого-нибудь есть вопросы для ответа на следующие вопросы?

  1. Список всех пользователей, которым была назначена определенная роль?
  2. Перечислите все роли, данные пользователю?
  3. Список всех привилегий, предоставленных пользователю?
  4. Список таблиц, к которым определенная роль дает доступ SELECT?
  5. Список всех таблиц, из которых пользователь может выбрать?
  6. Перечислите всех пользователей, которые могут ВЫБРАТЬ на определенной таблице (либо с помощью соответствующей роли, либо с помощью прямого гранта (то есть, гранта выбора на atable to joe))? Результат этого запроса также должен показать, через какую роль пользователь имеет этот доступ или был ли это прямой грант.
DGF
источник

Ответы:

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' ;
Philᵀᴹ
источник
Это хорошее начало, но # 3 не включает в себя объектные привилегии, # 5 не включает в себя SELECTпривилегии, доступные из-за роли, а # 6 отсутствует.
Ли Риффель
Оппс, нужно немного СОЕДИНИТЬ ПО .. ПРИОРУ для # 6
Philᵀᴹ
Включает ли ваш ответ для №5 таблицы, которые пользователь может выбрать по назначенной ему роли?
ДГФ
Работает ли это, если пользователь получает привилегию от роли, которой предоставлена ​​другая роль?
jpmc26
2

Есть много способов получить информацию, которую вы хотите использовать:

представления словаря данных

присутствует в оракуле.

Вы можете просто запросить представления и получить подробную информацию: Например:

выберите * из DBA_COL_PRIVS;

выберите * из ALL_COL_PRIVS;

выберите * из USER_COL_PRIVS;

Это говорит вам:

Представление DBA описывает все разрешения объектов столбцов в базе данных. Представление ALL описывает все разрешения объекта столбца, для которых текущий пользователь или PUBLIC является владельцем объекта, лицом, предоставляющим право или получателем. Представление USER описывает разрешения объекта столбца, для которых текущий пользователь является владельцем объекта, лицом, предоставившим право или получателем.

Для получения дополнительной информации, проверьте это

Надеюсь это поможет.

Vimalnath
источник
1
Похоже, это не отвечает на вопрос: как администратор БД может узнать, что может получить доступ к конкретному произвольному пользователю?
Джон на все руки