Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрет на запуск двух программ одним пользователем / 25 сообщений из 51, страница 1 из 3
19.11.2016, 21:40
    #39350353
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Добрый вечер
Пожалуйста оцените реализацию запрета на запуск двух программ одним пользователем. Задача такая - пользователь не может подключится к базе из одной программы,если он уже подключен к базе. Раньше была реализация на триггере на коннект с использованием mon$attachments, но это очень сильно нагружало базу и в определенный момент отправилось на свалку. Теперь решение я вижу так - один триггер на коннект делает запись в таблицу о подключении юсера - имя пользователя, время подключения и имя программы (второе для мониторинга, третий для отладки), а перед этим проверяет - есть ли уже такая запись в таблице, если есть - проверяет есть ли этот усер в таблице с исключениями, если нет - выдает эксепшен.
Код такой:
Таблица с коннектами:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE ZM_CONNECT (
    ID_USER       VARCHAR(10),
    TIME_CONNECT  DATE,
    PROCESS       VARCHAR(20)
);
CREATE INDEX ZM_CONNECT_IDX1 ON ZM_CONNECT (ID_USER);



Таблица с исключениями:
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE ZM_CONNECT_2 (
    ID_USER  VARCHAR(10)
);

CREATE INDEX ZM_CONNECT_2_IDX1 ON ZM_CONNECT_2 (ID_USER);



Триггер на коннект:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE OR ALTER trigger zm_connect
active on connect position 0
as
begin
--проверяем та ли эта программа
if (right(RDB$GET_CONTEXT('SYSTEM', 'CLIENT_PROCESS'), 12) = 'IBExpert.exe') then
-- проверяем есть ли запись в таблице подключений
if (exists(select 1 from ZM_CONNECT where ID_USER = current_user)) then
-- если есть - смотрим, есть ли исключения на данного пользователя
    begin
if (not exists(select 1from ZM_CONNECT_2 where ID_USER = current_user)) then
-- нету, лови эксепшен
        exception DB_CONNECT;
    end
-- если программа та, но подключения нет ещё - вносим данные в таблицу подключений
    else
    begin
      insert into ZM_CONNECT (ID_USER, TIME_CONNECT, PROCESS)
      values (current_user, current_timestamp, right(RDB$GET_CONTEXT('SYSTEM', 'CLIENT_PROCESS'), 12));
    end
end



Триггер на дисконнект:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE OR ALTER trigger zm_disconnect
active on disconnect position 0
AS
begin
  delete from ZM_connect where id_user = current_user;
end

...
Рейтинг: 0 / 0
19.11.2016, 21:46
    #39350356
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
GallemarРаньше была реализация на триггере на коннект с использованием mon$attachments, но это очень сильно нагружало баз

уверен? У тебя в системе постоянно коннект-дисконнект что ли?

Код обладает одним недостатком, если отключение произошло нештатным способом (обрыв сети и т.д.), то запись о подключенном юзере останется навсегда в БД, и этот пользователь больше не подключится к БД вообще.
...
Рейтинг: 0 / 0
19.11.2016, 21:56
    #39350358
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Gallemar,

велосипед, не работает (Денис уже сказал).
По уму, люди делают так. Монитор на компе, каждый комп скидывает информацию по запросу на некий агрегатор, по tcp. Агрегатор выдает информацию. И может приказать, какой процесс этот монитор должен грохнуть, например.
...
Рейтинг: 0 / 0
19.11.2016, 22:01
    #39350359
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Симонов ДенисGallemarРаньше была реализация на триггере на коннект с использованием mon$attachments, но это очень сильно нагружало баз
уверен? У тебя в системе постоянно коннект-дисконнект что ли?

Уверен
Я не так давно даже писал про это http://www.sql.ru/forum/1236886/o-grustnom?hl=
Симонов Денисзапись о подключенном юзере останется навсегда в БД, и этот пользователь больше не подключится к БД вообще.
Это уже не мои проблемы, добавлю управление процессом в веб или в 1С, это уже пусть техподдержка или консультанты по софту разруливают. Когда всё через mon$attachments было при обрыве или перезагрузке терминального сервера там записи оставались, убирали через 1С без особых проблем.
...
Рейтинг: 0 / 0
19.11.2016, 22:03
    #39350360
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
kdvGallemar,

велосипед, не работает (Денис уже сказал).
По уму, люди делают так. Монитор на компе, каждый комп скидывает информацию по запросу на некий агрегатор, по tcp. Агрегатор выдает информацию. И может приказать, какой процесс этот монитор должен грохнуть, например.
Что за монитор?
...
Рейтинг: 0 / 0
19.11.2016, 22:26
    #39350366
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Gallemar,

