Подтвердить что ты не робот

Не удалось подключиться к MySQL 4.1+, используя старую небезопасную аутентификацию

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

Мы используем Symfony 2.5.10, PHP 5.4.44 и MySQL 4.1.20 для нашего проекта.

Когда я пытаюсь войти в систему или какие-либо действия, связанные с подключением к базе данных (например, добавление нового пользователя с помощью команд FOS), я получаю эту ошибку:

SQLSTATE [HY000] [2000] mysqlnd не может подключиться к MySQL 4.1+, используя старую небезопасную аутентификацию. Пожалуйста, используйте инструмент администрирования для reset вашего пароля с помощью команды SET PASSWORD = PASSWORD ('your_existing_password'). Это сохранит новое и более безопасное хэш-значение в mysql.user. Если этот пользователь используется в других сценариях, выполняемых PHP 5.2 или ранее, вам может потребоваться удалить флаг старых паролей из файла my.cnf

Мы уже пробовали установить old_passwords в my.cnf на 0, перезапустить mysql, установить новый пароль для пользователя mysql и снова перезапустить mysql, но все тот же. И всякий раз, когда мы запускаем это в окне запроса:

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

он по-прежнему показывает 16 как длину пароля пользователя, которого мы используем. А также при проверке переменных и настроек сервера mysql old passwords ВКЛ (хотя мы уже установили old_password в 0 в my.cnf).

Что может быть неправильным? Я был бы очень признателен за вашу помощь.

Обновление:. Тем временем мы удаляем пароль пользователя db для нас, чтобы иметь возможность доступа к базе данных. Но я все еще ищу другие решения, поскольку те решения, которые я нашел в сети (например, удаление или комментирование old_passwords=1 в my.cnf, установка old_passwords на 0 и установка нового пароля, а затем перезагрузка), не сработало для меня.

Другое обновление: Обычно решение этой проблемы будет устанавливать old_passwords off в mysql, но затем, как указано в документации PHP,

новая библиотека mysqlnd не считывает конфигурационные файлы mysql (my.cnf/my.ini).

Значит ли это, что установка old_passwords в 0 в my.cnf не нужна? Я до сих пор не нашел решения этой проблемы.

Нужно ли обновление на любой из используемых платформ? Заранее спасибо за помощь.

4b9b3361

Ответ 1

"SET PASSWORD" устарел на сервере MySQL 5.7.6.

Синтаксис, который следует соблюдать для серверов ниже 5.7.6, это

SET PASSWORD [FOR user] = password_option
password_option: {
    PASSWORD('auth_string')
  | OLD_PASSWORD('auth_string')
  | 'hash_string'
}

Синтаксис для серверов 5.7.6 и выше -

SET PASSWORD [FOR user] = password_option
password_option: {
    PASSWORD('auth_string')
  | 'auth_string'
}

Также refer- > http://dev.mysql.com/doc/refman/5.7/en/set-password.html

Ответ 2

Попробуйте это решение

http://laravel.io/forum/04-16-2014-solving-mysqlnd-cannot-connect-to-mysql-41

В соответствии с решением вам просто нужно снова установить пароль и указать, что он будет сохранен в новом формате.

mysql> SET @@session.old_passwords = 0;
Query OK, 0 rows affected (0.00 sec)
SET PASSWORD FOR 'existinguser'@'localhost' = PASSWORD('existingpass');
Query OK, 1 rows affected (0.00 sec);