82

更新
较新版本的 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

4

18 回答 18

121

使用root用户登录 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 参考手册中阅读有关首选身份验证插件的更多信息

https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password

它在docker化的环境中完美运行:

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

因此,您现在可以使用 root / PASSWORD 在 http://localhost:8080 上登录 phpMyAdmin


mysql/mysql-服务器

如果您使用的是mysql/mysql-server docker 映像

但请记住,这只是开发环境中的“快速而肮脏”的解决方案。更改MySQL Preferred Authentication Plugin是不明智的。

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

2018 年 10 月 4 日更新的解决方案

default_authentication_plugin=mysql_native_password通过取消注释中的设置来更改 MySQL 默认身份验证插件 /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

在 2019 年 1 月 30 日更新了解决方法

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

2021 年 9 月 13 日更新的解决方案

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

  • 完全用引号 *
于 2018-05-20T16:59:15.380 回答
32

新的 MySQL 8.0.11caching_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

于 2018-04-20T21:46:51.720 回答
25
 mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'rootpassword';

通过命令行登录,之后它将工作。

于 2019-05-11T04:34:09.690 回答
16

另一个想法:只要 phpmyadmin 和其他 php 工具不能使用它,只需将这一行添加到您的文件 /etc/mysql/my.cnf

default_authentication_plugin = mysql_native_password

另请参阅: Mysql 参考

我知道这是一个安全问题,但是如果这些工具不能与 cache_sha2_password 一起使用怎么办?

于 2018-04-21T08:01:39.900 回答
15

我通过执行以下操作解决了这个问题:

  1. 添加default_authentication_plugin = mysql_native_password
    my.cnf 的 [mysqld] 部分
  2. 输入 mysql 并通过执行类似的操作创建一个新用户CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
  3. 根据需要授予权限。例如GRANT ALL PRIVILEGES ON * . * TO 'root'@'localhost';然后FLUSH PRIVILEGES;
  4. 使用新用户登录 phpmyadmin
于 2018-04-27T12:41:38.647 回答
13

我去了系统

首选项 -> mysql -> 初始化数据库 -> 使用旧密码加密(而不是强密码) -> 输入相同的密码

作为我的config.inc.php文件,重新启动了 apache 服务器并且它工作了。我仍然对此持怀疑态度,所以我停止了 apache 和 mysql 服务器并再次启动它们,现在它正在工作。

于 2018-06-02T08:21:51.667 回答
8

我基本上用 András 的回答解决了我的问题:

1- 使用 root 用户登录 MySQL 控制台:

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 可以很好地记录新用户。

于 2018-10-26T13:59:15.200 回答
7

要解决此问题,我只需在mysql控制台中运行一个查询。

使用此登录到 mysql 控制台

mysql -u {username} -p{password}

在此之后,我只运行一个查询,如下所示:-

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

当我运行此查询时,我收到了该查询已执行的消息。然后使用用户名/密码登录 PHPMYADMIN。

于 2018-10-22T14:30:17.510 回答
6

如果你使用的是官方的 mysql docker 容器,有一个简单的解决方案:

将以下行添加到您的 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
于 2018-10-04T13:31:24.263 回答
5

我通过执行以下操作解决了这个问题:

  1. 进入系统偏好-> mysql

  2. 选择“初始化数据库”并输入新的根密码,选择“使用旧密码加密”。

  3. 使用新密码登录 phpmyadmin。

于 2018-05-07T15:30:25.210 回答
5

我遇到了这个问题,在 Windows 中没有找到任何 ini 文件,但对我有用的解决方案非常简单。
1.打开mysql安装程序。
2.重新配置mysql服务器,是第一个环节。
3. 进入认证方式。
4. 选择“传统身份验证”。
5. 提供您的密码(下一个字段)。
6. 应用更改。

就是这样,希望我的解决方案也适合你!

于 2019-01-10T01:34:34.230 回答
3

正如@kgr 提到的,MySQL 8.0.11 对身份验证方法进行了一些更改。

我已经打开了关于此的 phpMyAdmin 错误报告:https ://github.com/phpmyadmin/phpmyadmin/issues/14220 。

MySQL 8.0.4-rc 对我来说工作得很好,我觉得 MySQL 在补丁级别的版本中做出这样的改变是荒谬的。

于 2018-04-21T23:49:14.867 回答
2

使用选项创建另一个用户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;
于 2019-10-23T07:13:44.540 回答
1

我通过运行 MySQL 8.0.12 解决了这个问题:

mysql_upgrade -u root
于 2018-09-24T15:49:20.487 回答
1

正如许多人在其他答案中指出的那样,将 MySQL 的默认身份验证插件更改为 native就可以了。

不过,由于我无法使用新的caching_sha2_password插件,我将等到兼容性开发完成后才能关闭该主题。

于 2018-05-20T18:07:44.660 回答
1

就我而言,要修复它,我更喜欢创建一个新用户来使用 PhpMyAdmin,因为修改 root 用户会导致其他应用程序(如 MySQL WorkBench)出现本机登录问题。

这就是我所做的:

  • 使用 root 用户登录 MySQL 控制台:mysql -u root -p,输入您的密码。
  • 让我们在 MySQL shell 中创建一个新用户:
CREATE USER 'newMySqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlNewUsernamePassword';
  • 此时,newMysqlUsername没有权限对数据库进行任何操作。因此,需要为用户提供对他们需要的信息的访问权限。
GRANT ALL PRIVILEGES ON * . * TO ' newMySqlUsername'@'localhost';
  • 完成要为新用户设置的权限后,请务必重新加载所有权限。
FLUSH PRIVILEGES;
  • 通过输入quitor退出\q,您的更改现在将生效,我们可以使用新用户登录 PhpMyAdmin,它将可以访问数据库。

  • 您也可以在终端中使用此命令重新登录:

mysql -u newMySqlUsername -p
于 2019-03-09T19:30:29.623 回答
0

我用ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'PASSWORD';它有效

于 2019-04-12T10:02:58.700 回答
0

如果您在 Windows 上运行,您可以通过运行 msi 重新配置安装来更改身份验证。它将要求将默认身份验证更改为旧版,然后您可以继续使用该选项将身份验证更改为旧版。

于 2019-08-16T06:45:16.193 回答