Как получить IP клиента ?

PSD
Дата: 18.02.2022 16:20:49
Есть проблема у заказчика развернут кластер их ХХХ серверов приложений которые работают с одной базой Oracle 11.

Все ходят под одной учеткой.

Нужно как то определять и писать в таблицу IP или имя хоста или что то еще , чтобы определить какой из АПП серверов создавал или апдейтил запись в таблице.
На стороне клиента это сделать нельзя. Нужно чтобы сама БД это как то фиксила.

Такое вообще возможно ?
Asmodeus
Дата: 18.02.2022 16:26:50
PSD
Есть проблема у заказчика развернут кластер их ХХХ серверов приложений которые работают с одной базой Oracle 11.

Все ходят под одной учеткой.

Нужно как то определять и писать в таблицу IP или имя хоста или что то еще , чтобы определить какой из АПП серверов создавал или апдейтил запись в таблице.
На стороне клиента это сделать нельзя. Нужно чтобы сама БД это как то фиксила.

Такое вообще возможно ?
Триггер с sys_context?
ProfSD
Дата: 19.02.2022 12:19:27
Asmodeus,тригер запускается в контексте пользователя? Не системы?
Elic
Дата: 19.02.2022 15:43:11
ProfSD
тригер запускается в контексте пользователя? Не системы?
Клон, любой триггер запускается в какой-то сессии.
Ролг Хупин
Дата: 20.02.2022 14:54:59
PSD
Есть проблема у заказчика развернут кластер их ХХХ серверов приложений которые работают с одной базой Oracle 11.

Все ходят под одной учеткой.

Нужно как то определять и писать в таблицу IP или имя хоста или что то еще , чтобы определить какой из АПП серверов создавал или апдейтил запись в таблице.
На стороне клиента это сделать нельзя. Нужно чтобы сама БД это как то фиксила.

Такое вообще возможно ?


Имхую:
1. "сама БД пофиксила" - БД - пассивный объект, сама ничего не делает, не возбуждается.

2.
SYS_CONTEXT('USERENV','OS_USER'),
SYS_CONTEXT('USERENV','IP_ADDRESS'),
SYS_CONTEXT('USERENV','HOST')
ASNexus
Дата: 20.02.2022 19:46:59
Ролг Хупин
PSD
Есть проблема у заказчика развернут кластер их ХХХ серверов приложений которые работают с одной базой Oracle 11.

Все ходят под одной учеткой.

Нужно как то определять и писать в таблицу IP или имя хоста или что то еще , чтобы определить какой из АПП серверов создавал или апдейтил запись в таблице.
На стороне клиента это сделать нельзя. Нужно чтобы сама БД это как то фиксила.

Такое вообще возможно ?


Имхую:
1. "сама БД пофиксила" - БД - пассивный объект, сама ничего не делает, не возбуждается.

2.
SYS_CONTEXT('USERENV','OS_USER'),
SYS_CONTEXT('USERENV','IP_ADDRESS'),
SYS_CONTEXT('USERENV','HOST')

В результате получим имя учётки, под которой стартует сервер приложений в своей ОС и адрес и имя хоста, на котором данный сервер приложений работает (т.е. определим сессия какого из серверов "кластера их ХХХ серверов приложений" что-то сделала).

Чтобы определить в БД конечного пользователя приложения, нужно, чтобы эту информацию сервер приложений каким-то образом БД сообщал. Или, например, как вариант, логировать на сервере приложений, что такой-то его клиент открыл такую-то сессию в БД и уже тогда через SYS_CONTEXT('USERENV','SID') можно будет провести соответствие "сессия = конечный пользователь".

Без "помощи" со стороны сервера приложений при заданных вводных ("Все ходят под одной учеткой") в БД определить конечного пользователя не получится никак.
ASNexus
Дата: 20.02.2022 19:59:47
Так, опять я не внимательно прочитал - если вопрос именно в том, "чтобы определить какой из АПП серверов создавал или апдейтил запись в таблице", то предложение Ролг Хупин - это именно то, что нужно. Я имел в виду, что конечного пользователя приложения определить проблематично, но в рамках данной задачи это и не требуется.