|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
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
|
|||
|
|||
1. Ну кто-же сравнивает пароли напрямую??? Сравнивают хеши паролей.
2. Я так понимаю - Access. В отличии от всех рстальных БД, там сравнение по умолчанию без учета регистра. Попробуй так: Код:
SELECT Table1.ID, Table1.Field1, Table1.Field2 FROM Table1 where StrComp(Field1,'f1',0) = 0; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
tinky (30.09.2015)
|
#3
|
|||
|
|||
Цитата:
Спасибо! использовал StrComp и заработало. не понял только для чего в ней третий параметр '0' необходим. Цитата:
Да, забыл сказать что это Access. С созданием хэшей еще никогда не сталкивался. это нужно делать обязательно? По моему и так вполне безопасно спасибо еще раз! Последний раз редактировалось tinky, 30.09.2015 в 20:03. |
#4
|
|||
|
|||
1. Третьий параметр - как сравнивать. 0 - бинарное сравнение (т.е. сравнивать, как бинарные данные - как раз то, что тебе нужно).
2. Сравнивают хеши, т.к. передавать пароль в открытом виде значит практически выкладывать его в открытый доступ. Ну и в дополнение SQL-injection возможен (например, если вместо пароля я введу что-то типа "aaa OR 1=1". Посмотри какой запрос тогда получится А хеш передавать достаточно безопасно, т.к. он не реверсабл, хотя при перехвате тоже позволяет зайти в БД. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
tinky (01.10.2015)
|