PhpMyAdmin в MySQL 8.0

ОБНОВИТЬ
Новые версии phpMyAdmin решили эту проблему. Я успешно протестировал phpMyAdmin 5.0.1


Я установил сервер MySQL 8.0 и phpMyAdmin, но когда я пытаюсь получить к нему доступ из браузера, возникают следующие ошибки:

#2054 - The server requested authentication method unknown to the client
mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password]
mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client

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

Но я ничего не знаю о самом продвинутом драйвере и настройке подключения.

Кто-нибудь сталкивался с такой же проблемой и решил ее? : D

С какой версией PHP вы работаете? Могу поспорить, что это проблема на уровне драйвера, поскольку phpMyAdmin использует mysqli.

tadman 20.04.2018 22:23

Версия PHP 7.0.27-0

Lucas Noetzold 23.04.2018 12:45
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
79
2
165 427
18
Перейти к ответу Данный вопрос помечен как решенный

Ответы 18

В новом MySQL 8.0.11 в качестве метода аутентификации по умолчанию используется caching_sha2_password. Я думаю, что phpMyAdmin не может понять этот метод аутентификации. Вам необходимо создать пользователя с одним из старых методов аутентификации, например. CREATE USER xyz@localhost IDENTIFIED WITH mysql_native_password BY 'passw0rd'.

Подробнее здесь https://dev.mysql.com/doc/refman/8.0/en/create-user.html и здесь https://dev.mysql.com/doc/refman/8.0/en/authentication-plugins.html

Еще одна идея: пока phpmyadmin и другие инструменты php не работают с ним, просто добавьте эту строку в свой файл /etc/mysql/my.cnf

default_authentication_plugin = mysql_native_password

Смотрите также: Ссылка на MySQL

Я знаю, что это проблема безопасности, но что делать, если инструменты не работают с caching_sha2_password?

Что ж, когда я думаю об этом, это не совсем проблема безопасности, потому что до v8 он всегда использовал mysql_native_password

sneaky 21.04.2018 23:21

Этот параметр ini даже не помогает с MySQL 8.0.11 GA и последней версией PHPMyAdmin 4.8.0.1. PHPMyAdmin по-прежнему выдает ошибку: mysqli_real_connect (): сервер запросил метод аутентификации, неизвестный клиенту [caching_sha2_password]

Slava 23.04.2018 17:04

Что ж, похоже, что изменения не приняли. Вы перезапустили сервер MySQL и уверены, что другого файла конфигурации нет?

sneaky 23.04.2018 17:09

Да, перезапущен сервис, перезапущен сервер, произведена новая установка MySQL 8.0.11, где вы можете установить метод аутентификации в пользовательском интерфейсе установщика. Не помогает. Мне удалось подключиться к только что установленному серверу, и я увидел "caching_sha2_password", выбранный по умолчанию для root, в разделе "Пользователи и привилегии" в Workbench 8.0.11-rc. Я предполагаю, что это проблема. Настройка для каждого пользователя, вероятно, переопределяет конфигурацию default_authentication_plugin. И по умолчанию для root установлено значение sha2 независимо от того, что во время установки.

Slava 23.04.2018 17:50

Извините, не видел вашего ответа. Если вы обновились с более ранней версии, возможно, вам придется обновить структуру таблицы? Это описано в dev.mysql.com/doc/refman/8.0/en/upgrading-strategies.html Я только что запустил, как описано в 8 и 9, безопасный сервер и запустил команду mysql_upgrade. Я долго ...

sneaky 05.05.2018 09:57

Как упоминалось в @kgr, MySQL 8.0.11 внес некоторые изменения в метод аутентификации.

Я открыл отчет об ошибке phpMyAdmin: https://github.com/phpmyadmin/phpmyadmin/issues/14220.

MySQL 8.0.4-rc у меня работал нормально, и я думаю, что MySQL нелепо вносить такие изменения в выпуск исправлений.

Я решил эту проблему, выполнив следующие действия:

  1. Добавьте default_authentication_plugin = mysql_native_password в
    [mysqld] раздел my.cnf
  2. Введите mysql и создайте нового пользователя, выполнив что-то вроде CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
  3. Предоставляйте привилегии по мере необходимости. Например. GRANT ALL PRIVILEGES ON * . * TO 'root'@'localhost';, а затем FLUSH PRIVILEGES;
  4. Войдите в phpmyadmin с новым пользователем

Я попытался просто создать пользователя с mysql_native_password, но mysqli все равно не смог подключиться. Вы должны изменить default_authentication_plugin, чтобы это работало, как описано в сообщении user1706897. Я добавляю голосование к этому ответу.

PeteH 09.06.2018 17:33

@PeteH - вы перезапустили mysql deamon?

sneaky 25.08.2018 13:03

Не думаю, что перезапустил демон, но это не повредит.

PeteH 27.08.2018 15:57

Я решил эту проблему, выполнив следующие действия:

  1. Войдите в системные настройки -> mysql

  2. Выберите «Инициализировать базу данных» и введите новый пароль root, выбрав «Использовать шифрование устаревшего пароля».

  3. Войдите в phpmyadmin с новым паролем.

