Как узнать IP-адрес клиента?

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
BlackEric
Сообщения: 31
Зарегистрирован: 15 фев 2006, 08:43

Как узнать IP-адрес клиента?

Сообщение BlackEric » 29 июл 2006, 01:57

Для обеспечения логирования действий пользователя нужно хранить в БД IP-адрес, (а в идеале еще и MAC) с которого было выполнено подключение, время подключения и время отключения от БД.
Можно ли это узнать средствами сервера FireBird или же только пересылать с клиента?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 29 июл 2006, 09:42

Можно ли это узнать средствами сервера FireBird или же только пересылать с клиента?
только пересылать с клиента.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 29 июл 2006, 11:34

kdv писал(а):только пересылать с клиента.
Не совсем так. Для Classic на Линуксе есть решение, с помощью UDF. Я его использую.

Код: Выделить всё

(FreePascal Compiler v.1.9.x или выше)
var
  PID, NetStat: string;
  f: text;

System.Str(getprocessId, PID);
POpen(f,'netstat -np|grep '+PID+'/gds','R');
Readln(f, NetStat);
PClose(f);
А дальше из строки NetStat формируем IP в "нормальном" виде и возвращаем строкой. В полученной строке содержится и IP сервера тоже.

BlackEric
Сообщения: 31
Зарегистрирован: 15 фев 2006, 08:43

Сообщение BlackEric » 29 июл 2006, 22:55

У меня SuperServer под Windows. :(

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 30 июл 2006, 12:53

В FB2 вроде IP можно достать (релизные ноты надо глянуть), а вот MAC имхо только с клиента.

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 30 июл 2006, 18:25

Тоже что-то подобное помню про FB 2.0. Но смотрел ноты - ничего не нашел. Либо плохо искал либо в самом деле нельзя.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 30 июл 2006, 21:54

См. RDB$GET_CONTEXT

BlackEric
Сообщения: 31
Зарегистрирован: 15 фев 2006, 08:43

Сообщение BlackEric » 18 фев 2008, 13:56

Проблема возникла вновь.

FB 2.0.3.

Нужно логировать подключение к базе обязательно IP и желательно системное имя (Sysdba, public и т.д.)

Сейчас я получаю IP из SP, где вызывается rdb$get_context('SYSTEM', 'CLIENT_ADDRESS');

Но я дергаю эту хранимку из моего клиентского приложения, а нужно отследить подключение из любого приложения: IBExpert, isql.exe и другие.

На http://forum.vingrad.ru/forum/topic-135 ... t_0_view_0 есть решение, но оно требует создания триггера для каждой таблицы, что не удобно и позволит отследить только изменение данных, но не чтение, т.к. триггера на select нет.

Что можно сделать?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 18 фев 2008, 14:00

Что можно сделать?
Firebird 2.1, InterBase 2007.

Ответить