Ролг Хупин | ↑ |
---|
PSD | ↑ |
---|
Есть проблема у заказчика развернут кластер их ХХХ серверов приложений которые работают с одной базой Oracle 11.
Все ходят под одной учеткой.
Нужно как то определять и писать в таблицу IP или имя хоста или что то еще , чтобы определить какой из АПП серверов создавал или апдейтил запись в таблице. На стороне клиента это сделать нельзя. Нужно чтобы сама БД это как то фиксила.
Такое вообще возможно ? |
Имхую: 1. "сама БД пофиксила" - БД - пассивный объект, сама ничего не делает, не возбуждается.
2. SYS_CONTEXT('USERENV','OS_USER'), SYS_CONTEXT('USERENV','IP_ADDRESS'), SYS_CONTEXT('USERENV','HOST') |
В результате получим имя учётки, под которой стартует сервер приложений в своей ОС и адрес и имя хоста, на котором данный сервер приложений работает (т.е. определим сессия какого из серверов "кластера их ХХХ серверов приложений" что-то сделала).
Чтобы определить в БД конечного пользователя приложения, нужно, чтобы эту информацию сервер приложений каким-то образом БД сообщал. Или, например, как вариант, логировать на сервере приложений, что такой-то его клиент открыл такую-то сессию в БД и уже тогда через SYS_CONTEXT('USERENV','SID') можно будет провести соответствие "сессия = конечный пользователь".
Без "помощи" со стороны сервера приложений при заданных вводных ("Все ходят под одной учеткой") в БД определить конечного пользователя не получится никак.