Вы бы реально хотели использовать безопасный прикладной контекст , который в основном является контекстом, управляемым пользователем, в отличие от контекста USERENV
, управляемого системой.Когда код приложения получает соединение из пула, он вызывает хранимую процедуру, которая устанавливает имя пользователя приложения в новом контексте приложения.Тогда ваши триггеры будут ссылаться на новый контекст, а не на USERENV
.Ваше приложение должно обеспечивать правильную настройку контекста при каждом получении соединения из пула - если приложению не удастся правильно установить контекст, ваши триггеры получат неверную информацию.
Если вы не хотите создавать свой собственный контекст, вы можете использовать CLIENT_IDENTIFIER
in USERENV
, который вы можете установить через dbms_session
всякий раз, когда вы получаете соединение из пула.Функционально это в основном идентично созданию собственного контекста.Хорошая вещь в создании собственного контекста заключается в том, что вы можете легко добавлять атрибуты в будущем по мере необходимости (например, добавление IP-адреса клиентского браузера или атрибута уровня, если у вас есть золотые, серебряные и бронзовые клиенты).).
Существуют альтернативные способы решения проблемы, такие как аутентификация прокси .В целом, однако, это не будет работать также с пулами соединений, особенно когда у вас очень большое количество пользователей.