ОБНОВИТЬ
Новые версии 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 7.0.27-0






В новом 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
Этот параметр ini даже не помогает с MySQL 8.0.11 GA и последней версией PHPMyAdmin 4.8.0.1. PHPMyAdmin по-прежнему выдает ошибку: mysqli_real_connect (): сервер запросил метод аутентификации, неизвестный клиенту [caching_sha2_password]
Что ж, похоже, что изменения не приняли. Вы перезапустили сервер MySQL и уверены, что другого файла конфигурации нет?
Да, перезапущен сервис, перезапущен сервер, произведена новая установка MySQL 8.0.11, где вы можете установить метод аутентификации в пользовательском интерфейсе установщика. Не помогает. Мне удалось подключиться к только что установленному серверу, и я увидел "caching_sha2_password", выбранный по умолчанию для root, в разделе "Пользователи и привилегии" в Workbench 8.0.11-rc. Я предполагаю, что это проблема. Настройка для каждого пользователя, вероятно, переопределяет конфигурацию default_authentication_plugin. И по умолчанию для root установлено значение sha2 независимо от того, что во время установки.
Извините, не видел вашего ответа. Если вы обновились с более ранней версии, возможно, вам придется обновить структуру таблицы? Это описано в dev.mysql.com/doc/refman/8.0/en/upgrading-strategies.html Я только что запустил, как описано в 8 и 9, безопасный сервер и запустил команду mysql_upgrade. Я долго ...
Как упоминалось в @kgr, MySQL 8.0.11 внес некоторые изменения в метод аутентификации.
Я открыл отчет об ошибке phpMyAdmin: https://github.com/phpmyadmin/phpmyadmin/issues/14220.
MySQL 8.0.4-rc у меня работал нормально, и я думаю, что MySQL нелепо вносить такие изменения в выпуск исправлений.
Я решил эту проблему, выполнив следующие действия:
default_authentication_plugin = mysql_native_password в CREATE USER
'root'@'localhost' IDENTIFIED BY 'password';GRANT ALL PRIVILEGES ON * . * TO
'root'@'localhost';, а затем FLUSH PRIVILEGES;Я попытался просто создать пользователя с mysql_native_password, но mysqli все равно не смог подключиться. Вы должны изменить default_authentication_plugin, чтобы это работало, как описано в сообщении user1706897. Я добавляю голосование к этому ответу.
@PeteH - вы перезапустили mysql deamon?
Не думаю, что перезапустил демон, но это не повредит.
Я решил эту проблему, выполнив следующие действия:
Войдите в системные настройки -> mysql
Выберите «Инициализировать базу данных» и введите новый пароль root, выбрав «Использовать шифрование устаревшего пароля».
Войдите в phpmyadmin с новым паролем.
OP не указал, что они находятся на Mac; однако он сказал нам, что установил с помощью apt-get, то есть Linux. Но ваш ответ для MacOS
Войдите в консоль 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.
Он отлично работает в среде докер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
Будьте здоровы. Я потратил много времени, пытаясь понять это. Кстати, в MacOS при использовании phpMyAdmin с Brew мне нужно было запустить команду: ALTER USER root @ localhost IDENTIFIED WITH mysql_native_password BY 'secret' (в противном случае я получил "ERROR 1396 (HY000): Operation ALTER USER failed for ' корень'@'%')
Я попробовал эти уловки, и все заработало. Затем я переместил папку mysql, и теперь ошибка вернулась, и она исчезла. Что еще каб может быть не так?
Пожалуйста, попробуйте мое обновленное решение. Что вы конкретно имеете в виду "переместили папку mysql"?
После ввода ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD'; я получаю следующую ошибку: ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'. Что я должен здесь исправить, так как я не разрешаю удаленный доступ root %?
@Pathros вы должны ИЗМЕНИТЬ пользователя root @ 'localhost', ИДЕНТИФИЦИРОВАННЫЙ mysql_native_password ПО 'ПАРОЛЮ'; ... так что укажите localhost напрямую
После выполнения этой команды мне кажется, что я больше не могу войти в систему с помощью инструментов MySQL (например, WorkBench и т. д.). Есть ли способ отменить это, изменив файл конфигурации?
Отличный ответ! Есть ли способ использовать MYSQL_ROOT_PASSWORD env. переменной в команде «изменить пользователя» вместо использования текстового пароля в командной строке?
Отлично работает! Однако для его работы пришлось добавить root @ 'localhost' (с использованием Fedora 30)
Эти конфигурации не сохранятся, если контейнер уйдет, поскольку контейнеры недолговечны!
Для тех, кто пытался добавить пользователю localhost, но все же получил сообщение ERROR 1396, попробуйте сделать FLUSH PRIVILEGES; (Источник: stackoverflow.com/questions/5555328/…)
Как многие указывали в других ответах, изменение плагина аутентификации по умолчанию 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. Спасибо!
Я все еще не могу заставить это работать. Я выполнил этот запрос, но все еще не могу войти в систему. Я получаю ту же ошибку метода аутентификации. Запрос мне ничего не меняет? mysql> ALTER user 'root'@'localhost' identified with mysql_native_password by '<root pw>'; Query OK, 0 rows affected (0.01 sec)
хорошо, оказывается, мне пришлось использовать '%' вместо 'localhost', и он все равно скажет, что затронуты 0 строк, но это изменит его.
Я решил свою проблему в основном с ответом Андраша:
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 -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
Я использовал ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'PASSWORD';, все заработало
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'rootpassword';
Авторизуйтесь через командную строку, после этого все заработает.
Лучший ответ!!!!
Я думаю, что это работает в отличие от выбранного ответа из-за 'root' @ 'localhost', а не только из-за root.
Спасибо, у меня работает
Вы можете изменить аутентификацию, если вы работаете в 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;
С какой версией PHP вы работаете? Могу поспорить, что это проблема на уровне драйвера, поскольку phpMyAdmin использует
mysqli.