-
Помогите пожалуйста. Имеется база в Акцесе. Программа сама на делфи. Пользователь вводит свой логин и пароль. Нужно сделать так чтобы программа проверяла используется ли программа этим пользователем, если да то выдавать сообщение, если нет то доступ разрешен. Помогите! Заранее спасибо!
-
-
Есть нюанс: запрещен запуск двух копий (не важно, под какой учётной записью) с данной машины, либо запрещён доступ именно под одной учётной записью?
-
Телепатор подсказывает, что копии вообще ни при чем - требуется что бы в бд акцесса только один был активен.
-
> Телепатор подсказывает, что копии вообще ни при чем - требуется > что бы в бд акцесса только один был активен.
Телепатор пробуксовывает. Может быть: 1. Монопольный доступ с одним коннекшеном. 2. Монопольный доступ одного пользователя. 3. Монопольный доступ одного и того же пользователя в один момент времени с разных машин 4. Один экземпляр программы на одной машине. И т.д., вариантов можно нагородить 100500. Что нужно автору - хз.
-
Нужно сделать так чтобы программа проверяла используется ли программа этим пользователем
можно не проверять. программа всегда используется этим и только этим пользователем. а если пользователь вдруг поменяется, то он сразу становится тоже "этим".
-
Нужно чтобы пользователь мог со своим паролем обратиться к базе данных только один раз.и с одного компьютера. до тех пор пока работает программа. Два пользователя не могут зайти в программу с двух разных компьютеров с одного логина, пока используется программа
-
> только один раз.и с одного компьютера
механизм сессий надо прикручивать. 1. Происходит попытка авторизации. 2. Ищем такой логин в таблице логинов. 3. Если не нашли - выход. 4. Проверяем на соответствие пароль. Не соответствует - выход. 4. Нашли, ищем данный логин в списке активных сессий. 5. Нашли - выход (либо кикаем найденного и goto пункт 6, тут уже от твоей логики зависит). 6. Добавляем пользователя в список активных сессий, разрешаем работу, отдаём пользователю идентификатор сессии.
Список активных сессий: у каждой сессии есть свой таймаут. Например, 5 минут. Если по истечении этого времени от пользователя не было никаких действий - грохаем его из списка. Любое действие с базой сопровождается идентификатором сессии. На любое действие сначала лезем в список активных сессий и ищем, есть ли там такой SessionID? Если есть, то заново устанавливаем таймаут сессии и производим действия с БД. Если сессия была убита по таймауту, то возвращаем пользователю отлуп и требуем заново авторизоваться.
-
включи монопольный доступ и все тебе будет
-
Да, вдогоночку: можно не просто пару логин-пароль авторизировать, а ещё и комп, с которого пользователь авторизуется. Тогда после проверки пароля дополнительно проверяем, с разрешённого ли компа пытается зайти пользователь.
-
> механизм сессий надо прикручивать. лишнее, все практически... рядом с базой при коннекте создается файл блокировок - *.ldb, в нем имя компа + юзер аксесный (от которого коннект). т.е. если работа "правильная" и каждый под своим юзером коннектится, то достаточно проверять есть ли уже в файле комп+юзер, или просто юзер... в зависимости от желания 1 на комп, или 1 вообще.
-
> рядом с базой при коннекте создается файл блокировок - *. > ldb, в нем имя компа + юзер аксесный (от которого коннект). > т.е. если работа "правильная" и каждый под своим юзером > коннектится, то достаточно проверять есть ли уже в файле > комп+юзер, или просто юзер... в зависимости от желания 1 > на комп, или 1 вообще.
Ага. Я подконнектился, весь из себя такой работаю, и тут уборщица БабаДаша шваброй сетевой шнур вырвала. Шнур воткнул на место, попытался реконнект сделать. Авотфигушки, я в этом *.ldb уже есть и работаю. И буду так "работать" до перезагрузки сервера.
-
> и тут уборщица БабаДаша шваброй сетевой шнур вырвала. насколько часто это бывает?
> И буду так "работать" до перезагрузки сервера. не обязательно, можно файл стереть. или коннектится сначала, а после смотреть чтобы записей было ровно 1 штука. при коннекте думаю jet "разрулит" ошибочную запись (хотя над бы сначала проверить)... он же сам их для управления совместной работой использует...
вообще тут не в этом проблема, проблема скорее в том, что с базами аксесс так, "правильно", мало кто работает, обычно, и автор топика скорее в их числе, работают не заморачиваясь под одним юзером. и значит "схема" ему не пойдет.
-
> работают не заморачиваясь под одним юзером предпочитают заморачиваться другим, странным... :) как тот же автор ветки.
-
++ > хотя над бы сначала проверить не логично работает... только добавляет при коннекте, но не убирает записи, только в конце когда отключается последний удаляет файл.
т.е. +1 к Ega23 © (21.03.13 15:45) [7], скорее всего нужно делать именно так.
-
> скорее всего нужно делать именно так.
Да я бы раз бы проще как-нибудь разрулить. Но проще как-то не очень получается... :(
|