Ошибка: mysqlnd не может соединиться с MySQL 4.1+, используя старую небезопасную аутентификацию - PullRequest
22 голосов
/ 12 января 2012

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

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

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

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

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

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

Ответы [ 7 ]

39 голосов
/ 12 января 2012
  • Удалить или прокомментировать 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

3 голосов
/ 18 апреля 2014

У меня была проблема, когда старые пароли были включены сервером по умолчанию, поэтому просто НАСТРОЙТЕ ПАРОЛЬ ДЛЯ 'some-user' @ '%' = ПАРОЛЬ ('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;
2 голосов
/ 30 мая 2013

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

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

2 голосов
/ 12 января 2012

Настройте целевой сервер Mysql для разрешения старой небезопасной аутентификации.

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

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

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

0 голосов
/ 10 июня 2019

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

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

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

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

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

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

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

0 голосов
/ 25 октября 2013

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

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

Например:

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