Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Access Denied при коннекте из проги, а через mysql-консоль - нормально!  (Прочитано 11541 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
malor
Опытный

ru
Offline Offline

« : 08-11-2011 10:33 » 

Зарегистрировал в ODBC источник данных. прописал root'a с паролем 123456 и IP удаленного компа. Запустил программу:



Но если коннектится к серваку MySQL через консоль - то данные без проблем получаю:



Из-за чего такое?

WinXP на обоих машинах / mysql-connector-odbc-5.1.8-win32.msi / mysql-5.5.17-win32.msi

* AccessDenied_MySQL.png (17.09 Кб - загружено 1842 раз.)
* mysql_console_connect.png (169.18 Кб - загружено 1545 раз.)
« Последнее редактирование: 14-11-2011 03:55 от RXL » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 08-11-2011 14:06 » 

Обе попытки подключения с одного хоста сделаны? Напомню, что в MySQL имя пользователя состоит из логина и хоста. Если нужно дать права на любой хост, в GRANT и CREATE USER надо вместо хоста указать '%'.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 14-11-2011 02:35 » 

Посмотрите, какой у вас ODBC драйвер для работы с MySQL. Может случиться так, что он предназначен для работы со старой версией MySQL.
http://dev.mysql.com/doc/refman/4.1/en/old-client.html
P.S.
И вы зря не используете QuotedStr вставляя вводимые пользователем данные в запрос.
« Последнее редактирование: 14-11-2011 02:38 от Chaa » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 14-11-2011 03:53 » new

Chaa, на скриншоте: MySQL ODBC 5.1 Driver. Версия сервера свежайшая - 5.5.17.
Данный драйвер будет работать с данным сервером. Для обеспечения функциональности ODBC больше не требуется.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
malor
Опытный

ru
Offline Offline

« Ответ #4 : 14-11-2011 05:27 » 

RXL>>Для обеспечения функциональности ODBC больше не требуется

ODBC-Connector не требуется ?


Chaa>>зря не используете QuotedStr вставляя вводимые пользователем данные в запрос.

QuotedStr() - её будет достаточно при INSERT'ах в базу?

Есть еще какая-то функция QUOTE().
Кузнецов М., Симдянов И. "MySQL 5 в подлиннике", стр. 341.
Цитата
"Экранирует строку str с тем, чтобы получить корректное значение для SQL-выражения. Строка заключается в одинарные кавычки, и каждое вхождение одинарной кавычки ('), обратного слеша (\), значения ASCII-символов nul и <Ctrl>+<Z> ' экранируется обратным слешем"
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 14-11-2011 06:13 » 

malor, требуется. И, судя по скринам, он у тебя есть - версии 5.1.

Подготавливать строку к включению в текст оператора обязательно. Это исключит возможные сбои и уязвимость типа SQL Injection. А еще лучше использовать подстановку.
Функция MySQL тут никак не поможет. Строку надо готовить до подачи серверу.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 14-11-2011 06:15 » 

QuotedStr() - её будет достаточно при INSERT'ах в базу?
Да, достаточно. Вам нужна именно функция Delphi, чтобы получить в итоге корректный SQL-запрос.
Будет что-то вроде:
Код:
SQLText := 'SELECT name FROM user WHERE name=' + QuotedStr(edLogin.Text);
И, как RXL заметил, лучше использовать параметры.
Код:
SQLText := 'SELECT name FROM user WHERE name=:name';
ADOQuery1.ParamByName('name').Value := edLogin.Text;
Пишу по памяти, и в деталях могу ошибаться.
« Последнее редактирование: 14-11-2011 06:20 от Chaa » Записан
malor
Опытный

ru
Offline Offline

« Ответ #7 : 14-11-2011 06:42 » 

А функция "Trim()" тут к месту будет ?

Цитата
SQLText := ' UPDATE user ' +
SET password = MD5(' + QuotedStr(Trim(edPassword.Text)) + ') ' +
WHERE ID = 99
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 14-11-2011 07:07 » 

malor, trim для пароля? А если я использую в пароле пробел?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
malor
Опытный

ru
Offline Offline

« Ответ #9 : 14-11-2011 07:28 » 

Хорошо, у пароля уберем Trim(). Тогда вопрос про все остальные непарольные филды.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 14-11-2011 10:24 » 

Тут тоже самое: если крайний пробел является допустимым - тогда trim вреден. В противном случае trim полезен как исправитель кривизны рук пользователей.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines