|
|
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
Ваши предложения по определению всех пользователей, имеющие привилегии хотя бы на одну таблицу схемы явно и через роли. Сам сделал, но хотел бы посмотреть варианты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2003, 15:54 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
???? Естественно через роли. Пользователей много, они меняются, а роли конкретны. Дал кому-то две роли, отобрал три, ... На то и роли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2003, 16:05 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
Скорее всего это рекурсия, поскольку роль может быть дана другой роли: По каждому пользователю: 1. Проверить для пользователя/роли, нет ли grant select any table. 2. Проверить, нет ли grant select on schema.table. 3. Для каждой роли, выданной текущему пользователю/роли перейти на п.1. Если ответ надо дать в виде да/нет, но можно обойтись одной функцией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2003, 16:08 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
это все ясно как день, хотел бы скрипт увидеть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2003, 16:19 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
Так а что ту такого? Код: 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. Дальше, я думаю, прозрачно: написать нечто подобное для _всех_ таблиц одного пользователя, и пройтись по всем пользователям в поисках привилегий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2003, 16:43 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
табл. роли - role_tab_privs роль роли - dba_role_privs ... Так и говори - а вот одним select-ом? (а то может покажется, что обратную задачу надо решать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2003, 16:48 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
Конечным результатом является список юзеров, Зачем выбирать из sys_privs там только системные привилегии и на все одним запросом Например есть схема 1 , роль 1 на select ан все табл схемы 1 user 1 c ролью 1 user 2 с ролью 1 user 3 прямой grant на схему Вопрос: кто имеет прив на табл схемы 1 Ответ : user1 user2 user3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2003, 17:32 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
to Denis Popov: Не слишком ли сложно в твоём последнем примере? Нет желания копать слишком глубоко, что приходит сразу на ум: На примере: пользователи имеющие хотя-бы одну привелегию на любую таблицу схемы SYS. предоставленные непосредственно пользователям: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. предоставленные ролям: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Далее необходимо просто определить все роли, которые имеют вышеперечисленные роли. А потом по общему списку ролей определить какие пользователи имеют эти роли и сделать UNION с первым запросом. Вобщем что-то типа этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2003, 17:54 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
Откровенно говоря, трудно уже соображаю, но как быть со случаем наподобе: grant select on table1 to role1; grant role1 to role2; grant role2 to role3; ... grant roleN to user1; тут имхо без рекурсии никуда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2003, 18:46 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
... без рекурсии никуда ... а что сделать красиво на деревьях 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 в корень дерева ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2003, 19:46 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
блин, какой-то сор прилепился ... то есть 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2003, 19:54 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
A zachem sortirovat - dereviasku razrushaesh. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2003, 20:02 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2003, 20:06 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
Задача: выбрать всех юзеров, имеющих грант 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) Есть ли ещё проще и короче? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2003, 21:04 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
тысячу извинений за предыд. недоделанности (была пятница, конец дня ...) Выдать все 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 )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2003, 14:59 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
Еще вспомни про 07_DICTIONARY_ACCESSIBILITY:) Вот из-за таких вот вещей, когда ответ на вопрос надо собирать из нескольких источников, мне и нравится больше процедурный подход, иначе один универсальный запрос может стать несколько сложноватым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2003, 15:56 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
to Alexandr Plus: А как насчёт обьектных привилегий? У тебя только системные и для ролей. А каже обьектные привелегие выданные пользователям ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2003, 16:00 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
( 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 в условии среди объктов только таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2003, 16:20 |
|
||
|
Пользователи имеющие привилегии на опр схему
|
|||
|---|---|---|---|
|
#18+
Да мне собственно нужны тока таблицы, спасибо за уделенной время ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2003, 16:39 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32093538&tid=1992117]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
143ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 434ms |

| 0 / 0 |
