Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Пользователи имеющие привилегии на опр схему / 20 сообщений из 20, страница 1 из 1
17.01.2003, 15:54
    #32092618
MA_D
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
Ваши предложения по определению всех пользователей, имеющие привилегии
хотя бы на одну таблицу схемы явно и через роли.
Сам сделал, но хотел бы посмотреть варианты
...
Рейтинг: 0 / 0
17.01.2003, 16:05
    #32092628
Alexandr Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
????
Естественно через роли. Пользователей много, они меняются, а роли конкретны. Дал кому-то две роли, отобрал три, ... На то и роли.
...
Рейтинг: 0 / 0
17.01.2003, 16:08
    #32092632
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
Скорее всего это рекурсия, поскольку роль может быть дана другой роли:

По каждому пользователю:
1. Проверить для пользователя/роли, нет ли grant select any table.
2. Проверить, нет ли grant select on schema.table.
3. Для каждой роли, выданной текущему пользователю/роли перейти на п.1.

Если ответ надо дать в виде да/нет, но можно обойтись одной функцией.
...
Рейтинг: 0 / 0
17.01.2003, 16:19
    #32092642
MA_D
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
это все ясно как день, хотел бы скрипт увидеть
...
Рейтинг: 0 / 0
17.01.2003, 16:43
    #32092665
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
Так а что ту такого?
Код: plaintext
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
create or replace function grantedSelect (
    p_grantee varchar2
  , p_owner varchar2
  , p_table_name varchar2
) return varchar2 as
  v_row varchar2( 64 );
  cursor cr_sys_privs is 
    select privilege 
    from dba_sys_privs 
    where  1 = 1 
      and grantee = p_grantee 
      and privilege = 'SELECT ANY TABLE';
  cursor cr_tab_privs is 
    select privilege 
    from dba_tab_privs 
    where  1 = 1 
      and grantee = p_grantee 
      and owner = p_owner
      and table_name = p_table_name
      and privilege = 'SELECT';       
begin
  open cr_sys_privs; fetch cr_sys_privs into v_row; close cr_sys_privs;
  if v_row is not null then return 'TRUE'; end if;
  open cr_tab_privs; fetch cr_tab_privs into v_row; close cr_tab_privs;
  if v_row is not null then return 'TRUE'; end if;
  for i in (
    select granted_role from dba_role_privs where grantee = p_grantee
  ) loop                 
    if grantedSelect(i.granted_role, p_owner, p_table_name) = 'TRUE' then
      return 'TRUE';
    end if;  
  end loop;
  return 'FALSE';
end;
/

 -- Проверка
 
select grantedSelect(user, 'SCOTT', 'EMP') from dual;

Дальше, я думаю, прозрачно: написать нечто подобное для _всех_ таблиц одного пользователя, и пройтись по всем пользователям в поисках привилегий.
...
Рейтинг: 0 / 0
17.01.2003, 16:48
    #32092667
Alexandr Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
табл. роли - role_tab_privs
роль роли - dba_role_privs
...
Так и говори - а вот одним select-ом?
(а то может покажется, что обратную задачу надо решать)
...
Рейтинг: 0 / 0
17.01.2003, 17:32
    #32092710
MA_D
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
Конечным результатом является список юзеров,
Зачем выбирать из sys_privs там только системные привилегии
и на все одним запросом
Например есть схема 1 , роль 1 на select ан все табл схемы 1

user 1 c ролью 1
user 2 с ролью 1
user 3 прямой grant на схему

Вопрос: кто имеет прив на табл схемы 1
Ответ :
user1
user2
user3
...
Рейтинг: 0 / 0
17.01.2003, 17:54
    #32092727
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
to Denis Popov:
Не слишком ли сложно в твоём последнем примере?

Нет желания копать слишком глубоко, что приходит сразу на ум:

На примере: пользователи имеющие хотя-бы одну привелегию на любую таблицу схемы SYS.
предоставленные непосредственно пользователям:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select
 distinct
grantee
 from
 dba_tab_privs
where
 owner = 'SYS' and
 grantee in (select username from dba_users)


предоставленные ролям:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select
 distinct
 role
 from
  role_tab_privs
where
 owner = 'SYS'


Далее необходимо просто определить все роли, которые имеют вышеперечисленные роли. А потом по общему списку ролей определить какие пользователи имеют эти роли и сделать UNION с первым запросом.

Вобщем что-то типа этого.
...
Рейтинг: 0 / 0
17.01.2003, 18:46
    #32092786
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
Откровенно говоря, трудно уже соображаю, но как быть со случаем наподобе:

grant select on table1 to role1;
grant role1 to role2;
grant role2 to role3;
...
grant roleN to user1;

тут имхо без рекурсии никуда.
...
Рейтинг: 0 / 0
17.01.2003, 19:46
    #32092811
