|
|
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
Подскажите: 1. Когда являются активными роли, назначенные пользователю ? 2. Как проверяются привилегии пользователя при компиляции и выполнении им пакета с AUTHID CURRENT_USER ? 3. Что лучше использовать для динамической активации ролей: SET ROLE или DBMS_SESSION.SET_ROLE ? ( а то я что-то совсем в этом запутался! :( ) Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 12:29:03 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
Oracle9i. Руководство разработчика приложений. Основы Создание защищенных ролей приложения Доступ к базе данных основан на привилегиях, которые часто группируются в роли. Затем роли, содержащие сгруппированные привилегии, предоставляются пользователям приложения. В предыдущих версиях в приложения нужно было встраивать пароль, чтобы гарантировать, что пользователи могут включить предоставленные роли только в приложении. Роли, защищенные встроенными паролями внутри приложений, называются ролями приложения . В Oracle9i разработчикам приложений больше не нужно встраивать пароли в приложения для защиты ролей. Они могут создать роль приложения и указать, какой пакет PL/SQL авторизован включать эту роль. Такие роли приложения, включаемые пакетами PL/SQL, называются защищенными ролями приложения. В пакете, реализующем защищенную роль приложения, должны выполняться следующие условия. ■ Приложение должно производить необходимую проверку. Например, приложение должно проверить то, что пользователь работает в определенном отделе, что сеанс пользователя был создан модулем прокси с определенного IP-адреса, а также то, что пользователь аутентифицирован при помощи сертификата Х.509. Для выполнения этой проверки приложение может использовать информацию о сеансе, которую можно получить с помощью функции SYS_CONTEXT ('среда_пользователя', <атрибут_сеанса>). Эта информация указывает способ, каким способом был аутентифицирован пользователь, IP-адрес клиента, а также то, подключается ли клиент через модуль прокси. ■ Приложение должно выполнить оператор SET_ROLE при помощи динамического SQL (DBMS_SESSION.SET ROLE). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 14:09:22 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext -- запрос выводит активные (DEFAULT) роли для -- пользователя ИМЯ_ПОЛЬЗОВАТЕЛЯ select * from dba_role_privs t where t.default_role = 'YES' and (grantee = 'ИМЯ_ПОЛЬЗОВАТЕЛЯ' OR grantee = 'PUBLIC') -- сделать активными роли для пользователя -- Все доступные ему роли alter user ИМЯ_ПОЛЬЗОВАТЕЛЯ default role ALL; -- Выборочно alter user ИМЯ_ПОЛЬЗОВАТЕЛЯ default role Роль1, Роль2; -- Отменить все активные роли alter user ИМЯ_ПОЛЬЗОВАТЕЛЯ default role NONE; Код: plaintext При компиляции НЕ проверяются права на объекты, используемые в пакете. При выполнении пользователь ДОЛЖЕН иметь все эти права. Т.е. если в пакете есть что-то типа select ID into ID_ from T1; то в схеме пользователя должен быть объект (таблица, вьюха, синоним) с таким именем и у него должно быть право на SELECT (если это чужой объект) Код: plaintext то см. ответ Александра Соколова. Лучше всего, чтобы у пользователя вообще не было активных ролей, а они активировались при входе в приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 17:33:16 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
Небольшая поправка к п.2 Объект может быть также в схеме PUBLIC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 17:36:06 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
Guest1Небольшая поправка к п.2 Объект может быть также в схеме PUBLIC. PUBLIC это роль по умолчанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 17:50:18 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Получается, что все-таки на этапе компиляции проверяется доступ к обращаемым объектам! Как быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 18:49:41 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
Guest1 1. Когда являются активными роли, назначенные пользователю При компиляции НЕ проверяются права на объекты, используемые в пакете. При выполнении пользователь ДОЛЖЕН иметь все эти права. Если у создателя пакета нет достаточных прав на "чужой" объект, то тело пакета скомпилируется с ошибкой (PLS-00904) ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 18:50:20 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
Лично мне пришлось в данной ситуации использовать динамический SQL, вот тогда действительно разбор происходит в момент выполнения !!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 18:55:03 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
Ладно, поставим вопрос подругому: С привилениями какого пользователя компилируется пакет с AUTHID CURRENT_USER? Почему под ВСЕМОГУЩИМ SYS'ом выпадпает ошибка компиляции: Код: plaintext 1. 2. ??????? %-0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 10:55:39 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
AciD_v Код: plaintext 1. 2. 3. 4. С привилениями какого пользователя компилируется пакет с AUTHID CURRENT_USER?RTFM How External References Are Resolved in Invoker-Rights Subprograms (FAQ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 11:48:37 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
Кто-то может привести реальный пример, когда имеет смысл использовать set role? Именно SET ROLE, а не DBMS_SESSION.SET_ROLE. Во втором случае какой-то смысл есть поскольку при включении через процедуру могут выполняться дополнительные проверки сеанса. Но какой смысл пользователю самому себе отключать/ключать роли, которые ему уже грантованы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2016, 19:43:58 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
Ролевик, Например, для управления из приложения полномочиями по вводу пароля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2016, 20:35:38 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
мах_енабляд_ролез, Что-то не догоняю, можно конкретнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2016, 20:47:07 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
РолевикИменно SET ROLE, а не DBMS_SESSION.SET_ROLE.Чудак, это одно и то же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2016, 07:15:58 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
ElicРолевикИменно SET ROLE, а не DBMS_SESSION.SET_ROLE.Чудак, это одно и то же.Согласен, одно вызывает другое. Всё равно возможность самому себе отключать/ключать роли кажется абсурдной. Если соединение установлено, то пользователь может активировать все роли. Зачем часть держать неактивными - чтоб не сделать глупостей? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2016, 13:30:54 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
РолевикВсё равно возможность самому себе отключать/ключать роли кажется абсурдной. Если соединение установлено, то пользователь может активировать все роли. Зачем часть держать неактивными - чтоб не сделать глупостей? )) Ну и как пользователь может активировать все роли не используя SET ROLE? Если ты имеешь ввиду ALTER USER DEFAULT ROLE ALL, то можешь напороться на ORA-28031: maximum of 148 enabled roles exceeded. Кроме того, в 12C default password protected roles ужe не активируются при логине. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2016, 15:49:02 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
SYРолевикВсё равно возможность самому себе отключать/ключать роли кажется абсурдной. Если соединение установлено, то пользователь может активировать все роли. Зачем часть держать неактивными - чтоб не сделать глупостей? )) Ну и как пользователь может активировать все роли не используя SET ROLE? Если ты имеешь ввиду ALTER USER DEFAULT ROLE ALL, то можешь напороться на ORA-28031: maximum of 148 enabled roles exceeded. Кроме того, в 12C default password protected roles ужe не активируются при логине. SY.Я имею в виду именно включение с помощью set role. Если провести параллель с реальным миром: есть пять комнат и некто имеет три ключа. Но остальные два ключа при надобности он может запросить и тогда получит доступ ко всем комнатам. Ну так какой смысл самому себе давать и забирать возможности? При этом некто может активировать себе недостающие два ключа только если они были грантованы ему ранее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2016, 18:10:46 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
Еще раз для тех кто в танке. У юзера может быть сколько угодно ролей по умолчанию. У сессии только 148 активных ролей. Код: 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. Так что если понадобится рoль r149 и/или r150, то без SET ROLE не обойтись. А начиная с 12C: Код: 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. Так-что начиная с 12C с защищенными ролями без SET ROLE вообще не обойтись. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2016, 18:31:07 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
SYЕще раз для тех кто в танке. У юзера может быть сколько угодно ролей по умолчанию. У сессии только 148 активных ролей.Ок, это понятно. Но я просил реальный пример а не какие-то граничные случаи. РолевикКто-то может привести реальный пример, когда имеет смысл использовать set role? SYА начиная с 12CВот это разумно и вопросов не вызывает. Под одним пользователем могут ходить разные группы людей, привилегии которых определяются знанием дополнительных паролей. Но set role в Орале уже более 10 лет, может объясните применение для более старых версий (кроме 148 ролей)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2016, 22:54:48 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
РолевикНо остальные два ключа при надобности он может запросить и тогда получит доступ ко всем комнатам.Ключник попросит дыхнуть в алкотестер и не даст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2016, 23:03:38 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
SYТак-что начиная с 12C с защищенными ролями без SET ROLE вообще не обойтись.SY.С 11 http://docs.oracle.com/cd/E11882_01/network.112/e36292/authorization.htm#i14551 If the role is password authenticated or a secure application role, then you cannot grant it indirectly to the user, nor can you make it a default role. You only can grant this type of role directly to the user. Typically, you enable password authenticated or secure application roles by using the SET ROLE statement. РолевикSYЕще раз для тех кто в танке. У юзера может быть сколько угодно ролей по умолчанию. У сессии только 148 активных ролей.Ок, это понятно. Но я просил реальный пример а не какие-то граничные случаи. РолевикКто-то может привести реальный пример, когда имеет смысл использовать set role? Код: plsql 1. 2. 3. 4. 5. Это БД одного приложения Одновременно их все не включишь РолевикПод одним пользователем могут ходить разные группы людей, привилегии которых определяются знанием дополнительных паролей.Зачем под одним, каждый под собой. Но роль общая. Возможно под паролем И, как правило вводит его (и включает нужную роль) не юзер, а приложение Скажем, когда юзер работает как администратор, то при запуске приложения "Администратор" включается (возможно, предоставляя пароль) роль XXX_ADMIN (и проверяется, что не включена XXX_USER). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2016, 01:53:53 |
|
||
|
Активность роли??? (SET ROLE)
|
|||
|---|---|---|---|
|
#18+
Добавлю к тому что сказал Вячеслав - кстати, спасибо Вячеславу за уточнение версии с защищенными ролями. В большинстве приложений используются пулы подсоединий где одна и та же сессия бд используется различными сессиями приложения. Можно (и и IMHO нужно) использовать разные пулы для, скажем, администратора и рядового пользователя но часто вариаций рядового пользователя может быть достаточно много и тогда, по возвращении подсоединия в пул можно делать SET ROLE NONE а сессия приложения при запросе подсоединия из пула выполнит SET ROLE XXX,YYY,... SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2016, 15:32:37 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=33182648&tid=1887478]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 390ms |

| 0 / 0 |
