服务器请求客户端未知的身份验证方法(PHP)

moh*_*ser 62 php mysql mysql-8.0

我在PHP 7.0上运行MySQL版本8.

当我尝试从PHP连接到我的数据库时,我收到以下错误:

连接错误:SQLSTATE [HY000] [2054]服务器请求客户端未知的身份验证方法

怎么解决?

Eli*_*nyo 140

@mohammed,这通常归因于你的mysql数据库正在使用的身份验证插件.

默认情况下,出于某种原因,mysql 8默认插件是auth_socket.应用程序大多数时候都希望使用密码登录您的数据库.

如果您尚未更改mysql默认身份验证插件,可以通过以下方式更改:
1.以root身份登录到mysql
2.运行此sql命令:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'password';  
Run Code Online (Sandbox Code Playgroud)

用root密码替换'password'.如果您的应用程序未使用root用户登录到您的数据库,请将上述命令中的"root"用户替换为您的应用程序使用的用户.

数字海洋在此处详细介绍了安装Mysql

  • 出现这个问题的主要原因是MariaDB 8.0版本中Mysql默认的认证插件支持发生了变化。例如,‘PHP7.3’支持的Mysql认证插件列表可以通过‘phpinfo()’函数查看:`mysqlnd debug_trace, auth_plugin_mysql_native_password auth_plugin_mysql_clear_password, auth_plugin_sha256_password`。因此将Mysql服务器受限帐户中的身份验证插件机制更改为'sha256_password'或'mysql_native_password': ALTER USER 'root'@'%' IDENTIFIED WITH sha256_password BY 'password'; (4认同)
  • 谢谢这对我来说是正确的方法! (2认同)
  • 这在使用MySQL 8.0+时对我有用。我在Magento 2.3.2 Web安装程序中看到了此问题。谢谢! (2认同)
  • 谢谢,我尝试过其他的。只有这个对我有用。 (2认同)
  • 为此,我收到“ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'”。我的密码是“''”(空) (2认同)
  • 谢谢你。我将 [mysqld] default-authentication-plugin=mysql_native_password 添加到 mysql (8) 配置文件,但这成功了。 (2认同)

mic*_*l_w 49

您必须更改MySQL设置.编辑my.cnf文件并将此设置放在mysqld部分中:

[mysqld]
default_authentication_plugin= mysql_native_password
Run Code Online (Sandbox Code Playgroud)

  • 然后重新创建用户.`ALTER USER $ user IDENTIFIED WITH mysql_native_password BY'passwd'`(ref [ALTER USER手册页](https://dev.mysql.com/doc/refman/5.7/en/alter-user.html) (16认同)
  • 在 Ububtu 上的 /etc/mysql/my.cnf 中找到 my.cnf (3认同)

Tai*_*sco 38

我已经尝试了很多方法,但是只有这对我有用

感谢您的解决方法

检查您的**。env

MYSQL_VERSION=latest
Run Code Online (Sandbox Code Playgroud)

然后输入此命令

$ docker-compose exec mysql bash
$ mysql -u root -p 
Run Code Online (Sandbox Code Playgroud)

(以root用户身份登录)

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';
Run Code Online (Sandbox Code Playgroud)

然后去phpmyadmin并登录为:

  • 主机 -> MySQL的
  • 用户 ->根
  • 密码 -> root

希望对你有帮助

  • 你救了我这个家伙!谢谢! (2认同)
  • 您还救了我这个家伙!谢谢! (2认同)
  • `[HY000][1396] 操作 ALTER USER failed for 'default'@'%'` 发生在最后一次更改...有什么想法吗? (2认同)

小智 7

这里没有答案对我有用。我要做的是:

  1. 重新运行安装程序。
  2. 选择产品“ MySQL Server”旁边的快速操作“重新配置”
  3. 浏览选项,直到找到“身份验证方法”,然后选择“使用旧式身份验证方法”

之后,它工作正常。

  • 如果您使用安装程序并且您使用经典的用户名/密码方法连接到您的数据库,则此方法是可行的方法。 (2认同)

小智 5

面对同样的问题,我无法使用 mysql 版本 8 运行 wordpress docker 容器,因为它的默认身份验证机制是 caching_sha2_password 而不是 mysql_native_password。

为了解决这个问题,我们必须将默认身份验证机制重置为 mysql_native_password。

在 mysql 安装中找到 my.cnf 文件,通常在 linux 机器上它位于以下位置 - /etc/mysql

编辑 my.cnf 文件并在标题 [mysqld] 下添加以下行

default_authentication_plugin= mysql_native_password

保存文件,然后使用 root 用户登录到 mysql 命令行

运行命令 FLUSH PRIVILEGES;