Вырва Валерий Евгеньевич пишет:

  Хочеться реализовать систему сессий для пользователя, поэтому интерисует 
какую информацию можно
получить сразу после коннекта пользователя FireBird (всегда одного и того же) к 
базе.
  Схема предполагается такая:
  1) Выполняется соединение под пользователем Dummy
  2) Выполняется процедура Log_In(Login, Password), которая на осное уникальной 
информации о
подключении создает запись в таблице сессий.
  3) Любая работа с данными получает ID пользователя на основе той же 
уникальной информации и
используя этот ID выполняет работу.
  4) При выходе вызывается Log_Out(), которая удаляет запись из таблице сессий
  Пока есть идея привязываеться к параметру "Current_Connection", котрый должен 
быть уникален для
каждого соединения со времени создания (рестора) базы (Дмитрий Еманов, 
Alexander A. Venikov). Есть
возможность получить другие уникальные для текущего соединения значения 
(например IP:Port клиента)?
  А CURRENT_CONNECTION увеличивается после того как выдаст значение? или 
сначала увеличится счетчик,
а потом вернется значение?


Привет!

Вот как сделано у меня:

Таблица коннектов(сессий)
CREATE TABLE CONNECTIONS (
    ID               INTEGER NOT NULL,
    COMPUTER_ID      INTEGER NOT NULL,
    USER_ID          INTEGER NOT NULL,
    DATETIME         TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
    LOGOUT_DATETIME  TIMESTAMP,
...
);

Триггер к ней:
CREATE TRIGGER CONNECTIONS_BI FOR CONNECTIONS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  DELETE FROM CONNECTIONS WHERE ID = CURRENT_CONNECTION;
  NEW.ID = CURRENT_CONNECTION;
...
END

База спокойно переживает б/р, а в триггерах на оперативных таблицах я вытаскиваю инфу о юзере и станции по CURRENT_CONNECTION.


--
Удачи!

Shiliaev Ruslan

ЗЫ: Приходится вести параллельный учет юзеров. Хочу хранение юзеров в базе в FB3!

Ответить