1045错误在mac版navicat上主因是mysql用户host限制(如'localhost'不允远程)或认证插件不兼容(如caching_sha2_password与旧版navicat冲突),需检查user表的host和plugin字段,并确保navicat连接配置中的主机、端口、ssl设置与之严格匹配。
1045错误在mac版navicat上出现,大概率不是密码输错了,而是mysql拒绝了你的连接请求——原因集中在两个地方:用户没有远程访问权限,或mysql 8.0+默认的caching_sha2_password插件不被旧版navicat支持。
确认当前用户的host限制和认证插件
登录MySQL服务器(本地终端执行mysql -u root -p),运行以下命令:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
重点关注两列:
-
host值为localhost?那它只允许本机连接,Mac上的Navicat从远程IP发起请求时必然被拒 -
plugin值为caching_sha2_password?这是MySQL 8.0.4+默认插件,而Navicat 12及更早版本不原生支持,会直接报1045而非更明确的“authentication plugin not supported”
给用户开放远程host并重设认证方式
如果目标是快速连通(比如开发环境),执行这两步即可:
- 把
root用户从'root'@'localhost'扩展为'root'@'%':CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
(不要用UPDATE user SET ...直接改表,容易漏掉authentication_string与password字段的兼容逻辑) - 赋予必要权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; - 刷新生效:
FLUSH PRIVILEGES;
注意:'%'代表任意IP,生产环境请替换为具体IP段,如'192.168.1.%'或'10.0.2.2'(Mac宿主机常用Vagrant桥接IP)
Mac端Navicat连接配置必须匹配MySQL服务端设置
即使MySQL侧改好了,Navicat里填错一个参数也会触发1045:
- 主机名不能写
localhost(这会让Navicat走socket连接,绕过网络层验证)→ 改成服务器真实IP或域名 - 端口确认是
3306,且服务器防火墙已放行(macOS本机防火墙不影响,但云服务器如阿里云/腾讯云安全组必须手动开3306) - 如果MySQL是8.0+且你没改插件,Navicat需升级到v15或更高版本;否则在连接设置里勾选
Use SSL有时能绕过部分兼容问题,但不保证稳定
跳过权限表不是解决方案,而是临时诊断手段
网上流传的在my.cnf加skip_grant_tables再重置密码的做法,只适用于你完全忘了root密码、且无法登录MySQL的情况。但它会彻底关闭权限校验,任何人在网络可达前提下都能无密登录,风险极高。Mac上一旦误操作,重启MySQL后可能因配置残留导致服务起不来——mysqld启动日志(通常在/usr/local/var/mysql/*.err)里会明确报unknown variable 'skip_grant_tables'之类错误。
真正该盯住的,永远是user表里的host和plugin两列,以及Navicat连接窗口里“主机”“端口”“密码”“SSL”四个输入项是否与之严格对齐。











