Ошибка: 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 с моей локальной машины?

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

Ответы

Ответ 1

  • Удалить или комментировать 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 PRIVILEGES;

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

Ответ 2

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

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

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

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

Ответ 6

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

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

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

Ответ 7

У меня та же проблема, и это все шаги, которые я сделал, чтобы решить эту проблему:

  1. Проверьте, используете ли вы правильные учетные данные
  2. используйте эту команду, чтобы убедиться, что вы изменили свой пароль: используйте символы, цифры и буквы (более 10)

    ОБНОВЛЕНИЕ mysql.user SET Password = PASSWORD ('NewPassword') WHERE user = 'username';

  3. убедитесь, что вы комментируете значение старого пароля в /etc/my.cnf
  4. перезапустите службу MySQL, чтобы избежать других проблем