Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.10.24;
Скачать: [xml.tar.bz2];

Вниз

Ошибка в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
2-1280900619
adminwik
2010-08-04 09:43
2010.10.24
Помогите составить алгоритм!


15-1279551120
nobody
2010-07-19 18:52
2010.10.24
Беспричинное выключение или перезакгрузка компьютера


3-1243308557
bdr
2009-05-26 07:29
2010.10.24
Как освободить каталог-базу Paradox?


3-1246622240
amir
2009-07-03 15:57
2010.10.24
ширина колонок в DBGrid


2-1280816013
harsik
2010-08-03 10:13
2010.10.24
При пустом значении для поля вида Lookup





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский