你问的"密码插件",MySQL 里其实分两类:一类管"怎么验证密码"(认证插件),一类管"密码能不能用"(强度校验)。26.10 里两套都在,而且这一版有个新东西。
一、认证插件(决定账号用哪种方式登录)
| 插件名 | 作用 | 26.10 状态 |
|---|---|---|
**caching_sha2_password** |
SHA-2 加盐哈希 + 服务端缓存,速度快 | ✅ 默认,新建用户不指定就是用这个 |
mysql_native_password |
老式 SHA-1 哈希,兼容 5.x / 旧驱动 | ⚠️ 已弃用,8.4+ 默认关闭,需 mysql_native_password=ON 显式开启 |
sha256_password |
早期 SHA-256 实现,不带缓存 | ⚠️ 已弃用,建议迁到 caching_sha2_password |
**authentication_webauthn** |
FIDO/WebAuthn 硬件密钥,无密码 + 多因子 | 🆕 26.10 起进入 Community 版(之前只有 HeatWave/企业版有) |
auth_socket |
比对 OS 用户名,不验密码,本地运维账号用 | ✅ 可用(Linux) |
mysql_no_login |
禁止直接登录,只能做 proxy / role 中转 | ✅ 可用 |
| 企业版专属 | authentication_pam、authentication_ldap_sasl、authentication_ldap_simple、authentication_kerberos 等 |
仅 Enterprise Edition |
看账号在用哪个:
SELECT user, host, plugin FROM mysql.user;
-- 或
SHOW VARIABLES LIKE 'authentication_policy';
指定插件建用户:
CREATE USER 'u1'@'%' IDENTIFIED WITH caching_sha2_password BY 'Str0ng!Pwd';
CREATE USER 'backup'@'localhost' IDENTIFIED WITH auth_socket;
-- 26.10 新玩法:WebAuthn 无密码
CREATE USER 'u2'@'%' IDENTIFIED WITH authentication_webauthn;
二、密码强度插件(决定密码过不过得了校验)
| 名称 | 形态 | 说明 |
|---|---|---|
**component_validate_password** |
组件(8.4+ 推荐) | 长度、大小写/数字/特殊字符组合、字典词检查 |
validate_password |
旧式插件 | 已被组件取代,升级 8.4+ 时会保留,新装建议切组件 |
INSTALL COMPONENT 'file://component_validate_password'; -- 装一次永久生效
SHOW VARIABLES LIKE 'validate_password.%';
-- validate_password.policy = MEDIUM(默认,要求 8 位 + 三类字符)
这就是为什么你前面 IDENTIFIED BY 'pswddict' 可能报 1819:密码太弱被这个组件拦了。
三、怎么选
-
新业务 / 26.10 新库 :啥也别配,
caching_sha2_password就是默认,密码按强密码设。 -
老程序连不上 (报
caching_sha2_password相关 handshake 错):要么升级驱动(Connector/J 8.0+、Python mysql-connector 8.0+),要么单独给那个账号降级:ALTER USER 'MigratePSDT'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Str0ng!Pwd';同时在
my.cnf里开mysql_native_password=ON(8.4+ 默认是关的)。 -
想彻底不用密码 :26.10 可以上
authentication_webauthn配 YubiKey 之类的设备。 -
本地备份/监控账号 :用
auth_socket,连密码都不用存。