Перерахуйте всіх користувачів, яким призначена певна роль
-- 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' ;
SELECT
привілеїв, доступних через роль, а №6 відсутній.