Alexandr Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
... без рекурсии никуда ...

а что сделать красиво на деревьях

create table eee.role_privs as select * from dba_role_privs;
SELECT LEVEL, granted_role
FROM celt_.role_privs
START WITH grantee = 'DBA'
CONNECT BY PRIOR granted_role = grantee
order by LEVEL, grantee
а собственника (сама схема или объект схемы) из dba_tab_privs в корень дерева
...
Рейтинг: 0 / 0
17.01.2003, 19:54
    #32092813
Alexandr Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
блин, какой-то сор прилепился ...
то есть
create table role_privs as select * from dba_role_privs;
SELECT LEVEL, granted_role
FROM celt_.role_privs
START WITH grantee in (select OWNER from dba_tab_privs where table_name='DEF$_LOB')
CONNECT BY PRIOR granted_role = grantee
order by LEVEL, grantee
...
Рейтинг: 0 / 0
17.01.2003, 20:02
    #32092815
ShgGena
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
A zachem sortirovat - dereviasku razrushaesh.
...
Рейтинг: 0 / 0
17.01.2003, 20:06
    #32092816
Alexandr Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
A zachem sortirovat - dereviasku razrushaesh

так чтобы в поленья потом уложить, но хош так

SELECT distinct granted_role
FROM role_privs
START WITH grantee in (select OWNER from dba_tab_privs where table_name='DEF$_LOB')
CONNECT BY PRIOR granted_role = grantee
...
Рейтинг: 0 / 0
17.01.2003, 21:04
    #32092834
Alexandr Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
Задача: выбрать всех юзеров, имеющих грант UPDATE на
таблицу DEF$_TEMP$LOB.

create table role_privs as select * from dba_role_privs;
select distinct owner from dba_tab_privs where
grantee in (SELECT distinct granted_role
FROM role_privs
START WITH grantee in (select distinct OWNER from dba_tab_privs
where table_name='DEF$_TEMP$LOB' and privilege='UPDATE')
CONNECT BY PRIOR granted_role = grantee)

Есть ли ещё проще и короче?
...
Рейтинг: 0 / 0
20.01.2003, 14:59
    #32093448
Alexandr Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
тысячу извинений за предыд. недоделанности (была пятница, конец дня ...)

Выдать все user-ов, имеющих хоть какие-то права на какие-то объекты, например в схеме SYSTEM

(
select username from dba_users
intersect
select grantee from dba_sys_privs where privilege
in ('SELECT ANY TABLE', 'EXECUTE ANY PROCEDURE', 'UPDATE ANY TABLE'
-- и прочее и лучше NOT IN
)
)
union
(
select username from dba_users
intersect
select grantee from dba_role_privs
where
granted_role in
(
SELECT distinct granted_role
FROM role_privs
START WITH grantee='SYSTEM'
CONNECT BY PRIOR granted_role = grantee
))
...
Рейтинг: 0 / 0
20.01.2003, 15:56
    #32093489
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
Еще вспомни про 07_DICTIONARY_ACCESSIBILITY:) Вот из-за таких вот вещей, когда ответ на вопрос надо собирать из нескольких источников, мне и нравится больше процедурный подход, иначе один универсальный запрос может стать несколько сложноватым.
...
Рейтинг: 0 / 0
20.01.2003, 16:00
    #32093492
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
to Alexandr Plus: А как насчёт обьектных привилегий? У тебя только системные и для ролей. А каже обьектные привелегие выданные пользователям
...
Рейтинг: 0 / 0
20.01.2003, 16:20
    #32093504
Alexandr Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
(
select username from dba_users
intersect
select grantee from dba_sys_privs where privilege
in ('SELECT ANY TABLE', 'EXECUTE ANY PROCEDURE', 'UPDATE ANY TABLE'
-- и прочее и лучше NOT IN
)
)
union
(
select username from dba_users
intersect
select grantee from dba_role_privs
where
granted_role in
(
SELECT distinct granted_role
FROM role_privs
START WITH grantee='SYSTEM'
CONNECT BY PRIOR granted_role = grantee
))
union
(
select username from dba_users
intersect
select grantee from dba_tab_privs
where owner='SYSTEM'
)
union
(
select username from dba_users
intersect
... from dba_...

Вообще согласен - это не выход!
Но у MA_D в условии среди объктов только таблицы.
...
Рейтинг: 0 / 0
20.01.2003, 16:39
    #32093526
MA_D
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
Да мне собственно нужны тока таблицы, спасибо за уделенной время
...
Рейтинг: 0 / 0
20.01.2003, 16:47
    #32093538
Alexandr Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пользователи имеющие привилегии на опр схему
спасибо за уделенное время

Спасибо за тренировку.
Полагаю, что те, кто отвечает, что-то параллельно
в своём мудрят над ролями.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Пользователи имеющие привилегии на опр схему / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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