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');
Этот запрос также сканирует предоставленные роли рекурсивно. Тем не менее, я все еще не уверен, что он дает всем пользователям, которые могут создать таблицу.
Спасибо, это работает! –
Приятно видеть, что кто-то сделал домашнее задание. –
Это не будет работать в большинстве сред. Привилегии, подобные этим, обычно объединяются в роль, а затем роль предоставляется пользователям. –