在 MySQL 8.0 中,默认的认证插件是 caching_sha2_password,但某些旧客户端(如一些较老版本的 PHP、Python 驱动等)可能不支持该插件。如果你需要将某个 MySQL 用户的认证方式改为旧的 mysql_native_password,可以按照以下步骤操作。


✅ 方法一:修改已有用户的认证插件

-- 登录 MySQL(建议使用 root 或具有足够权限的用户)
mysql -u root -p

-- 修改指定用户的认证插件
ALTER USER 'your_username'@'host' IDENTIFIED WITH mysql_native_password BY 'your_password';

例如:

ALTER USER 'myuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword';

⚠️ 注意:

  • 'your_username'@'host' 必须与你创建用户时指定的完全一致(包括 host 部分,如 '%''localhost' 等)。

  • 修改后需执行 FLUSH PRIVILEGES;(虽然通常不需要,但有时为了保险可以执行)。


✅ 方法二:创建新用户时直接指定插件

CREATE USER 'newuser'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%';
FLUSH PRIVILEGES;

✅ 方法三:全局默认认证插件(不推荐)

如果你希望所有新用户默认使用 mysql_native_password仅用于开发或兼容性测试环境),可以在 MySQL 配置文件(如 /etc/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf)中添加:

[mysqld]
default_authentication_plugin=mysql_native_password

然后重启 MySQL 服务:

sudo systemctl restart mysql

❗注意:此设置只影响之后创建的新用户,不会改变已有用户的认证方式。


🔍 验证当前用户的认证插件

SELECT user, host, plugin FROM mysql.user;

你会看到类似如下输出:

+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| myuser           | localhost | mysql_native_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+

如有更多上下文(比如具体错误信息、客户端类型等),我可以提供更针对性的建议。