Не удалось подключиться к 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
не нужна? Я до сих пор не нашел решения этой проблемы.
Нужно ли обновление на любой из используемых платформ? Заранее спасибо за помощь.
Ответы
Ответ 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);