navicat 不支持 mongodb 时不会报 1045 错误,该错误仅属 mysql 协议;1045 表示 mysql 认证失败,而 mongodb 使用 bson 协议与 scram 认证,返回 json 错误或 401 状态码。
navicat 不支持 mongodb,1045 错误根本不会出现在 mongodb 场景中——你看到的 1045 一定是连错了 mysql 或 mariadb 实例。
为什么 Navicat 连 MongoDB 不会报 1045
错误码 1045 是 MySQL 协议原生错误(ER_ACCESS_DENIED_ERROR),由 MySQL 服务端返回,含义是“用户名/密码或权限不匹配”。MongoDB 使用完全不同的通信协议(BSON over TCP)和认证机制(SCRAM-SHA-1/256、X.509 等),其拒绝登录时返回的是类似 Authentication failed 的 JSON 响应,HTTP 状态码通常是 401,绝不会抛出 1045。
常见混淆场景:
- 你在 Navicat 中新建连接时,误选了 MySQL 类型,但填的是 MongoDB 的地址(如
localhost:27017)→ Navicat 尝试用 MySQL 协议握手,MySQL 服务未运行,或端口被占,也可能触发超时/拒绝,但不是 1045;若本地恰好有 MySQL 正在监听3306,而你手误填成27017却没改端口,Navicat 可能因连接失败直接报错,但也不会是 1045。 - 你实际连接的是 MySQL 容器或云数据库(比如阿里云 RDS、腾讯云 CVM 上装的 MySQL),但误以为是 MongoDB —— 尤其当数据库名里带
mongo或配置文件混放时。
确认你连的到底是哪个数据库
别猜,用命令直击本质:
- 查端口谁在监听:
netstat -ano | findstr :27017(Windows)或lsof -i :27017(macOS/Linux)→ 若无输出,说明 MongoDB 没跑;若有,看 PID 对应进程名是不是mongod。 - 查 MySQL 是否在听
3306:netstat -ano | findstr :3306→ 若有mysqld,且 Navicat 连的是这个端口,那 1045 就是它报的。 - 进 Navicat 连接设置页,点开「高级」→ 看「连接类型」下拉框:显示的是
MySQL、MySQLi还是MongoDB?Navicat Premium 和 Navicat 16+ 才支持 MongoDB,且需单独启用;旧版 Navicat for MySQL 根本没有 MongoDB 选项。
如果确认是 MySQL 报 1045:优先检查三件事
不是改密码第一,先排除低级但高频的误配:
-
Host字段填的是localhost,但 MySQL 用户只授权了'user'@'127.0.0.1'(或反之)→localhost在 MySQL 中走 socket 文件,127.0.0.1走 TCP,二者 Host 不等价,必须分别授权。 - MySQL 8.0+ 默认用
caching_sha2_password插件,而 Navicat 旧版本(如 12.x 及更早)只认mysql_native_password→ 即使密码对,认证握手失败也会报 1045。 - Navicat 连接配置里「保存密码」勾选了,但实际存的是上一次输错的密码;或者 Windows 凭据管理器里缓存了错误凭据 → 清空 Navicat 的连接历史 + 删除系统凭据里的
Navicat相关条目再试。
真要重置 MySQL 密码:跳过权限表不是唯一路
修改 my.ini 加 skip-grant-tables 是野路子,重启麻烦、有安全窗口、还可能因 MySQL 8.0+ 表结构变更(password 字段已移除,改用 authentication_string)导致 UPDATE 报错。
更稳的做法(MySQL 5.7+ / 8.0+ 通用):
- 停服务:
net stop mysql(Windows)或sudo systemctl stop mysql(Linux) - 命令行启动免鉴权实例:
mysqld --skip-grant-tables --skip-networking(加--skip-networking防外网访问) - 新开终端连:
mysql -u root(不加-p) - 执行(MySQL 8.0+ 必须用):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_pass'; -
FLUSH PRIVILEGES;后退出,再正常启服务
真正容易被忽略的点:Navicat 的「测试连接」按钮有时会复用旧缓存,改完密码后务必删掉该连接、新建一个,而不是点「编辑」再点「测试」——它可能还在用旧凭证哈希。











