Ошибка: mysqlnd не может подключиться к MySQL 4.1+, используя старую небезопасную аутентификацию

Я получаю следующую ошибку:

Не удалось подключиться к базе данных: mysqlnd не может подключиться к MySQL 4.1+, используя старую небезопасную аутентификацию. Используйте инструмент администрирования для сброса пароля с помощью команды SET PASSWORD = PASSWORD('your_existing_password') .

Это сохранит новое и более безопасное хэш-значение в mysql.user . Если этот пользователь используется в других сценариях, выполняемых PHP 5.2 или ранее, вам может потребоваться удалить флаг старых паролей из файла my.cnf

Я использую PHP 5.3.8 и MySQL 5.5.16 на своей локальной машине, а мой хост (медиа-храм) работает под управлением PHP 5.3 MySQL 5.0.51a. Версия на реальном сервере старше, чем у моей машины.

Как исправить эту ошибку и подключиться к MySQL с моей локальной машины?

Я знаю, что есть похожие сообщения, но я все их пробовал, и никто не работает.

  • Удалить или прокомментировать old_passwords = 1 в my.cnf

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

Хэши старого пароля – 16 символов, новые – 41 символ.

  • Подключитесь к базе данных и выполните следующий запрос:

     SELECT user, Length(`Password`) FROM `mysql`.`user`; 

Это покажет вам, какие пароли находятся в старом формате, например:

 + ---------- + -------------------- +
 |  пользователь |  Длина (`Пароль`) |
 + ---------- + -------------------- +
 |  корень |  41 |
 |  корень |  16 |
 |  user2 |  16 |
 |  user2 |  16 |
 + ---------- + -------------------- + 

Обратите внимание, что каждый пользователь может иметь несколько строк (по одному для каждой отдельной спецификации узла).

Чтобы обновить пароль для каждого пользователя, выполните следующие действия:

 UPDATE mysql.user SET Password = PASSWORD('password') WHERE user = 'username'; 

Наконец, привилегии flush:

 FLUSH PRIVILEGES; 

Источник: Как исправить «mysqlnd не может подключиться к MySQL 4.1+ с использованием старой проверки подлинности» на PHP5.3

У меня была проблема, когда старые пароли были разрешены сервером по умолчанию, поэтому простой SET PASSWORD FOR 'some-user' @ '%' = PASSWORD ('XXXX'); не будет работать (по причине старого программного обеспечения и наследия, с которыми я не пойду ….)

Решение :

 SET old_passwords = 0; SET PASSWORD FOR 'some-user'@'%' = PASSWORD ('XXXX'); FLUSH PRIVILEGES; 

Детали :

Выполнение этого как зарегистрированного пользователя

 SET Password = PASSWORD('password') 

Просто не работает

Например, здесь можно проверить

 SHOW CREATE TABLE `mysql`.`user`; 

Пароль не переключается с

 | HOST | USER | PASS | 

СТАРЫЙ ПАРОЛЬ

 | % | some-user | 7fa559aa33d844b4 | 

ЧТО Я ХОЧУ, ЭГ НОВЫЙ ПАРОЛЬ

 | % | some-user | *CF04AECA892176E6C0C8206F965C03374D12F93E | 

Поэтому я просмотрел переменные для старых паролей

 SHOW VARIABLES; ... old_passwords = ON ... 

Так что в основном мне пришлось установить mysql-сервер var first на old_password = OFF, например, это сработало для меня

 SET old_passwords = 0; SET PASSWORD FOR 'some-user'@'%' = PASSWORD ('XXXX'); FLUSH PRIVILEGES; 

У меня была та же проблема, которая пыталась подключиться к mediatemple external-db через IIS на моей локальной машине Windows. Обновление моего пароля для конкретного пользователя db решило проблему подключения к базе данных.

В центре (mt) Account Center просто обновите пароль. Я использовал один и тот же пароль, и он решил все мои проблемы.

Настройте целевой сервер Mysql, чтобы разрешить старую небезопасную аутентификацию.

http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_old-passwords

Просто в файле my.cnf на целевом сервере Mysqld закомментируйте old_passwords.

Возможно, есть способ получить сборку PHP (или создать ее самостоятельно), которая использует совместимый (старый) режим auth.

Я впервые столкнулся с этой ошибкой с db Media Temple на сетевом сервере.

Проблема была вызвана тем, что я использовал пароль для пользователя базы данных, который все еще находился в своем старом формате пароля. Новый формат требует более 10 символов, специальных символов, номера и т. Д. …

Я создал новый пользователь базы данных и пароль в новом формате, и он работал нормально.

У меня была эта проблема, когда я импортировал базу данных из старой версии MySQL. Самая большая проблема – это мешало мне подключиться к MySQL с моим пользователем root, поэтому мне пришлось reset the root password , выполнив следующие инструкции:

  • Как восстановить пароль root

После этого я смог применить исправление, данное выше.

Например:

 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');