Захват сведений о конечном пользователе в базе данных Oracle через пул соединений в Websphere

В настоящее время я работаю над частью аудита, где мне нужно знать имя конечного пользователя в базе данных Oracle в фоновом режиме.

Приложение использует аутентификацию Oracle для предоставления доступа и обработки разрешений на функции в приложении. Он также (правильно) обрабатывает доступ к базовым данным, обеспечивая сохранение учетных данных конечного пользователя на уровне данных.

Когда я пытаюсь проверить приложение (используя аудит Oracle), я получаю только идентификатор пользователя пула соединений и имя сервера Websphere.

Я искал и нашел предложения по использованию повторной аутентификации (которая не регистрирует правильный идентификатор пользователя до тех пор, пока пул соединений не будет полностью использован), WAS.clientinfo (который обычный ol 'не передает учетные данные конечного пользователя в БД) и иметь нашел ссылку на Guardium (который делает свою работу, но ужасно дорог).

Как я могу передать информацию о конечном пользователе на уровень данных? Я не возражаю, если это сводится к изменению конфигурации или продукту стороннего производителя; пока это работает, мы можем оценить это.


person Hooloovoo    schedule 26.09.2012    source источник
comment
Под Oracle Authentication вы имеете в виду OID? Мне это кажется проблемой приложения, так как у нас есть пара приложений, которые ведут себя одинаково, и у нас есть OID для аутентификации, и мы не смогли получить идентификатор пользователя для аудита. Приложения построены на JavaEE (Swing) и работают на экземплярах OC4J. Несмотря на то, что OID имеет собственную базу данных для аутентификации, это не обязательно означает, что идентификатор пользователя будет сохраняться на уровне данных приложений, и я не уверен, есть ли вообще способ добиться этого.   -  person AnBisw    schedule 26.09.2012
comment
Если вы можете настроить всех конечных пользователей как пользователей базы данных, прокси-аутентификация Oracle звучит как то, что вы могли бы использовать. Ознакомьтесь с руководством для получения подробной информации (или найдите аутентификацию прокси-сервера oracle)   -  person a_horse_with_no_name    schedule 27.09.2012
comment
Управление пользователями осуществляется в базе данных Oracle. Я сейчас смотрю на прокси-аутентификацию Oracle. Опубликую свои выводы позже. Анна, приложение аутентифицирует пользователя, используя обычную аутентификацию Oracle, а не OID.   -  person Hooloovoo    schedule 27.09.2012
comment
Единственное, что мне удалось найти, это Guardium (www -01.ibm.com/software/data/guardium) Если вы перейдете по ссылке (или выполните поиск Guardium в Google), вы сможете узнать цены.   -  person Hooloovoo    schedule 28.09.2012


Ответы (2)


Вы читали это?

http://www.ibm.com/developerworks/websphere/techjournal/0506_barghouthi/0506_barghouthi.html

Это старый, но я думаю, что большая часть содержимого актуальна и сегодня.

ХТН

person Manglu    schedule 27.09.2012
comment
Спасибо, я смотрел на это раньше, но похоже, что пул соединений должен быть полностью использован до повторной аутентификации соединения. Как инструмент аудита это не идеальное решение, но мы на верном пути. - person Hooloovoo; 27.09.2012

Повторная аутентификация действительно не происходит при первом подключении. Однако при реализации вашего DataStoreHelper, который расширяет Oracle11gDataStoreHelper, вам необходимо реализовать два метода:

  1. doConnectionSetupPerTransaction, который вызывается при повторной аутентификации.
  2. doConnectionSetup, который вызывается при первом подключении.

В обоих случаях вы можете вызвать WSSubject.getCallerPrincipal(), чтобы получить текущего пользователя приложения. Затем вы можете использовать conn.unwrap(OracleConnection.class).setEndToEndMetrics() API.

При использовании базы данных Oracle 12c и драйвера JDBC вы можете использовать Connection.setClientInfo вместо OracleConnection.setEndToEndMetrics.

person Ehud Eshet    schedule 06.06.2016