Сессии в InterBase
От: Аноним  
Дата: 19.08.04 04:50
Оценка:
Подскажите как можно сделать единственное подключение к базе одного пользователя под одним логином
Т.е. один логин — одна сессия.
Думал завести базу где будет храниться данные ... залогинился юзер или нет ... но в таком случае придется изменять данные при входе пользователя .. и при выходе ...
А если база вылетит ???
Можно ли как нить это дело по другому организовать...???
Re: Сессии в InterBase
От: Sheridan Россия  
Дата: 19.08.04 04:57
Оценка:
Что вы имеете ввиду под сессией?
... << RSDN@Home 1.1.4 beta 2 rev. 163>>
Matrix has you...
Re[2]: Сессии в InterBase
От: Аноним  
Дата: 19.08.04 05:01
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Что вы имеете ввиду под сессией?

Физический коннект с базой данных
Re: Сессии в InterBase
От: TObject Россия  
Дата: 19.08.04 06:49
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Подскажите как можно сделать единственное подключение к базе одного пользователя под одним логином

А>Т.е. один логин — одна сессия.
Все говорит о необходимости использовании локальной версии сервера. К примеру Firebird Emb.
Зачем вам сеть то тогда, если подключаеться только один пользователь?
... << RSDN@Home 1.1.4 @@subversion >>
Re[2]: Сессии в InterBase
От: Аноним  
Дата: 19.08.04 07:15
Оценка:
Здравствуйте, TObject, Вы писали:

TO>Здравствуйте, <Аноним>, Вы писали:


А>>Подскажите как можно сделать единственное подключение к базе одного пользователя под одним логином

А>>Т.е. один логин — одна сессия.
TO>Все говорит о необходимости использовании локальной версии сервера. К примеру Firebird Emb.
TO>Зачем вам сеть то тогда, если подключаеться только один пользователь?
для одного пользователя — одна сессия ... это еще не значит что всего сессий — 1...
К примеру в базе 10 пользователей ... каждый имеет свои права и уровень доступа ... Как сделать так .. чтобы под одним логином не могли зайти несколько человек ..
Если один подключился .. то другой под его именем и паролем уже не может
Re[3]: Сессии в InterBase
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 19.08.04 07:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>К примеру в базе 10 пользователей ... каждый имеет свои права и уровень доступа ... Как сделать так .. чтобы под одним логином не могли зайти несколько человек ..

А>Если один подключился .. то другой под его именем и паролем уже не может

Подозреваю, что только шаманством Могу предложить такой простенький метод.
Заводишь табличку вроде такой:
SesID integer
UserName varchar(32) default current_user
Делаешь unique на UserName.
После коннекта пытаешься вставить в табличку имя пользователя. Если получил отлуп — значит такой пользователь уже есть, о чем ему радостно сообщаешь. Перед дисконнектом — убираешь имя пользователя из таблички.
При вылете базы или обвале приложения-клиента — входишь любым средством администрирования IB/FB и правишь табличку пользователей.
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[4]: Сессии в InterBase
От: Turbo Россия  
Дата: 19.08.04 09:55
Оценка:
А>>К примеру в базе 10 пользователей ... каждый имеет свои права и уровень доступа ... Как сделать так .. чтобы под одним логином не могли зайти несколько человек ..
А>>Если один подключился .. то другой под его именем и паролем уже не может

DM>Подозреваю, что только шаманством Могу предложить такой простенький метод.

DM>Заводишь табличку вроде такой:
DM> SesID integer
DM> UserName varchar(32) default current_user
DM>Делаешь unique на UserName.
DM>После коннекта пытаешься вставить в табличку имя пользователя. Если получил отлуп — значит такой пользователь уже есть, о чем ему радостно сообщаешь. Перед дисконнектом — убираешь имя пользователя из таблички.
DM>При вылете базы или обвале приложения-клиента — входишь любым средством администрирования IB/FB и правишь табличку пользователей.

Это я уже придумал. Но это не совсем удобно. Запускать некую программу для очистки таблицы или удалять из таблицы руками. Хотелось бы как нить придумать проверку ... грубо говоря пинга ... т.е. проверки подключен пользователь к базе или нет... Т.е. если бы по прошествии некоторого времени нет отклика от пользователя — то исключать его из базы залогиныных ...
сложность в том ... чтобы написать бы все это на самом сервере ... т.е. не придумывать программу ... которая будет проверять — есть отклик или нет... а сам сервер тестировал ...
одним словом нужен некоторый алгоритм .. который бы работал на уровне сервера InterBase ...
Re: Сессии в InterBase
От: Turbo Россия  
Дата: 20.08.04 04:20
Оценка:
Неужели мне никто не поможет???
Re[2]: Сессии в InterBase
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 20.08.04 06:51
Оценка:
Здравствуйте, Turbo, Вы писали:

T>Неужели мне никто не поможет???

Нет у IB/FB реакции на коннект/дисконнект (типа триггера). Поэтому придеться выкручивать несколькими способами:
1) писать доп. утилитку, которая будет отслеживать соединения (для архитектуры суперсервер например получая список пользователей через сервисное апи). Тут уж как фантазия разыграется — вплоть до отслеживания процессов и прослушки портов
2) писать 3-х звенку, где апп-сервер помимо всего будет заниматься пользователями
3) делать таки доп. табличку в базе и рулить с клиента...
Кстати, имхо, наименее затратный путь — 3-й. Насчет нежелания возни с доп. утилитами по мониторингу — что мешает написать "робота" и пускать его из шедулера?
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re: Сессии в InterBase
От: Turbo Россия  
Дата: 30.08.04 07:58
Оценка: 2 (1)
Здравствуйте, Аноним, Вы писали:

А>Подскажите как можно сделать единственное подключение к базе одного пользователя под одним логином

А>Т.е. один логин — одна сессия.
А>Думал завести базу где будет храниться данные ... залогинился юзер или нет ... но в таком случае придется изменять данные при входе пользователя .. и при выходе ...
А>А если база вылетит ???
А>Можно ли как нить это дело по другому организовать...???
Помогли ...
На самом деле надо добавить компоненту TIBDatabaseInfo и вызвать функцию UserNames
Он выведет пользователей, подключенных к базе данных ... зная пользователей — устроить проверку ... есть уже такой или нет не составляет труда
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.