OP не указал, что они находятся на Mac; однако он сказал нам, что установил с помощью apt-get, то есть Linux. Но ваш ответ для MacOS

Peter 12.07.2018 09:16
Ответ принят как подходящий

Войдите в консоль MySQL с пользователем корень:

root@9532f0da1a2a:/# mysql -u root -pPASSWORD

и измените плагин аутентификации с паролем там:

mysql> ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
Query OK, 0 rows affected (0.08 sec)

Дополнительную информацию о подключаемом модуле предпочтительной аутентификации можно найти в Справочном руководстве по MySQL 8.0.

https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password

Он отлично работает в среде докерized:

docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -p 3306:3306 -d mysql:latest

docker exec -it mysql bash

mysql -u root -pPASSWORD

ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';

exit

exit

docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest

Итак, теперь вы можете войти в phpMyAdmin на http: // локальный: 8080 с root / PASSWORD


MySQL / MySQL-сервер

Если вы используете образ докера MySQL / MySQL-сервер

Но помните, что это просто «быстрое и грязное» решение в среде разработки. Менять Плагин предпочтительной аутентификации MySQL неразумно.

docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -e MYSQL_ROOT_HOST=% -p 3306:3306 -d mysql/mysql-server:latest
docker exec -it mysql mysql -u root -pPASSWORD -e "ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';"
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest

Обновлено решение от 10.04.2018

Измените плагин аутентификации MySQL по умолчанию, раскомментировав параметр default_authentication_plugin=mysql_native_password в /etc/my.cnf.

Используйте на свой риск

docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -e MYSQL_ROOT_HOST=% -p 3306:3306 -d mysql/mysql-server:latest
docker exec -it mysql sed -i -e 's/# default-authentication-plugin=mysql_native_password/default-authentication-plugin=mysql_native_password/g' /etc/my.cnf
docker stop mysql; docker start mysql
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest

Обновленный способ обхода 30.01.2019

docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -e MYSQL_ROOT_HOST=% -p 3306:3306 -d mysql/mysql-server:latest
docker exec -it mysql sed -i -e 's/# default-authentication-plugin=mysql_native_password/default-authentication-plugin=mysql_native_password/g' /etc/my.cnf
docker exec -it mysql mysql -u root -pPASSWORD -e "ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';"
docker stop mysql; docker start mysql
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest

default_authentication_plugin

