Ошибка MySQL ODBC связи из-за отказа "протокола аутентификации"

У меня был хороший поиск, но я еще не нашел ответа, который позволяет мне исправить эту проблему.

Я пытаюсь подключиться из MS Access к базе данных MySQL 5.2 на удаленном сервере.

Я установил учетную запись пользователя, которая имеет выбор, вставку, обновление, удаление привилегий в рассматриваемой таблице. Однако, когда я пытаюсь подключиться к этой учетной записи, я получаю:

Не удалось подключиться [HY000] [MySQL] [ODBC 5.2 (w) Драйвер] Отключено подключение с использованием старого (до 4.1.1) протокола аутентификации (включена опция client 'secure_auth)

Когда я пытаюсь получить доступ к учетной записи root, соединение работает, что заставляет меня задаться вопросом, почему он возвращает ошибку протокола проверки подлинности, поскольку используется тот же самый драйвер - все это изменение используется учетной записью - так что, конечно, пароль через тот же протокол аутентификации? Почему одна комбинация имени пользователя и пароля возвращает ошибку протокола, но не другую?

Кажется, эта ошибка очень распространена, но я еще не нашел ответа, который дает четкое решение. Вы можете помочь?

Ответ 1

Проблема здесь объясняется двумя параллельными проблемами.

  • На удаленном сервере глобальный параметр OLD_PASSWORDS был установлен в 1 - это означает, что пароли были хэшированы в методе до 4.1.
  • учетная запись root была закодирована в новом методе хэширования, несмотря на глобальную настройку (предположительно, она была введена до того, как этот параметр был установлен), что означает, что ему предоставляется доступ через соединение ODBC, потому что новое хеширование было признано beign.

Глобальный параметр вызвал функцию PASSWORD() в MySQL для хэширования любого введенного значения в старом методе вместо нового метода, как и предполагалось.

Я предположил, что DBA установил OLD_PASSWORDS в 1 по уважительной причине, так как решение, которое я использовал

Установить сеанс old_passwords = 0;   установить пароль для пользователя '@'% '= пароль (' mypassword ');

Использование функции password() ранее не работало, потому что глобальный параметр OLD_PASSWORDS = 1 заставлял его использовать то же хэширование, что и функция OLD_PASSWORD(). Настройка сеанса позволила ему ввести правильный пароль.

Ответ 2

"Когда я установил вместо него 5.1.12, у меня не было проблем"

То же самое! Просто успешно аутентифицирован в MySQL с использованием драйвера ODBC версии 5.1.12. У меня нет идеи, почему MySQL не обеспечивает лучший способ справиться с этой ошибкой с ее новыми драйверами, но я могу подтвердить, что использование драйвера ODBC 5.1.12 работает.

Вот ссылка на страницу установки драйвера 5.1.12 ODBC.

http://dev.mysql.com/downloads/file.php?id=411741

Ответ 3

Я получал такое же сообщение об ошибке, в то время как у моего коллеги не было никаких проблем. Я пытался использовать MySQL ODBC драйвер 5.1.13 (последняя версия GA доступна), и она имела 5.1.12. Когда я установил 5.1.12 вместо этого, у меня не было проблем.