Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / sys_context / 22 сообщений из 22, страница 1 из 1
23.04.2010, 11:17
    #36594157
PITMOV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
Как установить sys_context в apex'e так, чтобы он не слетал при обновлении страницы?
...
Рейтинг: 0 / 0
23.04.2010, 13:02
    #36594516
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
PITMOV,

по-хорошему - никак. Сессии БД у APEX существуют на протяжении отображения или обработки страницы. Пользовательский не глобальный контекст существует на протяжении сессии БД.

В APEX для подобного стоит использовать переменные страницы, переменные приложения и настройки пользователя.
...
Рейтинг: 0 / 0
23.04.2010, 15:03
    #36594977
PITMOV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
Спасибо, suPPLer
...
Рейтинг: 0 / 0
28.04.2010, 15:41
    #36603288
sys_context
suPPLerPITMOV,

по-хорошему - никак. Сессии БД у APEX существуют на протяжении отображения или обработки страницы. Пользовательский не глобальный контекст существует на протяжении сессии БД.

В APEX для подобного стоит использовать переменные страницы, переменные приложения и настройки пользователя.
а вот и неправда!
идём Shared Components -> Edit Security Attributes
в самом низу находим следующее: "Virtual Private Database (VPD)"
вот туда и пишем процедуру или код, устанавливающий контексты.
сам этим пользуюсь работает отлично.
...
Рейтинг: 0 / 0
28.04.2010, 16:11
    #36603397
Drunvalo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
не удержался...,
Для каких задач это может быть использовано, не просвятите?
...
Рейтинг: 0 / 0
28.04.2010, 16:27
    #36603460
sys_context
Drunvaloне удержался...,
Для каких задач это может быть использовано, не просвятите?
там, где нужен или используется VPD
почитайте, что такое VPD , и Вам всё станет ясно
...
Рейтинг: 0 / 0
30.04.2010, 11:05
    #36606864
PITMOV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
Ооооооотлично. Спасибо, не удержался, sys_context мне очень нужен.
...
Рейтинг: 0 / 0
30.04.2010, 11:35
    #36606946
PITMOV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
Посидел подумал, все-таки SuPPler прав, по нормальному никак. VPD все же это опция EE.
...
Рейтинг: 0 / 0
30.04.2010, 12:56
    #36607263
sys_context
PITMOVПосидел подумал, все-таки SuPPler прав, по нормальному никак. VPD все же это опция EE.
но это не значит, что sys_context использовать нельзя. или я не прав?
...
Рейтинг: 0 / 0
30.04.2010, 16:13
    #36607805
PITMOV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
sys_context использовать можно, здесь вы полностью правы.
...
Рейтинг: 0 / 0
11.05.2010, 00:51
    #36620098
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
не удержался...,

сорри за поздний ответ.

Да, это именно то, что я назвал "по-хорошему - никак". Потому что PL/SQL-блок, который указывается в Application 110->Shared Components->Edit Security Attributes->Virtual Private Database (VPD), выполняется для каждой страницы. IMHO, в итоге ресурсов на постоянное выполнение этого блока тратится больше, чем на обращение к функции V('ITEM_NAME'). Я проводил грубые тесты: одна небольшая таблица (12 МБ, 100К строк), две вьюхи на неё, одна из них в качестве фильтра использует контекст, вторая - V('ITEM_NAME'). Одно приложение с отчётами по этим вьюхам. Для пяти сессий по 1000 обращений в каждой использование вьюхи с V('ITEM_NAME') было более быстрым, чем установка контекста и использование вьюхи с ним - быстрее процентов на 17-18. На большой нагрузке (например, от 100 сессий) не тестировал, нужно разбираться с каким-нибудь бесплатным генератором тестовой нагрузки типа JMeter.

Если куплена фича VPD, и она уже используется в БД, то APEX даёт лёгкий способ использовать эту фичу, устанавливая необходимый контекст. Для остальных случаев я бы постарался избежать использования этого способа: меньше лишнего PL/SQL выполняется на странице - быстрее время отклика. Я знаю, что это банально, но это работает. :)
...
Рейтинг: 0 / 0
01.12.2010, 18:43
    #36989807
англикот
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
suPPLerЕсли куплена фича VPD, и она уже используется в БД, то APEX даёт лёгкий способ использовать эту фичу, устанавливая необходимый контекст. Для остальных случаев я бы постарался избежать использования этого способа: меньше лишнего PL/SQL выполняется на странице - быстрее время отклика. Я знаю, что это банально, но это работает. :)

Насчет APEX и VPD. Правильно ли я понял все.
1. Создаем функцию, которая в зависимости от пользователя, будет возвращать необходимые значения. Например - get_criteria(APP_USER, 'COUNTRY'). Функция возвращает строку 'ru', 'uk', 'us'

2. В APEX в VPD добавляем установку контекста. set_context('context_prc', 'COUNTRY', get_criteria(APP_USER, 'COUNTRY'))

3. Создаем функцию F_COUNTRY_POLICY где возвращаем 1=1 или COUNTRY in (get context)

4. Создаем policy с помощью dbms_rls.add_policy и указываем фунцкию F_COUNTRY_POLICY.

Я все правильно понимаю, или чего то нехватает, а может быть лишнее....
...
Рейтинг: 0 / 0
02.12.2010, 00:59
    #36990286
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
англикот,

Вам стоит почитать ссылки в этом посте: 9517461 .
...
Рейтинг: 0 / 0
02.12.2010, 12:30
    #36990920
англикот
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
suPPLerангликот,

Вам стоит почитать ссылки в этом посте: 9517461 .

перед тем как писать, я их прочитал
...
Рейтинг: 0 / 0
02.12.2010, 14:12
    #36991234
англикот
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
в общем разобрался

только одного не понял, нафига в настройках приложения есть VPD texarea. Как это может быть применимо?
...
Рейтинг: 0 / 0
02.12.2010, 18:45
    #36991997
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
англикотнафига в настройках приложения есть VPD texarea. Как это может быть применимо?

Если у нас уже используется VPD в других проектах, то можно выставлять соответствующие контексты в этом блоке, он будет выполняться при каждом создании страницы.
...
Рейтинг: 0 / 0
02.12.2010, 19:48
    #36992082
англикот
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
suPPLerЕсли у нас уже используется VPD в других проектах, то можно выставлять соответствующие контексты в этом блоке, он будет выполняться при каждом создании страницы.

ок, тоесть потом внутри VPD функции дергается контектс этот.
интересно
...
Рейтинг: 0 / 0
02.12.2010, 21:35
    #36992192
sys_context
suPPLerЕсли куплена фича VPD, и она уже используется в БД, то APEX даёт лёгкий способ использовать эту фичу, устанавливая необходимый контекст. Для остальных случаев я бы постарался избежать использования этого способа: меньше лишнего PL/SQL выполняется на странице - быстрее время отклика. Я знаю, что это банально, но это работает. :)
при количестве около 2000 активных юзеров sys_context не доставляет никаких проблем и вообще не влияет на время отклика. и это не банально - это реальная практика.
...
Рейтинг: 0 / 0
02.12.2010, 22:16
    #36992235
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
не удержался...,

дело не в SYS_CONTEXT (отклик действительно быстрый). Дело в выполнении PL/SQL-кода, указанного в блоке VPD. Он выполняется при каждой обработке и отрисовке страницы. Зачем?

Для заново создаваемой VPD можно:
- создать глобальный пользовательский контекст;
- добавить установку соответствующих значений в этом контексте в виде процесса, выполняющегося один раз - при аутентификации пользователя;
- устанавливать и читать значения, используя :APP_USER||':'||:SESSION в качестве CLIENT_IDENTIFIER.

Для старой, уже использующейся в других системах VPD, заточенной под LOGIN, USER и т.п., переделка под глобальный пользовательский контекст может повлечь слишком большие ресурсы. Поэтому APEX даёт возможность использовать эту VPD без переделок, устанавливая контексты в блоке VPD. И этот блок выполняется каждый раз , когда страница обрабатывается или возвращается.

Ещё раз, кратко: дело не в чтении, дело в лишних выполнениях блока PL/SQL-кода.
...
Рейтинг: 0 / 0
02.12.2010, 22:25
    #36992243
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
Ну и поскольку APEX у нас всё-таки "multitiered environment with accessing the databases through connection pools", то небольшой совет из доки:

http://download.oracle.com/docs/cd/B19306_01/network.102/b14266/apdvpoli.htm#i1008538 About Virtual Private Database, Fine-Grained Access Control, and Application Context

Virtual Private Database (VPD) combines server-enforced fine-grained access control with a secure storage of application context values in the Oracle database server. VPD enables you to build applications that enforce row-level security policies at the object level. Policy execution dynamically appends predicates (WHERE clauses) to any SQL statements that query data you have identified as requiring protection.

The application context feature enables application developers to define, set, and access variable-length application attributes and their values. These attributes can then be used as predicate values for fine-grained access control policies. Two types of application contexts exist:

Local (session-based) application context, stored in the UGA and invoked each time an application user connects to the database

Global application context (non-session-based), stored in the SGA and used for multitiered environment users accessing databases through connection pools.
...
Рейтинг: 0 / 0
03.12.2010, 09:27
    #36992530
sys_context
suPPLerЕщё раз, кратко: дело не в чтении, дело в лишних выполнениях блока PL/SQL-кода.
если Вы уж так радеете за лишние выполнения PL/SQL кода, тогда Вам апекс не подойдёт :)
не мне Вам рассказывать сколько он (апекс) выполняет PL/SQL болоков во время генерации страницы, да ещё и анонимных..
тогда уж Вам нужен ещё один уровень - уровень серверов приложений, потому как ну не должен сервер БД заниматься генерацией визуального контента. представляете, на сколько тогда уменшится количество лишних выполнений блоков PL/SQL-кода? :)
...
Рейтинг: 0 / 0
03.12.2010, 21:14
    #36994578
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sys_context
не удержался...suPPLerЕщё раз, кратко: дело не в чтении, дело в лишних выполнениях блока PL/SQL-кода.
если Вы уж так радеете за лишние выполнения PL/SQL кода

Да, радею. Зачем делать лишнее там, где его можно не делать? Я говорю не о смене инструмента, а об соответствующем с ним обращении. Возможно, у меня и у Вас просто разная философия разработки. :)
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / sys_context / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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