2014-10-25 2 views
0

Я хочу узнать, сколько пользователей имеет разрешение на создание таблицы в моей базе данных Oracle 11g с помощью метаданных.Поиск количества пользователей, имеющих права на создание таблиц

Какой запрос я должен писать? (Я не хочу, чтобы это было очень сложно).

ответ

0

Всех пользователей и роль, которые имеют такую ​​привилегию:

select * 
from dba_sys_privs 
where privilege = 'CREATE TABLE' or privilege = 'CREATE ANY TABLE'; 

Кроме того, необходимо вид DBA_ROLE_PRIVS потому, что пользователь может получить привилегии косвенно, используя роль.

+0

Спасибо, это работает! –

+0

Приятно видеть, что кто-то сделал домашнее задание. –

+0

Это не будет работать в большинстве сред. Привилегии, подобные этим, обычно объединяются в роль, а затем роль предоставляется пользователям. –

0

Было бы хорошо видеть, что вы пробовали до сих пор. Позвольте мне сначала попробовать, используя следующее:

dba_users и dba_sys_privs.

Права, которые вы ищите, являются CREATE ANY TABLE.

Пожалуйста, найдите их и придумайте свою попытку, и я буду рад помочь вам дальше.

1
select count(distinct usr) 
from (
    select auth, tp, connect_by_root auth usr, connect_by_root tp tp_usr 
    from (
    select null grantee, username auth, 'user' tp from dba_users 
    union 
    select grantee, granted_role, 'role' from dba_role_privs 
    union 
    select grantee, privilege, 'priv' from dba_sys_privs 
) 
    start with grantee is null 
    connect by grantee = prior auth 
) where tp_usr = 'user' and auth in ('CREATE TABLE', 'CREATE ANY TABLE'); 

Этот запрос также сканирует предоставленные роли рекурсивно. Тем не менее, я все еще не уверен, что он дает всем пользователям, которые могут создать таблицу.

Смежные вопросы