|
DBMS_RLS - назначение параметров namespace и attribute у процедур пакета
|
|||
---|---|---|---|
#18+
Пытаюсь разобраться, зачем нужны и как использовать эти параметры в, например, Код: plsql 1. 2. 3.
Ни по слишком округлой справке, ни по скудному описанию в тексте пакета никак не пойму, что туда передавать? Просмотрел множество всяких туториалов, так они вообще ловко обходят именно эти параметры, ни разу о них не вспоминая и уж тем более не объясняя. Подскажите сабж, кто пользовался? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 02:15 |
|
DBMS_RLS - назначение параметров namespace и attribute у процедур пакета
|
|||
---|---|---|---|
#18+
Правильный Вася, Я не пользовался, но я заметил что эти параметры задаются только в add_policy_context и drop_policy_context. Security context описывается здесь довольно подробно. https://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm#DBSEG011 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 03:18 |
|
DBMS_RLS - назначение параметров namespace и attribute у процедур пакета
|
|||
---|---|---|---|
#18+
НеофитSQL, Что такое контекст, я знаю. Меня интересуют конкретно параметры для создания политик. При попытке что-то передать в них банально ругаетсяORA-28104: input value for namespace is not valid Пробовал и просто имена контекстов, и заранее добавленные через add_policy_context() контексты. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 03:35 |
|
DBMS_RLS - назначение параметров namespace и attribute у процедур пакета
|
|||
---|---|---|---|
#18+
Правильный Вася, Если ошибка происходит при вызове add_policy, у которой нет этих параметров, контекст/атрибут, то возможно вы столкнулись с ситуацией описанной здесь. https://blog.tuningsql.com/ora-28104-input-value-for-statement_types-is-not-valid/ А если нет, может кто-то опытный скоро откликнется. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 03:57 |
|
DBMS_RLS - назначение параметров namespace и attribute у процедур пакета
|
|||
---|---|---|---|
#18+
НеофитSQLпроисходит при вызове add_policy, у которой нет этих параметров, контекст/атрибут У неё ЕСТЬ эти параметры, описаны в документации и в декларации пакета. Вот только описание настолько скудное, что ничего не проясняет. Или я настолько туп, что не понимаю его. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 04:15 |
|
DBMS_RLS - назначение параметров namespace и attribute у процедур пакета
|
|||
---|---|---|---|
#18+
Передавать туда контекст и его переменную Как минимум, это запретит доступ, если эта переменная контекста не установлена Насколько я понял -- основное предназначение оптимизировать вызов функции возвращения предиката для *CONTEXT_SENSITIVE политики, т.е. вызывать только в случае изменения значения конкретного атрибута. До 12.2 (?) этого не было и, насколько понимаю, предикат пересчитывался при любом изменении любого контекста (?) Код: 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.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Ну и посмотреть текст ошибок 42800, 42801 PS. Что-то у меня в 18.12 перестал работать event 10730, там можно было посмотреть применение RLS. В 11.2 работало :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 06:44 |
|
DBMS_RLS - назначение параметров namespace и attribute у процедур пакета
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров, Спасибо. Оказалось, я при создании контекста его привязывал не к тому пакету. Но теперь другая непонятка. Я считал, что add_policy_context() просто дополнительно расширяет список контекстов для уже созданной с контекстом политики. Однако, судя по Код: plsql 1. 2.
это не так. В первую вьюху попадают те, что идут от add_policy_context(), а во вторую те, что идут от add_policy(). И вот тут ступор. А что тогда делает add_policy_context() и как потом используются эти контексты? Они вообще как-то соотносятся между собой? По описанию опять же не пойму. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 23:02 |
|
DBMS_RLS - назначение параметров namespace и attribute у процедур пакета
|
|||
---|---|---|---|
#18+
Я так понимаю -- add_policy_context используется для группы политик -- т.е. управляется приложением, оно выбирает , какую именно группу политик применять через значение данного аттрибута конкретного контекста Т.е. в зависимости от изменения этого аттрибута выбирается та или иная группа политик ну и, соответственно, скорее всего надо обновить предикаты Дальше решение об обновлении предикатов применяется на основании контекстных атрибутов, назначенных данной [*CONTEXT*] политике (если не назначено, обновляется действительно при любом изменении любого контекста " If there is a change in any attribute of any application context during the user session, then by default the database re-executes the policy function to ensure that it captures all changes to the predicate since the initial parsing. This results in unnecessary re-executions of the policy function if none of the associated attributes have changed. You can restrict the evaluation to a specific application context by including both the namespace and attribute parameters.") Тут еще надо понимать виды политик: -- DYNAMIC -- всегда вызывается функция вычисления предиката -- соответственно постоянные, накладные расходы -- *STATIC -- функция вычисления предиката вызывается один раз, предикат один и тот же, но за счет использования [контекстных] переменных могут быть разные результаты -- *CONTEXT_SENSITIVE -- функция вычисления предиката вызывается каждый раз при смене ассоциированного с ней аттрибута/ов или любого значения любого контекста. Надо четко понять, что это для случаев, когда меняется именно строка предиката в зависимости от значения контекста. Т.е. для предиката типа "ID=SYS_CONTEXT('RLS_CTX', 'ID')" использовать такой тип не надо, для этого существует *STATIC. И, тут уже функция должна быть чистой, т.е. переменные допускаются только контекстные, PL/SQL-ные запрещены PS. И да, конечно, все возможности я не тестировал. Но, ведь можно обратиться к первоисточнику , на который ссылка, кстати, дана из описания самого пакета ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 09:52 |
|
DBMS_RLS - назначение параметров namespace и attribute у процедур пакета
|
|||
---|---|---|---|
#18+
И, для добавлении/удалении ассоциации политики с атрибутом контекста, т.е. когда значение предиката меняется на основании, в том числе, и этой переменной контекста, для данной политики надо использовать DBMS_RLS.ALTER_POLICY Соответственно, для ассоциации изменения выбора группы политик с конкретной контекстной переменной надо юзать DBMS_RLS.ALTER_GROUPED_POLICY ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 10:06 |
|
|
start [/forum/topic.php?fid=52&fpage=31&tid=1880682]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 127ms |
0 / 0 |