Я использую MySQL версии 8 на PHP 7.0.
Когда я пытаюсь подключиться к своей базе данных из PHP, я получаю следующую ошибку:
Connect Error: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
PHP может показать эту ошибку
Warning: mysqli_connect(): The server requested authentication method unknown to the client [caching_sha2_password] in D:\xampp\htdocs\reg\server.php on line 10
Как я могу исправить эту проблему?






Вам необходимо изменить настройки MySQL. Отредактируйте файл my.cnf и поместите этот параметр в раздел mysqld:
[mysqld]
default_authentication_plugin= mysql_native_password
Затем выполните следующую команду:
FLUSH PRIVILEGES;
Вышеуказанная команда приведет к изменению механизма аутентификации по умолчанию.
а затем воссоздайте пользователей. ALTER USER $user IDENTIFIED WITH mysql_native_password BY 'passwd' (ссылка Страница руководства ALTER USER
$ user не является допустимой переменной. бесполезно
Нашел my.cnf на Ubuntu cat /etc/mysql/my.cnf
Я не вижу этой строки в mysql 8.0 на Ubuntu 19
@ cyber8200 вы всегда можете добавить эту строчку.
Я не вижу my.cnf в macbook
@AkshayHazari Пожалуйста, подпишитесь на эту тему: stackoverflow.com/questions/10757169/…
@michail_w Да, в конце концов, узнал.
Где находится файл my.cnf в Windows 7?
@Clarity, это зависит от программного обеспечения, которое вы используете. Сначала вы должны найти корневой каталог вашего MySQL или MariaDB. Обычно он устанавливается в Program Files, но может отличаться, если вы используете такие пакеты, как XAMP или WAMP.
У меня работает, спасибо
Это сработало для меня.
Это было для меня решением. Тот, за который проголосовали больше всего, не сработал.
Отличное решение ... !!!
@mohammed, это обычно связано с плагином аутентификации, который использует ваша база данных mysql.
По умолчанию и по какой-то причине плагин по умолчанию для mysql 8 - это auth_socket. В большинстве случаев приложения ожидают входа в вашу базу данных с использованием пароль.
Если вы еще не изменили свой плагин аутентификации mysql по умолчанию, вы можете сделать это с помощью:
1. Войдите как root в mysql
.
2. Запустите эту команду sql:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'password';
Замените «пароль» своим паролем root. В случае, если ваше приложение не входит в вашу базу данных с пользователем root, замените пользователя root в приведенной выше команде на пользователя, которого использует ваше приложение.
Digital Ocean рассказывает об этом подробнее здесь Установка Mysql
Спасибо, это был правильный подход для меня!
У меня это сработало при работе с MySQL 8.0+. Я столкнулся с этой проблемой с веб-установщиком Magento 2.3.2. Спасибо!
Спасибо, пробовал другие. Только это сработало для меня.
Основная причина этой проблемы заключается в том, что поддержка подключаемого модуля аутентификации Mysql по умолчанию была изменена в версии 8.0 MariaDB. Например, список подключаемых модулей аутентификации Mysql, поддерживаемых 'PHP7.3', можно увидеть с помощью функции 'phpinfo ()': `mysqlnd debug_trace, auth_plugin_mysql_native_password auth_plugin_mysql_clear_password, auth_plugin_sha256_password`. Поэтому измените механизм подключаемого модуля аутентификации в учетной записи с ограниченным доступом сервера Mysql на sha256_password или mysql_native_password: ALTER USER 'root' @ '%' IDENTIFIED WITH sha256_password BY 'password';
Я получил для этого ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'. Мой пароль - '' (пустой)
Это сработало для меня в MySQL 8 с PHP 7.1.2
Спасибо! Это сработало для меня в MySQL 8.0.21 с PHP 7.2
Не работает для 8.0.20. Команда ALTER USER выполнена успешно, но предупреждение по-прежнему отображается.
Спасибо за это. Я добавил [mysqld] default-authentication-plugin = mysql_native_password в файл конфигурации mysql (8), но это помогло.
Спасибо! Работал у меня на MySQL 8.0.21 и PHP 7.3.13
Это сработало для меня, НО с одним добавленным предостережением в macOS Big Sur, MySQL 8.0.15: ALTER USER CURRENT_USER () IDENTIFIED WITH mysql_native_password BY 'password';
Спасибо, ты спас мне день
ПО ДАЕТ МНЕ ОШИБКУ
Прошло первое сообщение об ошибке, теперь появляется следующее: mysqli_real_connect (): (HY000 / 1045): Доступ запрещен для пользователя 'root' @ 'localhost' (с использованием пароля: ДА)
Я пробовал много способов, но у меня работает только это
спасибо за обходной путь
проверьте свой .env
MYSQL_VERSION=latest
затем введите эту команду
$ docker-compose exec mysql bash
$ mysql -u root -p
(войдите как root)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';
затем перейдите в phpmyadmin и войдите как:
надеюсь, это поможет
это решение сработало для меня как прелесть. Ты тоже спас мне день! то, что я сделал дополнительно, заключалось в том, чтобы форкнуть mysql docker и заключить решение в сборку контейнера mysql: github.com/cybalex/mysql/commit/…
@OleksiiZymovets, это прекрасно, что ты сделал
Спасибо. это очень помогает. Мне просто нужен последний запрос на изменение, чтобы запустить его на docker mysql
Спасибо, чувак, теперь для меня это нормально.
На сегодняшний день это единственное решение, которое, как я обнаружил, работает над Docker. Спасибо!
[HY000][1396] Operation ALTER USER failed for 'default'@'%' бывает на последней переделке ... есть идеи?
@TaioliFrancesco спасибо за ваш ответ, он работает, но должны ли мы запускать эти запросы каждый раз, когда запускаем контейнер mysql? есть ли способ сделать это через docker compose?
@SlimenTN нет, только один раз, а затем контейнер запомнит настройку mysql
@TaioliFrancesco хорошо, но вы знаете, что при автоматизации вещей с помощью инструмента CI / CD нам может потребоваться сбросить контейнеры и запустить новые, останутся ли настройки такими же?
Я новичок в ci / cd, поэтому я не тот человек, чтобы спрашивать, но я думаю, что если контейнер такой же, конфигурация останется, в противном случае, если контейнер будет сбрасываться и перестраиваться при каждом новом экземпляре конвейера, конфигурация не останется прежней
Могу ли я поставить пустой пароль для root и как это сделать?
@ F.Dakia, я еще не пробовал. Одно решение могло бы запустить первые две команды и изменить третью, например: ALTER USER 'default' @ '%' IDENTIFIED WITH mysql_native_password BY '';
Не работай на меня @TaioliFrancesco. Спасибо
Если вы можете перестроить контейнер с вашей базой данных MySQL, я бы рекомендовал проверить это решение - github.com/laradock/laradock/issues/1392#issuecomment-563011 691. В качестве примера вы можете проверить, как laradock сделал настройку для MySQL - github.com/laradock/laradock/tree/master/mysql.
Я использую Laravel Lumen для создания небольшого приложения. Для меня это было потому, что у меня не было DB_USERNAME, определенного в моем файле .env.
DB_USERNAME=root
Установка этого решила мою проблему.
В файле my.cnf проверьте ниже 2 шага.
проверьте это значение -
old_passwords = 0;
должно быть 0.
проверьте это также -
[mysqld] default_authentication_plugin = mysql_native_password Другой значение для проверки - убедиться
Раздел [mysqld] должен быть таким.
Где найти файл "my.cnf"?
ларадок / mysql / my.cnf
preferences -> mysql -> initialize database -> use legacy password encryption(instead of strong) -> entered same password
как мой файл config.inc.php, перезапустил сервер apache, и он сработал. Я все еще относился к этому с подозрением, поэтому я остановил сервер apache и mysql и снова запустил их, и теперь он работает.
Столкнувшись с той же проблемой, я не смог запустить контейнер docker wordpress с mysql версии 8, поскольку его механизм аутентификации по умолчанию - caching_sha2_password вместо mysql_native_password.
Чтобы решить эту проблему, мы должны сбросить механизм аутентификации по умолчанию на mysql_native_password.
Найдите файл my.cnf в вашей установке mysql, обычно на Linux-машине он находится в следующем месте - / etc / mysql
Отредактируйте файл my.cnf и добавьте следующую строку под заголовком [mysqld]
default_authentication_plugin = mysql_native_password
Сохраните файл, затем войдите в командную строку mysql, используя пользователя root
запустите команду FLUSH PRIVILEGES;
Это решение решает мою проблему, но мне не нужно сбрасывать привилегии.
Ни один из ответов здесь не помог мне. Что мне нужно было сделать:
После этого работает нормально.
Если вы использовали установщик и используете классический метод имени пользователя и пароля для подключения к своей базе данных, этот метод - лучший вариант.
Самый чистый способ, сэр!
Я немного поработал с Google. Может это сработает? github.com/laradock/laradock/issues/1392 (не та же проблема, но то же сообщение об ошибке)