Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.09.2015, 18:26
tinky tinky вне форума
Прохожий
 
Регистрация: 08.04.2012
Сообщения: 11
Репутация: 10
По умолчанию ADOQuery c учетом регистра букв

Добрый день!
имеется код дэлфи, который должен производить аутентификацию пользователя. Вся проблема в том, что такой код пропускает как заглавные, так и строчные буквы (User и user для него одно и то же). Пересмотрел кучу форумов, но у всех проблема обратная, и используя даже их код, все равно запрос получается не восприимчив к регистру.
Может что не так в свойствах параметров или я не туда смотрю. вот код:

Код:
   Login:=LabeledEdit1.Text;
   Pass:=LabeledEdit2.Text;
   Form3.ADOQuery1.SQL.Clear;
   Form3.ADOQuery1.SQL.Add('SElECT [Роль] FROM Пользователи WHERE Пользователи.[Логин]=:Login AND Пользователи.[Пароль]=:Pass');
   Form3.ADOQuery1.Parameters.ParamByName('Login').Value:=Login;
   Form3.ADOQuery1.Parameters.ParamByName('Pass').Value:=Pass;
   Form3.ADOQuery1.Open;
Ответить с цитированием
  #2  
Старый 30.09.2015, 18:44
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Ну кто-же сравнивает пароли напрямую??? Сравнивают хеши паролей.
2. Я так понимаю - Access. В отличии от всех рстальных БД, там сравнение по умолчанию без учета регистра. Попробуй так:
Код:
SELECT Table1.ID, Table1.Field1, Table1.Field2
FROM Table1
where StrComp(Field1,'f1',0) = 0;
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
tinky (30.09.2015)
  #3  
Старый 30.09.2015, 19:54
tinky tinky вне форума
Прохожий
 
Регистрация: 08.04.2012
Сообщения: 11
Репутация: 10
Радость

Цитата:
Сообщение от lmikle
1. Попробуй так:
Код:
SELECT Table1.ID, Table1.Field1, Table1.Field2
FROM Table1
where StrComp(Field1,'f1',0) = 0;

Спасибо! использовал StrComp и заработало. не понял только для чего в ней третий параметр '0' необходим.

Цитата:
Сообщение от lmikle
Ну кто-же сравнивает пароли напрямую??? Сравнивают хеши паролей.
2. Я так понимаю - Access. В отличии от всех рстальных БД, там сравнение по умолчанию без учета регистра.

Да, забыл сказать что это Access. С созданием хэшей еще никогда не сталкивался. это нужно делать обязательно? По моему и так вполне безопасно спасибо еще раз!

Последний раз редактировалось tinky, 30.09.2015 в 20:03.
Ответить с цитированием
  #4  
Старый 30.09.2015, 21:53
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Третьий параметр - как сравнивать. 0 - бинарное сравнение (т.е. сравнивать, как бинарные данные - как раз то, что тебе нужно).
2. Сравнивают хеши, т.к. передавать пароль в открытом виде значит практически выкладывать его в открытый доступ. Ну и в дополнение SQL-injection возможен (например, если вместо пароля я введу что-то типа "aaa OR 1=1". Посмотри какой запрос тогда получится
А хеш передавать достаточно безопасно, т.к. он не реверсабл, хотя при перехвате тоже позволяет зайти в БД.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
tinky (01.10.2015)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter