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

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

Не удалось подключиться к базе данных: mysqlnd не может подключиться к MySQL 4.1+, используя старую небезопасную аутентификацию. Пожалуйста, используйте инструмент администрирования для reset вашего пароля с помощью команды 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`;
    

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

+----------+--------------------+
| user     | Length(`Password`) |
+----------+--------------------+
| root     |                 41 |
| root     |                 16 |
| user2    |                 16 |
| user2    |                 16 |
+----------+--------------------+

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

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

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

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

FLUSH PRIVILEGES;

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

36
ответ дан 12 янв. '12 в 10:16
источник

У меня возникла проблема, когда старые пароли были разрешены сервером по умолчанию, поэтому простой 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 в old_password = OFF, например, это сработало для меня

SET old_passwords = 0;
SET PASSWORD FOR 'some-user'@'%' = PASSWORD ('XXXX');
FLUSH PRIVILEGES;
3
ответ дан 18 апр. '14 в 11:49
источник

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

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

2
ответ дан 30 мая '13 в 8:41
источник

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

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

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

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

1
ответ дан 12 янв. '12 в 10:02
источник

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

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

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

0
ответ дан 29 июля '16 в 21:51
источник

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

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

например. по:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
0
ответ дан 25 окт. '13 в 14:43
источник