在 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 |
+------------------+-----------+-----------------------+如有更多上下文(比如具体错误信息、客户端类型等),我可以提供更针对性的建议。
评论