powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Текущая сессия
4 сообщений из 4, страница 1 из 1
Текущая сессия
    #33251164
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос в следующем:
1. Хочеться сделать лог действий пользователя на уровне СУБД. Т.е. все измения, которые вности юзверь должны быть отображены в таблице логов.
2. Авторизация/система прав пользователей делается на клиенте независимо от СУБД. Т.е. в СУБД все пользователи работают под одним аккаунтом.
3. Каждое действие по изменению данных делается авторизовано, т.е. должен быть автор измений.
4. Хочется передавать в СУБД параметр - id пользователя, который работает в данной сессии. И очень хочеться что бы этот параметр был многопользовательским, и работал автономно для каждой сессии доступа к Постгресу. Это можно например сделав таблицу ID текущей сессии, ID пользователя, но вот функции определяющей ID пользователя я не нашел :(
Ну и собственно вопрос - как лучше всего это сделать? :)
...
Рейтинг: 0 / 0
Текущая сессия
    #33251781
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как лучше, я конечно, не знаю :), но пару вариантов могу предложить :
1. сделать слой для изменений данных только через ХП, в которые пихать ID пользователя
2. временная таблица для ID пользователя - живет до конца сессии PostgreSQL, данные о пользователе вносятся в неё при каждой транзакции, работает через RULE - см. пример во вложении
...
Рейтинг: 0 / 0
Текущая сессия
    #33251950
4321ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XMКак лучше, я конечно, не знаю
1. сделать слой для изменений данных только через ХП, в которые пихать ID пользователя
2. временная таблица для ID пользователя - живет до конца сессии PostgreSQL, данные о пользователе вносятся в неё при каждой транзакции, работает через RULE - см. пример во вложении
3. посмотри поиском создание переменных сессии в PLperl или PLTcl, и тогда, при каждом создании соединения первым делом устанавливаем переменную сессии в некое значение, и далее (внутри соединения) ее можно использовать не только в хп (явно посылая) но и в триггерах (давать отлуп - если не установлена).
...
Рейтинг: 0 / 0
Текущая сессия
    #33274952
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMКак лучше, я конечно, не знаю :), но пару вариантов могу предложить :
1. сделать слой для изменений данных только через ХП, в которые пихать ID пользователя
2. временная таблица для ID пользователя - живет до конца сессии PostgreSQL, данные о пользователе вносятся в неё при каждой транзакции, работает через RULE - см. пример во вложении
Спасибо! Идею реализовал, работает на 5+ :)
Резюме (приложение на Delphi):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 1 . После коннекта:
    CREATE TEMPORARY TABLE dp_CurUser (id integer) ON COMMIT PRESERVE ROWS
Это делает табличку, PRESERVE - держит ее до конца сессии.
 2 . После логина делаем 
 INSERT INTO dp_CurUser VALUES (ID_ПОЛЬЗОВАТЕЛЯ)
 3 . И в триггерах (почему не в рулях - не знаю, но триггера уже были, дополнил их):
  SELECT INTO name_t tablename FROM pg_tables WHERE tablename='dp_curuser';
   IF NOT FOUND THEN
     RAISE EXCEPTION 'У пользователя PostgreSQL нехватает прав! Свяжитесь с администратором!';
   ELSE
    BEGIN
      SELECT INTO cur_id id FROM dp_CurUser;
      IF NOT FOUND THEN
         RAISE EXCEPTION 'Не удалось получить текущего пользователя!';
      ELSE
        IF new.lname<>old.lname THEN
           INSERT INTO dp_log (client_id,user_id,event_id,text) VALUES (new.id,cur_id, 11 ,'Фамилия: с '||old.lname||' на '||new.lname);
        END IF;
      END IF;
   END;
 END IF;
И это, как ни странно работает :)
Скорее всего легче и быстрее реализовать это через глобальные переменные PLperl или PLTcl, но они не идут в комплекте стандартной поставки PostgreSQL 8.0.3 под винду.
Замечания и предложения с удовольствием выслушаю :)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Текущая сессия
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]