Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка в 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) + ')

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо