phpMyAdmin на MySQL 8.0

39

Я установил сервер 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
  • 0
    С какой версией PHP вы соединяетесь с этим? Держу пари, что это проблема уровня драйвера, так как phpMyAdmin использует mysqli .
  • 0
    Версия PHP 7.0.27-0
Теги:
phpmyadmin
database-connection
mysql-8.0

16 ответов

58

Войдите в консоль 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#upgrade-caching-sha2-password

Он прекрасно работает в Докер роскопию среде:

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 docker image

Но помните, это просто "быстрое и грязное" решение в среде разработки. Не стоит менять плагин 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

Обновленный обходной путь на 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

  • 15
    Будьте здоровы. Я потратил много времени, пытаясь понять это. Кстати, в MacOS при использовании phpMyAdmin с Brew мне нужно было выполнить команду: ALTER USER root @ localhost IDENTIFIED WITH mysql_native_password BY 'secret' (В противном случае я получил «ERROR 1396 (HY000): операция ALTER USER не выполнена для» корень '@'%') % ')
  • 0
    Я попробовал эти уловки и заставил это работать. Затем я переместил папку mysql, и теперь ошибка возвращается, и она исчезает. Что еще может быть не так?
Показать ещё 6 комментариев
19

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

  • 1
    Это спасло меня от большой головной боли!
13

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

default_authentication_plugin = mysql_native_password

См. Также: Mysql Ref

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

  • 2
    правда ... надеюсь, это скоро выйдет
  • 0
    Ну, когда я думаю об этом, это не совсем проблема безопасности, потому что до v8 всегда используется mysql_native_password
Показать ещё 4 комментария
12

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

  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'; GRANT ALL PRIVILEGES ON *. * TO 'root'@'localhost'; а затем FLUSH PRIVILEGES;
  4. Войдите в phpmyadmin с новым пользователем
  • 0
    Я попытался просто создать пользователя с помощью mysql_native_password, но mysqli все равно не смог подключиться. Вы должны изменить default_authentication_plugin для того, чтобы это работало, как описано в посте user1706897. Я добавляю голосование против этого ответа.
  • 0
    @PeteH - Ты перезапустил MySQL Деймон?
Показать ещё 1 комментарий
8

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

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

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

  • 0
    это был правильный путь.
  • 0
    Это спасло мой день, спасибо :)
5

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

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

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

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

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

  • 0
    Это работало для MySQL 8.0.15 и PHPMyAdmin 4.8.5.
4

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

Для этого входа в консоль mysql, используя этот

mysql -u {username} -p{password}

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

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

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

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

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

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

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

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

  • 0
    ОП не указал, что они на Mac; однако он сказал нам, что установил, используя apt-get который является Linux. Но ваш ответ для MacOS
3

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

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

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
3

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

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

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

2

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

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

1

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

mysql_upgrade -u root
1

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

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

0

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

0

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

Вы все благословение :) Спасибо за это исправление... Я ломал голову последние 40 минут...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню