Я установил сервер 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
Войдите в консоль 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
Он прекрасно работает в Докер роскопию среде:
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
Новый 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 Ref
Я знаю, что это проблема безопасности, но что делать, если инструменты не работают с caching_sha2_password?
Я решил эту проблему, выполнив следующие действия:
default_authentication_plugin = mysql_native_password
в CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *. * TO 'root'@'localhost';
GRANT ALL PRIVILEGES ON *. * TO 'root'@'localhost';
а затем FLUSH PRIVILEGES;
Я пошел в систему
предпочтения → mysql → инициализировать базу данных → использовать устаревшее шифрование пароля (вместо сильного) → ввести тот же пароль
как мой файл config.inc.php
, перезапустил сервер Apache, и он сработал. Я все еще подозревал об этом, поэтому я остановил сервер apache и mysql и начал их снова, и теперь он работает.
Я решил свою проблему в основном с ответом Андраса:
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 отлично работает, регистрируя нового пользователя.
Чтобы исправить эту проблему, я просто запускаю один запрос в моей консоли mysql
.
Для этого входа в консоль mysql, используя этот
mysql -u {username} -p{password}
После этого я просто запускаю один запрос, как показано ниже:
ALTER user '{USERNAME}'@'localhost' identified with mysql_native_password by '{PASSWORD}';
когда я запускаю этот запрос, я получил сообщение, которое выполнил запрос. Затем войдите в PHPMYADMIN с именем пользователя/паролем.
Я решил эту проблему, выполнив следующие действия:
Войдите в системные настройки → mysql
Выберите "Инициализировать базу данных" и введите новый пароль root, выбрав "Использовать шифрование устаревших паролей".
Войдите в phpmyadmin с новым паролем.
apt-get
который является Linux. Но ваш ответ для MacOS
Если вы используете официальный контейнер 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
Как упоминалось в @kgr, MySQL 8.0.11 внесла некоторые изменения в метод аутентификации.
Я открыл отчет об ошибке phpMyAdmin об этом: https://github.com/phpmyadmin/phpmyadmin/issues/14220.
MySQL 8.0.4-rc отлично работал для меня, и я как бы считаю смешным для MySQL сделать такое изменение в выпуске уровня патча.
У меня была эта проблема, я не нашел ни одного ini файла в Windows, но решение, которое работало для меня, было очень простым.
1. Откройте установщик mysql.
2. Переконфигурируйте сервер mysql, это первая ссылка.
3. Перейти к методу аутентификации.
4. Выберите "Устаревшая аутентификация".
5. Дайте свой пароль (следующее поле).
6. Примените изменения.
Вот и все, надеюсь, что мое решение тоже подойдет вам!
Я решил это с помощью MySQL 8.0.12, выполнив:
mysql_upgrade -u root
Как указывалось в других ответах, изменение плагина аутентификации по умолчанию MySQL на native делает трюк.
Тем не менее, поскольку я не могу использовать новый плагин caching_sha2_password, я подожду, пока не будет разработана совместимость для закрытия темы.
Я использовал ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
это сработало
в моем случае, чтобы исправить это, я предпочел создать нового пользователя для использования с PhpMyAdmin, потому что изменение пользователя root вызвало проблемы с собственным входом в другие приложения, такие как MySQL WorkBench.
Вот что я сделал:
mysql -u root -p
, введите свой пароль.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
Вы все благословение :) Спасибо за это исправление... Я ломал голову последние 40 минут...
mysqli
.