powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / privs vs roles
2 сообщений из 2, страница 1 из 1
privs vs roles
    #39553963
Фотография marguren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мои дорогие, опять я к вам с ерундой, но сама никак что-то не допетрю в тех временных рамках, что мне отведены (типа, было часов десять на решение задачи, но не шмогла, надо результат показать было вчера, а у меня только бе да ме... )

короче, задача по аудиту, надо в одном флаконе (ну то есть репорте) , показать юзеров, у которых есть две привилегии: “CREATE DATABASE LINK” or “RESTRICTED SESSION”. эти две привилегии могут быть либо как direct grant или через роль.. известно, что есть роли, которые могут обе эти привилегии дать: DBA role, IMP_FULL_DATABASE, RECOVERY_CATALOG_OWNER.. но есть еще и custom roles, созданные юзерами, которые тоже могут эти привилегии грантовать...

у меня затык в написании такого запроса, чтобы он выдал все вместе: и саму привилегию, и чтобы написал откуда она пришла: через прямой грант (grant RESTRICTED SESSION TO spongebob;) или через роль, и если да через роль, то через какую именно? пыталась вот так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 select dsp.grantee, dsp.privilege, u.account_status from  DBA_SYS_PRIVS dsp, dba_users u  where dsp.PRIVILEGE IN ( 'RESTRICTED SESSION','CREATE DATABASE LINK') 		
   and dsp.grantee = u.username 		
     and dsp.grantee not in ('SYS')		
		

     SELECT drp.grantee , drp.granted_role, drp.admin_option, drp.default_role,  u.account_status
FROM dba_role_privs drp, dba_users u
WHERE drp.grantee IN (SELECT username FROM dba_users)
and granted_role in ('DBA', 'IMP_FULL_DATABASE')
AND       grantee NOT LIKE '%SYS%'
AND       grantee NOT IN ('DBSNMP','OUTLN') 
and       drp.grantee=u.username
ORDER BY grantee;



но как их в одно удобоваримое соединить - у меня мозгов не хватает.. сколько не пыталась join'ы делать - он выдает роли даже в тех случаях, когда прив напрямую грантована.. или наоборот, не показывает юзеров, которым роль присвоена, вот глядите:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
create role masha_test_role1;
 role MASHA_TEST_ROLE1 created.
  grant RESTRICTED SESSION to masha_test_role1;
grant succeeded.
  grant CREATE DATABASE LINK to masha_test_role1;
grant succeeded.

 create user spongebob identified by patric;
user SPONGEBOB created.
 grant  masha_test_role1 to spongebob;
grant succeeded.

   select dsp.grantee, dsp.privilege, u.account_status from  DBA_SYS_PRIVS dsp, dba_users u  where dsp.PRIVILEGE IN ( 'RESTRICTED SESSION','CREATE DATABASE LINK') 
   and dsp.grantee = u.username 
     and dsp.grantee not in ('SYS')

BANINST1	        RESTRICTED SESSION	OPEN
DBEU_OWNER	CREATE DATABASE LINK	OPEN
DBEU_OWNER	RESTRICTED SESSION	OPEN
MODSMGR	        RESTRICTED SESSION	OPEN
SCTCVT	        CREATE DATABASE LINK	OPEN
SCTCVT	        RESTRICTED SESSION	OPEN
STREAMSAD      RESTRICTED SESSION	OPEN
UPGRADE1	RESTRICTED SESSION	OPEN

  select username from dba_users where username like ('SPONGE%')

SPONGEBOB



почему не показывает спонча, несмотря на то, что ему роль с этими привами присвоена ?

я SQL не писала уже лет десять, пожалуйста, не бейте тапками, а подскажите, как сделать ? я даже уверена, что две отдельные query тоже подойдут, но не пойму, как отловить тех юзеров, которым custom roles, которые тоже могут эти привы присвоить.... .

пожалуйста, подскажите ?
...
Рейтинг: 0 / 0
privs vs roles
    #39554089
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marguren,
margurenпочему не показывает спонча, несмотря на то, что ему роль с этими привами присвоена
Потому что привилегия выданная через роль принадлежит роли.


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select username, priv, s 
from 
(
select  u.username, sp.privilege priv, p.granted_role s
from dba_users u
    inner join dba_role_privs p on u.username = p.grantee 
    inner join dba_sys_privs sp on p.granted_role = sp.grantee   
where u.username = user
union all
select  u.username, sp.privilege priv, ' DIRECT PRIV' s
from dba_users u
    inner join dba_sys_privs sp on u.username = sp.grantee   
where u.username = user
)
order by username, s, priv;
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / privs vs roles
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]