Конференция "Базы" » Проверка пароля.
 
  • Новичок90 (20.03.13 16:57) [0]
    Помогите пожалуйста. Имеется база в Акцесе. Программа сама на делфи. Пользователь вводит свой логин и пароль. Нужно сделать так чтобы программа проверяла используется ли программа этим пользователем, если да то выдавать сообщение, если нет то доступ разрешен.  Помогите! Заранее спасибо!
  • O'ShinW © (20.03.13 17:38) [1]
  • Ega23 © (20.03.13 18:03) [2]
    Есть нюанс: запрещен запуск двух копий (не важно, под какой учётной записью) с данной машины, либо запрещён доступ именно под одной учётной записью?
  • O'ShinW © (20.03.13 19:06) [3]
    Телепатор подсказывает, что копии вообще ни при чем - требуется что бы в бд акцесса только один был активен.
  • Ega23 © (20.03.13 20:40) [4]

    > Телепатор подсказывает, что копии вообще ни при чем - требуется
    > что бы в бд акцесса только один был активен.


    Телепатор пробуксовывает.
    Может быть:
    1. Монопольный доступ с одним коннекшеном.
    2. Монопольный доступ одного пользователя.
    3. Монопольный доступ одного и того же пользователя в один момент времени с разных машин
    4. Один экземпляр программы на одной машине.
    И т.д., вариантов можно нагородить 100500. Что нужно автору - хз.
  • Медвежонок Пятачок © (21.03.13 13:49) [5]
    Нужно сделать так чтобы программа проверяла используется ли программа этим пользователем

    можно не проверять.
    программа всегда используется этим и только этим пользователем.
    а если пользователь вдруг поменяется, то он сразу становится тоже "этим".
  • Новичок90 (21.03.13 15:18) [6]
    Нужно чтобы пользователь мог со своим паролем обратиться к базе данных только один раз.и с одного компьютера. до тех пор пока работает программа. Два пользователя не могут зайти в программу с двух разных компьютеров с одного логина, пока используется программа
  • Ega23 © (21.03.13 15:45) [7]

    > только один раз.и с одного компьютера


    механизм сессий надо прикручивать.
    1. Происходит попытка авторизации.
    2. Ищем такой логин в таблице логинов.
    3. Если не нашли - выход.
    4. Проверяем на соответствие пароль. Не соответствует - выход.
    4. Нашли, ищем данный логин в списке активных сессий.
    5. Нашли - выход (либо кикаем найденного и goto пункт 6, тут уже от твоей логики зависит).
    6. Добавляем пользователя в список активных сессий, разрешаем работу, отдаём пользователю идентификатор сессии.

    Список активных сессий: у каждой сессии есть свой таймаут. Например, 5 минут. Если по истечении этого времени от пользователя не было никаких действий - грохаем его из списка.
    Любое действие с базой сопровождается идентификатором сессии. На любое действие сначала лезем в список активных сессий и ищем, есть ли там такой SessionID? Если есть, то заново устанавливаем таймаут сессии и производим действия с БД.
    Если сессия была убита по таймауту, то возвращаем пользователю отлуп и требуем заново авторизоваться.
  • Медвежонок Пятачок © (21.03.13 15:45) [8]
    включи монопольный доступ и все тебе будет
  • Ega23 © (21.03.13 15:47) [9]
    Да, вдогоночку: можно не просто пару логин-пароль авторизировать, а ещё и комп, с которого пользователь авторизуется. Тогда после проверки пароля дополнительно проверяем, с разрешённого ли компа пытается зайти пользователь.
  • sniknik © (21.03.13 17:01) [10]
    > механизм сессий надо прикручивать.
    лишнее, все практически...
    рядом с базой при коннекте создается файл блокировок - *.ldb, в нем имя компа + юзер аксесный (от которого коннект). т.е. если работа "правильная" и каждый под своим юзером коннектится, то достаточно проверять есть ли уже в файле комп+юзер, или просто юзер... в зависимости от желания 1 на комп, или 1 вообще.
  • Ega23 © (21.03.13 17:11) [11]

    > рядом с базой при коннекте создается файл блокировок - *.
    > ldb, в нем имя компа + юзер аксесный (от которого коннект).
    >  т.е. если работа "правильная" и каждый под своим юзером
    > коннектится, то достаточно проверять есть ли уже в файле
    > комп+юзер, или просто юзер... в зависимости от желания 1
    > на комп, или 1 вообще.


    Ага. Я подконнектился, весь из себя такой работаю, и тут уборщица БабаДаша шваброй сетевой шнур вырвала. Шнур воткнул на место, попытался реконнект сделать. Авотфигушки, я в этом *.ldb уже есть и работаю. И буду так "работать" до перезагрузки сервера.
  • sniknik © (22.03.13 08:19) [12]
    > и тут уборщица БабаДаша шваброй сетевой шнур вырвала.
    насколько часто это бывает?

    > И буду так "работать" до перезагрузки сервера.
    не обязательно, можно файл стереть. или коннектится сначала, а после смотреть чтобы записей было ровно 1 штука. при коннекте думаю jet "разрулит" ошибочную запись (хотя над бы сначала проверить)... он же сам их для управления совместной работой использует...

    вообще тут не в этом проблема, проблема скорее в том, что с базами аксесс так, "правильно", мало кто работает, обычно, и автор топика скорее в их числе, работают не заморачиваясь под одним юзером. и значит "схема" ему не пойдет.
  • sniknik © (22.03.13 08:22) [13]
    > работают не заморачиваясь под одним юзером
    предпочитают заморачиваться другим, странным... :) как тот же автор ветки.
  • sniknik © (22.03.13 10:01) [14]
    ++
    > хотя над бы сначала проверить
    не логично работает... только добавляет при коннекте, но не убирает записи, только в конце когда отключается последний удаляет файл.

    т.е. +1 к Ega23 ©   (21.03.13 15:45) [7], скорее всего нужно делать именно так.
  • Ega23 © (22.03.13 10:12) [15]

    >  скорее всего нужно делать именно так.

    Да я бы раз бы проще как-нибудь разрулить. Но проще как-то не очень получается... :(
 
Конференция "Базы" » Проверка пароля.
Есть новые Нет новых   [119515   +8][b:0][p:0.001]