Homebrew安装的MySQL 8.4默认无初始密码且免密登录(mysql -u root可直入),但认证插件为caching_sha2_password,导致Navicat等客户端连接失败;必须执行ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourSecurePass123!';显式切换插件并设符合策略的强密码,再验证插件已变为mysql_native_password。

Homebrew 安装的 MySQL 8.4 默认没有初始密码,但必须手动设置,否则后续连接(如 Navicat、Docker 或应用连接)会因认证插件不兼容直接失败。
确认当前登录方式是否免密
Homebrew 安装后首次运行 mysql -u root(不加 -p)能直接进入,说明是免密登录。这是 Homebrew 的默认行为,不是漏洞,但不代表密码为空——而是未设置认证凭据,MySQL 8.4 默认使用 caching_sha2_password 插件,而免密状态实际绕过了它。
- 执行
SELECT plugin FROM mysql.user WHERE User = 'root' AND Host = 'localhost';查看当前认证插件,大概率是caching_sha2_password - 如果后续用客户端连接报错
Authentication plugin 'caching_sha2_password' cannot be loaded,就是插件不被支持,必须显式切换为mysql_native_password - 不要尝试用
UPDATE user SET authentication_string=PASSWORD('xxx')——该函数在 MySQL 8.0+ 已废弃,执行会报错FUNCTION PASSWORD does not exist
用 ALTER USER 正确设置密码并指定插件
免密登录后,必须用 ALTER USER 语句一次性完成密码设置和插件切换,顺序不能颠倒,否则新密码无法生效或仍不兼容旧客户端。
- 执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourSecurePass123!'; - 必须包含
IDENTIFIED WITH mysql_native_password,否则仍沿用caching_sha2_password - 密码需满足 MySQL 8.4 默认策略:至少 8 位,含大小写字母 + 数字 + 特殊字符
- 执行
FLUSH PRIVILEGES;是冗余操作,ALTER USER自动生效,不用加
验证密码与插件是否生效
退出后重新用密码登录,并确认插件已变更,避免后续工具连接失败。
- 退出:
exit - 重试登录:
mysql -u root -p,输入刚设的密码 - 登录后查插件:
SELECT plugin FROM mysql.user WHERE User = 'root' AND Host = 'localhost';,结果应为mysql_native_password - 如果仍连不上第三方工具,检查该工具是否启用「使用旧版认证协议」选项(如 Navicat 的 Connection → Advanced → Use legacy authentication protocol)
最易忽略的是插件类型——MySQL 8.4 不再容忍模糊处理,ALTER USER 必须显式声明 WITH mysql_native_password,否则即使密码设了,外部程序仍因握手失败而拒绝连接。


