Будьте здоровы. Я потратил много времени, пытаясь понять это. Кстати, в MacOS при использовании phpMyAdmin с Brew мне нужно было запустить команду: ALTER USER root @ localhost IDENTIFIED WITH mysql_native_password BY 'secret' (в противном случае я получил "ERROR 1396 (HY000): Operation ALTER USER failed for ' корень'@'%')

user64141 14.07.2018 19:03

Я попробовал эти уловки, и все заработало. Затем я переместил папку mysql, и теперь ошибка вернулась, и она исчезла. Что еще каб может быть не так?

Kjeld Flarup 30.09.2018 03:10

Пожалуйста, попробуйте мое обновленное решение. Что вы конкретно имеете в виду "переместили папку mysql"?

András Szabácsik 04.10.2018 11:30

После ввода ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD'; я получаю следующую ошибку: ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'. Что я должен здесь исправить, так как я не разрешаю удаленный доступ root %?

Pathros 19.10.2018 20:10

@Pathros вы должны ИЗМЕНИТЬ пользователя root @ 'localhost', ИДЕНТИФИЦИРОВАННЫЙ mysql_native_password ПО 'ПАРОЛЮ'; ... так что укажите localhost напрямую

frin 21.10.2018 17:10

После выполнения этой команды мне кажется, что я больше не могу войти в систему с помощью инструментов MySQL (например, WorkBench и т. д.). Есть ли способ отменить это, изменив файл конфигурации?

David Sopko 10.12.2018 14:48

Отличный ответ! Есть ли способ использовать MYSQL_ROOT_PASSWORD env. переменной в команде «изменить пользователя» вместо использования текстового пароля в командной строке?

Michal Foksa 27.03.2019 11:18

Отлично работает! Однако для его работы пришлось добавить root @ 'localhost' (с использованием Fedora 30)

Maroun Melhem 26.09.2019 15:59

Эти конфигурации не сохранятся, если контейнер уйдет, поскольку контейнеры недолговечны!

pelican 13.01.2020 19:10

Для тех, кто пытался добавить пользователю localhost, но все же получил сообщение ERROR 1396, попробуйте сделать FLUSH PRIVILEGES; (Источник: stackoverflow.com/questions/5555328/…)

Adam Pearlman 14.01.2020 21:56

Как многие указывали в других ответах, изменение плагина аутентификации по умолчанию MySQL на собственный делает трюк.

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

Я зашел в систему

preferences -> mysql -> initialize database -> use legacy password encryption(instead of strong) -> entered same password

как мой файл config.inc.php, перезапустил сервер apache, и он сработал. Я все еще относился к этому с подозрением, поэтому я остановил сервер apache и mysql и снова запустил их, и теперь он работает.

Я решил это с MySQL 8.0.12, выполнив:

mysql_upgrade -u root

Если вы используете официальный контейнер докеров mysql, есть простое решение:

Добавьте следующую строку в службу создания докеров:

command: --default-authentication-plugin=mysql_native_password

Пример конфигурации:

mysql:
     image: mysql:8
     networks:
       - net_internal
     volumes:
       - mysql_data:/var/lib/mysql
     environment:
       - MYSQL_ROOT_PASSWORD=root
       - MYSQL_DATABASE=db
     command: --default-authentication-plugin=mysql_native_password

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

Для этого войдите в консоль mysql с помощью этого

mysql -u {username} -p{password}

После этого я просто выполняю один запрос, как показано ниже: -

ALTER user '{USERNAME}'@'localhost' identified with mysql_native_password by '{PASSWORD}';

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

2 дня искал что-то, чтобы исправить мою проблему, и этот ответ, наконец, сделал это за меня. Mac Mojave с использованием mysql 8 и php 7.2. Спасибо!

SlickRemix 14.02.2019 19:03

Я все еще не могу заставить это работать. Я выполнил этот запрос, но все еще не могу войти в систему. Я получаю ту же ошибку метода аутентификации. Запрос мне ничего не меняет? mysql> ALTER user 'root'@'localhost' identified with mysql_native_password by '<root pw>'; Query OK, 0 rows affected (0.01 sec)

J. Scott Elblein 09.07.2019 21:05

хорошо, оказывается, мне пришлось использовать '%' вместо 'localhost', и он все равно скажет, что затронуты 0 строк, но это изменит его.

J. Scott Elblein 09.07.2019 21:35

Я решил свою проблему в основном с ответом Андраша:

1- Войдите в консоль MySQL с пользователем root:

root@9532f0da1a2a:/# mysql -u root -pPASSWORD

И введите пароль root для авторизации.

2- Я создал нового пользователя:

mysql> CREATE USER 'user'@'hostname' IDENTIFIED BY 'password';

3- Предоставьте новому пользователю все права:

mysql> GRANT ALL PRIVILEGES ON *.* To 'user'@'hostname';

4- Измените плагин аутентификации с паролем:

mysql> ALTER USER user IDENTIFIED WITH mysql_native_password BY 'PASSWORD';

Теперь phpmyadmin отлично работает, регистрируя нового пользователя.

У меня была эта проблема, я не нашел ни одного ini-файла в Windows, но решение, которое сработало для меня, было очень простым. 1. Откройте программу установки mysql.
. 2. Перенастроить сервер mysql, это первая ссылка.
3. Перейдите к методу аутентификации.
4. Выберите "Старая проверка подлинности".
. 5. Сообщите свой пароль (следующее поле) .
6. Примените изменения.

Вот и все, надеюсь, мое решение подойдет и вам!

В моем случае, чтобы исправить это, я предпочел создать нового пользователя для использования с PhpMyAdmin, потому что изменение пользователя root вызвало проблемы с входом в систему с другими приложениями, такими как MySQL WorkBench.

Вот что я сделал:

  • Войдите в консоль MySQL от имени пользователя root: mysql -u root -p, введите свой пароль.
  • Давайте создадим нового пользователя в оболочке MySQL:
CREATE USER 'newMySqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlNewUsernamePassword';
  • На данный момент newMysqlUsername не имеет разрешений что-либо делать с базами данных. Это необходимо для предоставления пользователю доступа к необходимой информации.
GRANT ALL PRIVILEGES ON * . * TO ' newMySqlUsername'@'localhost';
  • После того, как вы завершили настройку разрешений, которые хотите настроить для своих новых пользователей, всегда обязательно перезагружайте все права.
FLUSH PRIVILEGES;
  • Выйдите из системы, набрав quit или \q, и ваши изменения теперь вступят в силу, мы можем войти в PhpMyAdmin с новым пользователем, и у него будет доступ к базам данных.

  • Также вы можете снова войти в систему с помощью этой команды в терминале:

mysql -u newMySqlUsername -p

Я использовал ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'PASSWORD';, все заработало

 mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'rootpassword';

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

Лучший ответ!!!!

Ramis 11.11.2020 23:17

Я думаю, что это работает в отличие от выбранного ответа из-за 'root' @ 'localhost', а не только из-за root.

Dylan Glockler 27.02.2021 17:16

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

Inamur Rahman 28.02.2021 21:24

Вы можете изменить аутентификацию, если вы работаете в Windows, перенастроив установку, запустив файл msi. Он попросит изменить аутентификацию по умолчанию на устаревшую, затем вы можете перейти к этой опции, чтобы изменить аутентификацию на устаревшую.

Создайте другого пользователя с опцией mysql_native_password:

В терминале:

mysql> CREATE USER 'su'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';
mysql> GRANT ALL PRIVILEGES ON * . * TO 'su'@'localhost';
mysql> FLUSH PRIVILEGES;

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