PHP с ошибкой MySQL 8.0+: сервер запросил метод аутентификации, неизвестный клиенту

Я использую 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

Как я могу исправить эту проблему?

Я немного поработал с Google. Может это сработает? github.com/laradock/laradock/issues/1392 (не та же проблема, но то же сообщение об ошибке)

Koen Hollander 17.09.2018 11:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
169
1
292 527
8

Ответы 8

Вам необходимо изменить настройки 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

danblack 17.09.2018 11:23

$ user не является допустимой переменной. бесполезно

vincent thorpe 14.06.2019 17:44

Нашел my.cnf на Ubuntu cat /etc/mysql/my.cnf

Marco Floriano 29.10.2019 19:56

Я не вижу этой строки в mysql 8.0 на Ubuntu 19

code8888 28.03.2020 18:51

@ cyber8200 вы всегда можете добавить эту строчку.

michail_w 29.03.2020 20:11

Я не вижу my.cnf в macbook

Akshay Hazari 02.04.2020 22:32

@AkshayHazari Пожалуйста, подпишитесь на эту тему: stackoverflow.com/questions/10757169/…

michail_w 03.04.2020 15:40

@michail_w Да, в конце концов, узнал.

Akshay Hazari 04.04.2020 17:11

Где находится файл my.cnf в Windows 7?

Clarity 09.11.2020 06:48

@Clarity, это зависит от программного обеспечения, которое вы используете. Сначала вы должны найти корневой каталог вашего MySQL или MariaDB. Обычно он устанавливается в Program Files, но может отличаться, если вы используете такие пакеты, как XAMP или WAMP.

michail_w 12.11.2020 11:41

У меня работает, спасибо

Simbu Dev 12.01.2021 18:27

Это сработало для меня.

mbouzahir 05.02.2021 00:31

Это было для меня решением. Тот, за который проголосовали больше всего, не сработал.

divil 11.03.2021 14:38

Отличное решение ... !!!

Dhaduk Mitesh 11.04.2021 09:37

@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

Спасибо, это был правильный подход для меня!

Timothy Kruger 25.02.2019 13:51

У меня это сработало при работе с MySQL 8.0+. Я столкнулся с этой проблемой с веб-установщиком Magento 2.3.2. Спасибо!

philcollin_us 01.10.2019 19:18

Спасибо, пробовал другие. Только это сработало для меня.

Orion 24.10.2019 19:10

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

lupguo 27.10.2019 17:12

Я получил для этого ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'. Мой пароль - '' (пустой)

xjcl 03.06.2020 13:41

Это сработало для меня в MySQL 8 с PHP 7.1.2

Kasun Rajapaksha 07.07.2020 12:00

Спасибо! Это сработало для меня в MySQL 8.0.21 с PHP 7.2

Woppi 05.10.2020 11:04

Не работает для 8.0.20. Команда ALTER USER выполнена успешно, но предупреждение по-прежнему отображается.

Clarity 09.11.2020 06:35

Спасибо за это. Я добавил [mysqld] default-authentication-plugin = mysql_native_password в файл конфигурации mysql (8), но это помогло.

marius-ciclistu 25.12.2020 00:26

Спасибо! Работал у меня на MySQL 8.0.21 и PHP 7.3.13

Saurabh 11.01.2021 19:47

Это сработало для меня, НО с одним добавленным предостережением в macOS Big Sur, MySQL 8.0.15: ALTER USER CURRENT_USER () IDENTIFIED WITH mysql_native_password BY 'password';

Numabyte 23.01.2021 07:12

Спасибо, ты спас мне день

Kavindu Pasan Kavithilaka 08.02.2021 15:09

ПО ДАЕТ МНЕ ОШИБКУ

user14525201 12.02.2021 22:33

Прошло первое сообщение об ошибке, теперь появляется следующее: mysqli_real_connect (): (HY000 / 1045): Доступ запрещен для пользователя 'root' @ 'localhost' (с использованием пароля: ДА)

MC9000 16.08.2021 08:59

Я пробовал много способов, но у меня работает только это

спасибо за обходной путь

проверьте свой .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
  • Пользователь -> корень
  • пароль -> корень

надеюсь, это поможет

это решение сработало для меня как прелесть. Ты тоже спас мне день! то, что я сделал дополнительно, заключалось в том, чтобы форкнуть mysql docker и заключить решение в сборку контейнера mysql: github.com/cybalex/mysql/commit/…

Oleksii Zymovets 20.08.2019 00:27

@OleksiiZymovets, это прекрасно, что ты сделал

Francesco Taioli 21.08.2019 10:26

Спасибо. это очень помогает. Мне просто нужен последний запрос на изменение, чтобы запустить его на docker mysql

Ankit 03.10.2019 11:43

Спасибо, чувак, теперь для меня это нормально.

M E S A B O 19.01.2020 21:49

На сегодняшний день это единственное решение, которое, как я обнаружил, работает над Docker. Спасибо!

SOROMEED 28.02.2020 23:00
[HY000][1396] Operation ALTER USER failed for 'default'@'%' бывает на последней переделке ... есть идеи?
Chris Stage 03.04.2020 17:55

@TaioliFrancesco спасибо за ваш ответ, он работает, но должны ли мы запускать эти запросы каждый раз, когда запускаем контейнер mysql? есть ли способ сделать это через docker compose?

SlimenTN 23.05.2020 13:56

@SlimenTN нет, только один раз, а затем контейнер запомнит настройку mysql

Francesco Taioli 24.05.2020 10:14

@TaioliFrancesco хорошо, но вы знаете, что при автоматизации вещей с помощью инструмента CI / CD нам может потребоваться сбросить контейнеры и запустить новые, останутся ли настройки такими же?

SlimenTN 24.05.2020 10:32

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

Francesco Taioli 24.05.2020 14:21

Могу ли я поставить пустой пароль для root и как это сделать?

F. Dakia 15.04.2021 10:25

@ F.Dakia, я еще не пробовал. Одно решение могло бы запустить первые две команды и изменить третью, например: ALTER USER 'default' @ '%' IDENTIFIED WITH mysql_native_password BY '';

Francesco Taioli 16.04.2021 18:11

Не работай на меня @TaioliFrancesco. Спасибо

F. Dakia 19.04.2021 14:46

Если вы можете перестроить контейнер с вашей базой данных MySQL, я бы рекомендовал проверить это решение - github.com/laradock/laradock/issues/1392#issuecomment-563011‌ 691. В качестве примера вы можете проверить, как laradock сделал настройку для MySQL - github.com/laradock/laradock/tree/master/mysql.

Scofield 07.07.2021 20:29

Я использую 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"?

Timothy Kruger 25.02.2019 09:41

ларадок / mysql / my.cnf

sanjaya 25.02.2019 17:44
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;

Это решение решает мою проблему, но мне не нужно сбрасывать привилегии.

sianipard 14.07.2020 17:18

Ни один из ответов здесь не помог мне. Что мне нужно было сделать:

  1. Повторно запустите установщик.
  2. Выберите быстрое действие «переконфигурировать» рядом с продуктом «Сервер MySQL».
  3. Просматривайте варианты, пока не дойдете до метода аутентификации и выберите «Использовать устаревший метод аутентификации».

После этого работает нормально.

Если вы использовали установщик и используете классический метод имени пользователя и пароля для подключения к своей базе данных, этот метод - лучший вариант.

Matt Wohler 16.05.2019 17:47

Самый чистый способ, сэр!

Justine M. 29.03.2020 03:47

Другие вопросы по теме