phpMyAdmin на MySQL 8.0

Я установил сервер 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

редактировать
установлен с apt

apt-get install mysql-server phpmyadmin

12 ответов

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

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

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

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://localhost:8080/ root / PASSWORD.


MySQL / MySQL-сервер

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

Но помните, это просто "быстрое и грязное" решение в среде разработки.Не стоит менять плагин MySQL Preferred Authentication.

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

Новый 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

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

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

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

  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 с новым пользователем

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

default_authentication_plugin = mysql_native_password

Смотри также: Mysql Ref

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

Я пошел в систему

настройки -> mysql -> инициализация базы данных -> использовать устаревшее шифрование пароля (вместо надежного) -> введенный пароль

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

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

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 отлично работает, регистрируя нового пользователя.

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

Для этого войдите в консоль MySQL, используя эту

mysql -u {username} -p{password}

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

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

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

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

Добавьте следующую строку в ваш сервис docker-compose:

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

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

Вот и все, надеюсь, что мое решение работает хорошо и для вас!

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

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

  2. Выберите "Initialize database" и введите новый корневой пароль, выбрав "Use Legacy Password Encryption".

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

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

Я открыл отчет об ошибке phpMyAdmin по этому поводу: https://github.com/phpmyadmin/phpmyadmin/issues/14220.

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

Создайте другого пользователя с 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;

В моем случае, чтобы исправить это, я предпочел создать нового пользователя для использования с 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

Я решил это с MySQL 8.0.12, запустив:

mysql_upgrade -u root

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

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

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

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

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