![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка в SQL запросе [D7, XP]
mefodiy © (2010-07-29 13:29:00)Мне нужно получить в зашифрованном виде пароль, введенный пользователем и сравнить его с паролем, который имеется в базе.
В программе делаю запрос в 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 прописать значения) выполняется без ошибок.
В чем тут дело?
mefodiy (2010-07-29 16:35:00) [1]Вопрос решился созданием небольшой функции:
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)
Всем спасибо.
12 (2010-07-29 14:31:00) [2]а параметров нет в этом AnyDAC?
Anatoly Podgoretsky (2010-07-29 14:31:00) [3]> mefodiy (29.07.2010 14:28:06) [6]
В виде хеша.
Но речь не об этом, зачем двойная аутентификация, что делать нечего, лучше
делом заняться.
mefodiy (2010-07-29 14:28:00) [4]
Сколько раз говорить, не храните пароли в базе, храните там hash
Так это не моя таблица "User", а таблица MySql, в которой она хранит имена пользователей и пароли (сам пароль в зашифрованном виде).
Anatoly Podgoretsky (2010-07-29 14:05:00) [5]Разве у MySQL нет своей системы аутентификации и авторизации, что бы так городить велосипед.
Медвежонок Пятачок (2010-07-29 14:03:00) [6]убей, мефодий, колонки в своем ADQuery, созданные в дизайн-тайме.
mefodiy (2010-07-29 14:02:00) [7]Это дает зашифрованное значение введенного пользователем пароля.
Вынужден это делать, так как в базе хранится необратимо зашифрованный пароль.
Потом я сравниваю In_password с Sql_password и, если они совпадают, то разрешаю законнектиться к базе в соответствии с введенными именем и паролем, чтобы действовали прописанные для этого пользователя ограничения
Может есть вариант и получше?
Dennis I. Komarov (2010-07-29 14:01:00) [8]Сколько раз говорить, не храните пароли в базе, храните там hash
12 (2010-07-29 13:41:00) [9]
> PASSWORD(' + QuotedStr(PasswordEdit.Text) + ')
и что это должно дать в итоге?