Консультация № 140707
25.07.2008, 13:53
0.00 руб.
0 7 1
Может мой вопрос покажется простым ну если можно ХЕЛП)

У меня стоит Delphi 7 и база данных написана под Interbase 7.0.
Подскажите плз следующее:
у меня есть форма на которой располагаются два TxtEdita Логин и пароль и две кнопки ОК и Canсel
в базе данных (test.gdb) есть таблица Autorizacia, в которой есть два столбца логин и пароль,

Как можно в Delphi таким образом сделать авторизацию для проверки логина и пароля пользователя если они будут верны, то загружается программа дальше, а если нет, то выдавать соответствующее сообщение!

P.s. Если можно то с примерами...

Заранее благодарен...

Обсуждение

Неизвестный
25.07.2008, 21:29
общий
это ответ
Здравствуйте, Demon:-)!

Обычно так не делается.. дело в том, что суть авторизации - предоставить или запретить доступ к данным. Но у вас хранится логин и пароль в базе, тем более, как я понял в открытом виде (что весьма просто может посмотреть любой желающий.). Делается так: в базе данных заводится пользователь (пользователи) и назначаются им права (т.е. бизнес логика - кому то можно удалять, кому то можно только смотреть и только определённые данные, кто-то может редактировать только определённые данные и т.д.). После этого, вы просто выставляете LoginPromt компонента IBDateBase в True и всё.. при подключение к базе данных (запуску приложения) InterBase сам запросит логин и пароль.. Один недостаток - сообщение выведется на английском языке, хоть там и все просто, но ничего не мешает самому сделать форму маленькую и до старта основной формы (в файле проекта) динамически её создавать, получать логин пароль, стартовать модуль данных (а правильно компоненты базы данных держать в модуле данных - есть шаблон в выборе проекта для создания) и передовать эти параметры IBDateBase - дальше просто пытаться открыть.. если база не пустила - например, даем попытки и если неверно - просто выходим - приложение даже не показывает главную форму.. Иначе, если пароль принят и база открыта - то в теле условия выполняем стандартный код создания главной формы.

вот примерный алгоритм...
Код:
 var FLogin : TFLogin;

begin
FLogin := TFLogin.Create(nil);
// запускаем форму в модальном режиме
// в форме делаем логику проверки валидности пользователя,
//если нормально ModalResult = mrOk иначе ModalResult = mrCancel
if (FLogin.ShowModal = mrOk) then
begin
блок создания всех форм приложения
сюда попадем только если пользователь прощел проверку
end;
// иначе просто выходим, т.е. ничего не показывается
end.
Неизвестный
28.07.2008, 10:43
общий
а можно по подробнее применимо к моей программе (с примером если можно)
давно
Мастер-Эксперт
425
4118
28.07.2008, 14:26
общий
Demon:-)

Вам нужен пример формы ввода пароля?
Если Вы используете совет включить LoginPromt в True, то эта форма будет появляться сама собой при любой попытке Вашей программы подключиться к базе данных, т.к. эта форма уже определена в недрах Delphi. И если пароль будет введён неправильно, то Ваша программа просто-напросто не подключится к базе, что автоматически решает вопрос несанкционированного доступа к данным.
Можно сделать перехват исключения неудачной попытки соедениться с базой. Что-то типа:
Код:
 
Try
IBDatabase1.Open;
Except
MessageBox(0, 'Увы, мой друг, Вам не дано познать всё то, что скрыто в недрах кладезей премудрых...', 'Ошибка подключения к базе данных!', MB_OK+MB_ICONSTOP);
Halt(2);
End;

Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
29.07.2008, 11:12
общий
Мне нужен пример от проверки введенных данных в txtedit и passwordchar с данными из базы данных из таблицы Autorizacia, в которой есть два столбца логин и пароль, вот ну а сам скл запрос в нее
давно
Мастер-Эксперт
425
4118
29.07.2008, 11:19
общий
Demon:-)
"Мне нужен пример от проверки введенных данных в txtedit и passwordchar с данными из базы данных из таблицы Autorizacia"
Ну да, и получите дублирование уже осуществлённого процесса. Вопрос - зачем? Вы любите делать всё по два раза?
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
29.07.2008, 13:02
общий
>>>"Мне нужен пример от проверки введенных данных в txtedit и passwordchar с данными из базы данных из таблицы Autorizacia"
>>>Ну да, и получите дублирование уже осуществлённого процесса. Вопрос - зачем? Вы любите делать всё по два раза?


нет я всего лишь хочу разграничить права , ну наприметр кто-то админ , а кто-то просто юзер вот всё что мне надо, чтобы один видел то что другой не видит
давно
Мастер-Эксперт
425
4118
29.07.2008, 13:42
общий
"нет я всего лишь хочу разграничить права , ну наприметр кто-то админ , а кто-то просто юзер вот всё что мне надо, чтобы один видел то что другой не видит"
Вот это как раз проще и надёжнее всего делать в самой БД, а не в программе.
А у Вас что получается? Ну проверили Вы в таблице, что кто-то зашёл под юзером. И что? Всё равно, у Вас автоматическое подключение идёт с паролем администратора не только базы, но и вообще всего сервера. Т.е. если Вы в своей программе не пропишете специальных ограничений на работу с данными, юзеровский логин-пароль Вам ничего не даст.
Мало того, даже если Вы и пропишете тщательно ограничения в своей программе. Просмотрев экзешник и найдя там пароль администратора, любой без всякой программы, например через IBExpert, залезет в базу и наделает там таких делов, что останется только мылить верёвку и потирать шею в предчувствии приближающегося начальника. И не говорите, что этого делать никто не будет. Обязательно найдётся такой, кто смел не по чину и которому надо переписать на соседа потраченые в казино несколько казённых миллионов...
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа