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';
Авторизуйтесь через командную строку, после этого все будет работать.
Я решил эту проблему, выполнив следующие действия:
- добавлять
default_authentication_plugin = mysql_native_password
к
[mysqld] раздел my.cnf - Введите mysql и создайте нового пользователя, выполнив что-то вроде
CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
- Предоставляйте привилегии по мере необходимости. Например
GRANT ALL PRIVILEGES ON * . * TO 'root'@'localhost';
а потомFLUSH PRIVILEGES;
- Войдите в 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. Примените изменения.
Вот и все, надеюсь, что мое решение работает хорошо и для вас!
Я решил эту проблему, выполнив следующее:
Войдите в системные настройки -> mysql
Выберите "Initialize database" и введите новый корневой пароль, выбрав "Use Legacy Password Encryption".
Войдите в 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 по умолчанию на native делает свое дело.
Тем не менее, поскольку я не могу использовать новый плагин caching_sha2_password, я подожду, пока не будет разработана совместимость, чтобы закрыть тему.
Вы можете изменить аутентификацию, если вы работаете в Windows, перенастроив установку, запустив msi. Он попросит изменить аутентификацию по умолчанию на устаревшую, после чего вы можете перейти к этой опции, чтобы изменить аутентификацию на устаревшую.
Я использовал ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
это сработало