Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 запрос подключения пользователя и количество подключений к серверу  [new]
aqula
Member

Откуда:
Сообщений: 18
Delphi (ADO) и mssql 2005
Задача :
Контроль количества подключенных пользователей к серверу (ограничение по количеству подключений).
Блокировка второго подключения с тем же логином.
Как сделать?
15 дек 15, 20:05    [18564898]     Ответить | Цитировать Сообщить модератору
 Re: запрос подключения пользователя и количество подключений к серверу  [new]
o-o
Guest
Logon Triggers

пример там кривоват, но ровно по теме
15 дек 15, 22:08    [18565243]     Ответить | Цитировать Сообщить модератору
 Re: запрос подключения пользователя и количество подключений к серверу  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
aqula,

Одно приложение может использовать более чем один коннект.
16 дек 15, 01:51    [18565768]     Ответить | Цитировать Сообщить модератору
 Re: запрос подключения пользователя и количество подключений к серверу  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
aqula,

эта задача не имеет смысла. В чем пользователь провинился?
16 дек 15, 10:41    [18566431]     Ответить | Цитировать Сообщить модератору
 Re: запрос подключения пользователя и количество подключений к серверу  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
aqula, делается так: в вашей базе создается таблица с сессиями. При запуске приложения пользователь генерирует новую сессию, если сессия для такого пользователя существует - ему возвращается код ошибки, приложение обрабатывает код ошибки, выдает об этом сообщение пользователю и закрывается.

При работе приложения каждое обращение должно сопровождаться передачей идентификатора сессии - для этого вся логика должна быть на хранимых процедурах, в в параметры каждой из которых нужно добавить идентификатор сессии. Если сессия в таблице сессий не обнаруживается - процедура возвращает код ошибки, приложение обрабатывает код ошибки, выдает сообщение пользователю и закрывается.

При закрытии приложения оно удаляет запись о сессии.

Узкое место в такой схеме - экстренное прекращение работы приложения, при обрыве связи, например, когда оно не удалило свою сессию. Тут зависит от того, как вы этот случай хотите обрабатывать.
Варианты:
1) администратор, который может прибить любую сессию
2) джоб, который периодически проверяет - нет ли "зависших" сессий - тех, которые давно ничего не делали. Для этого случая нужно в таблицу сессий дополнительно писать время последней активности
2) пользователю при входе сообщается, что существует ранее созданная сессия и дается возможность ее прибить.
3) без уведомления пользователя создание новой сессии автоматически прибивает все старые - соответственно работать с базой сможет только последнее запущенное приложение.
16 дек 15, 11:12    [18566663]     Ответить | Цитировать Сообщить модератору
 Re: запрос подключения пользователя и количество подключений к серверу  [new]
asdor
Member

Откуда: Москва
Сообщений: 509
Minamoto
Узкое место в такой схеме - экстренное прекращение работы приложения, при обрыве связи, например, когда оно не удалило свою сессию. Тут зависит от того, как вы этот случай хотите обрабатывать.
Варианты:
...

Еще вариант, хранить в сессии спид и время входа.
Тогда легко проверяется, существует ли незакрытая сессия.
16 дек 15, 13:03    [18567328]     Ответить | Цитировать Сообщить модератору
 Re: запрос подключения пользователя и количество подключений к серверу  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
asdor, это если вы держите стартовый коннект до закрытия приложения. коннекты могут создаваться/уничтожаться в процессе работы приложения.
16 дек 15, 13:44    [18567594]     Ответить | Цитировать Сообщить модератору
 Re: запрос подключения пользователя и количество подключений к серверу  [new]
aqula
Member

Откуда:
Сообщений: 18
Minamoto,

Для сессий лучше сделать отдельную свою таблицу или использовать sp_who2 например
17 дек 15, 09:43    [18571415]     Ответить | Цитировать Сообщить модератору
 Re: запрос подключения пользователя и количество подключений к серверу  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
aqula, смысл в том, что вы создаете собственную сущность "сессия", которая будет иметь смысл только для вашего приложения, и никоим образом не привязываться к сессиям SQL Server'а.
Такая архитектура нужна, если вы в приложении создаете и уничтожаете подключения к базе, если используете разные подключения в разных потоках и т.д.
Если ваше приложение просто создает один коннект к базе при запуске, работает с ним и закрывает его при закрытии приложения - можете воспользоваться вышеприведенными рекомендациями - триггер на логон, хранение spid'ов (это то, что в sp_who2 выводится) и т.п.
17 дек 15, 10:49    [18571731]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить