Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.10.24;
Скачать: CL | DM;

Вниз

Ошибка в SQL запросе   Найти похожие ветки 

 
mefodiy   (2010-07-29 13:29) [0]

Мне нужно получить в зашифрованном виде пароль, введенный пользователем и сравнить его с паролем, который имеется в базе.
В программе делаю запрос в ADQuery (AnyDAC):
SELECT PASSWORD(" + QuotedStr(PasswordEdit.Text) + ") AS     In_password,Password AS Sql_password" +
" FROM MySql.User" +
" WHERE User=" +QuotedStr(UserComboBox.Text)
который приводит к ошибке:
Variable length column[In_password] overflow. Value length - [42], column maximum length - [41].
Этот же запрос MySQL Query Browser (если вместо PasswordEdit.Text  и UserComboBox.Text прописать значения) выполняется без ошибок.
В чем тут дело?


 
12 ©   (2010-07-29 13:41) [1]


> PASSWORD(" + QuotedStr(PasswordEdit.Text) + ")

и что это должно дать в итоге?


 
Dennis I. Komarov ©   (2010-07-29 14:01) [2]

Сколько раз говорить, не храните пароли в базе, храните там hash


 
mefodiy   (2010-07-29 14:02) [3]

Это дает зашифрованное значение введенного пользователем пароля.
Вынужден это делать, так как в базе хранится необратимо зашифрованный пароль.
Потом я сравниваю In_password с Sql_password и, если они совпадают, то разрешаю законнектиться к базе в соответствии с введенными именем и паролем, чтобы действовали прописанные для этого пользователя ограничения
Может есть вариант и получше?


 
Медвежонок Пятачок ©   (2010-07-29 14:03) [4]

убей, мефодий, колонки в своем ADQuery, созданные в дизайн-тайме.


 
Anatoly Podgoretsky ©   (2010-07-29 14:05) [5]

Разве у MySQL нет своей системы аутентификации и авторизации, что бы так городить велосипед.


 
mefodiy   (2010-07-29 14:28) [6]

Сколько раз говорить, не храните пароли в базе, храните там hash
Так это не моя таблица "User", а таблица MySql, в которой она хранит имена пользователей и пароли (сам пароль в зашифрованном виде).


 
12 ©   (2010-07-29 14:31) [7]

а параметров нет в этом AnyDAC?


 
Anatoly Podgoretsky ©   (2010-07-29 14:31) [8]

> mefodiy  (29.07.2010 14:28:06)  [6]

В виде хеша.
Но речь не об этом, зачем двойная аутентификация, что делать нечего, лучше
делом заняться.


 
mefodiy   (2010-07-29 16:35) [9]

Вопрос решился созданием небольшой функции:

CREATE FUNCTION MyPassword (f_password CHAR(41)) RETURNS CHAR(41)
            "BEGIN"
            "  RETURN PASSWORD(f_password);"
            "END";

и заменой запроса на

SELECT MyPassword(" + QuotedStr(PasswordEdit.Text) + ") AS     In_password,Password AS Sql_password" +
" FROM MySql.User" +
" WHERE User=" +QuotedStr(UserComboBox.Text)

Всем спасибо.



Страницы: 1 вся ветка

Текущий архив: 2010.10.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
15-1279657775
Юрий
2010-07-21 00:29
2010.10.24
С днем рождения ! 21 июля 2010 среда


6-1227962984
dmitry_12_08_73
2008-11-29 15:49
2010.10.24
Выбор способа передачи данных с помощью протокола HTTP


15-1279398576
Юрий
2010-07-18 00:29
2010.10.24
С днем рождения ! 18 июля 2010 воскресенье


15-1279545359
Свифт
2010-07-19 17:15
2010.10.24
Англоязычные радиостанции


2-1280316293
Danz1
2010-07-28 15:24
2010.10.24
СУБД в доп.потоке