ну так ты проблемы своего решения спрашивал, тебе их показали.
...
Рейтинг: 0 / 0
19.11.2016, 22:35
    #39350370
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Т.е. использовать его можно, главное понимать возможные проблемы с нештатными отключениями ?
...
Рейтинг: 0 / 0
19.11.2016, 22:54
    #39350374
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Gallemar... главное понимать возможные проблемы с нештатными отключениями ?
Главное - понимать, что с таким быдлокоденгом и гуанамореализейшен - долго держать не будут...
...
Рейтинг: 0 / 0
19.11.2016, 23:25
    #39350377
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
GallemarЧто за монитор?
программа такая, самописная, которая мониторит состояние конкретных процессов.
...
Рейтинг: 0 / 0
20.11.2016, 05:07
    #39350406
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
kdvGallemarЧто за монитор?
программа такая, самописная, которая мониторит состояние конкретных процессов.
Усложняете. Проще триггер повесить, чтобы не давал два раза запускать приложение.
...
Рейтинг: 0 / 0
20.11.2016, 05:08
    #39350407
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Di_LIneGallemar... главное понимать возможные проблемы с нештатными отключениями ?
Главное - понимать, что с таким быдлокоденгом и гуанамореализейшен - долго держать не будут...
Мой быдлокодинг ждут как невеста первого раза :) Плакали и ждали, когда я из отпуска выйду.
...
Рейтинг: 0 / 0
20.11.2016, 05:36
    #39350409
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
GallemarМой быдлокодинг ждут как невеста первого раза :) Плакали и ждали, когда я из отпуска выйду.
Да-да, йожики кололись, но кактус... самзнаешьчего. :-)
Но от это самзнаешьчего гуанамой быть не перестало.
- Ы?
...
Рейтинг: 0 / 0
20.11.2016, 06:30
    #39350410
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Di_LIneGallemarМой быдлокодинг ждут как невеста первого раза :) Плакали и ждали, когда я из отпуска выйду.
Да-да, йожики кололись, но кактус... самзнаешьчего. :-)
Но от это самзнаешьчего гуанамой быть не перестало.
- Ы?
Ы-ы-ы
В чем гуано-то? Новичка любой обидеть может,вот нет чтобы показать в чем неправ.
...
Рейтинг: 0 / 0
20.11.2016, 06:36
    #39350413
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
kdvGallemarЧто за монитор?
программа такая, самописная, которая мониторит состояние конкретных процессов.
Да есть и не самописная, но она не делает то,что я хочу
...
Рейтинг: 0 / 0
20.11.2016, 06:53
    #39350414
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
GallemarЫ-ы-ы
В чем гуано-то? Новичка любой обидеть может,вот нет чтобы показать в чем неправ.
Каждый день по 500 раз бъёшься головом о притолоку и вкурить не магешь - чё, вкуды и пачём?
...
Рейтинг: 0 / 0
20.11.2016, 07:27
    #39350417
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Di_LIne,ага
...
Рейтинг: 0 / 0
20.11.2016, 08:06
    #39350420
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Gallemar, навеяло - тынц
...
Рейтинг: 0 / 0
20.11.2016, 17:56
    #39350546
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Большая просьба - объясните что не так в коде. Альтернативный вариант невозможен,т.к. программа не моя и модернизировать я могу только базу.
...
Рейтинг: 0 / 0
20.11.2016, 18:30
    #39350557
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Gallemar объясните что не так в коде.
- Фсё! От сих и посисих.
Так уже ответили в тынц .
- Чего не понятно?
То, правильно спроектированная и грамотно реализованная система должна ИСКЛЮЧАТЬ любое "ручное" разблокирование аккаунтов, даже такому лосю лохастому как мну, видно из далека. :-)
Или ты думаешь на туевой хуче Инет-форумов одмины с сисопами и мордотрахтерами сидят и ручками разблокируют юзеров?
- Вывод?
Иди и учи матчасть.
Хотя бы тот же какой-нить древниеубогей ПыхПых-Пхорум, писанный для сирых узеров и убогих "двешков". :-)
...
Рейтинг: 0 / 0
20.11.2016, 18:34
    #39350559
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Di_LIne- Вывод?
Иди и учи матчасть.

Ничего ты не понял :) Как и другие.
...
Рейтинг: 0 / 0
20.11.2016, 18:42
    #39350561
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
GallemarНичего ты не понял :) Как и другие.
- Да-да, один ты у нас такой задвинутый разраб... :-)))

С такими картинками, как ты запостил, у меня был бы уволен "здесь и чичас" с начетом на ЗП. :-)
...
Рейтинг: 0 / 0
20.11.2016, 18:43
    #39350562
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Di_LIne,с которой, с первой или второй?
...
Рейтинг: 0 / 0
20.11.2016, 18:47
    #39350564
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Gallemar,

не должен никакой человек сидеть и карпеть над твоей системой следя не завис ли там какой-нибудь пользователь.
Система должна облегчать пользователям жизнь, а у тебя она получается её усложняет как минимум товарищу надзорному.
...
Рейтинг: 0 / 0
20.11.2016, 18:52
    #39350566
Di_LIne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
GallemarDi_LIne,с которой, с первой или второй?
- Со всеми тремя!
Хотя и первой, в двумя IF и тремя ELSE , гордо названной "программным кодом", достаточно. :-))))
...
Рейтинг: 0 / 0
20.11.2016, 18:57
    #39350567
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет на запуск двух программ одним пользователем
Gallemar,

для начала подготовь товарища надсмотрщика к тому, что юзеры будут кидать в него тапки, каждый раз когда не смогут подрубиться к системе. Когда товарищу надсмотрщику это надоест, он придёт забрасывать тапками тебя.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрет на запуск двух программ одним пользователем / 25 сообщений из 51, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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