导出连接时必须取消勾选“导出密码”,因Navicat使用固定密钥和IV加密,密码可被公开工具一键解密;同时需禁用全局自动保存密码,并改用专业密码管理器替代内置存储。

导出连接时必须取消勾选“导出密码”
Navicat 的「导出连接」功能默认会包含加密后的密码字段(Pwd),但只要勾选了“导出密码”,哪怕密码是 AES 加密的,接收方仍可通过公开工具批量解密——因为 Navicat 12+ 使用的是固定密钥 "libcckeylibcckey" 和固定 IV "libcciv libcciv "。这不是理论风险,而是已有现成 Python 脚本可一键还原。
实操要点:
- 右键连接 → 「导出连接」→ 取消勾选
Export password(界面中明确标注该选项) - 导出后手动检查生成的
.ncx文件:用文本编辑器打开,确认<password></password>标签为空或不存在 - 若已误导出含密码文件,立即从团队共享路径删除,并通知所有成员清空本地缓存(旧版 Navicat 不会自动同步删除)
禁用 Navicat 全局密码自动保存
即使单个连接没保存密码,Navicat 的全局设置仍可能在后台静默记录。一旦开启 Auto-save connection passwords,所有后续新建连接都会默认启用密码保存,且该开关位于深埋路径中,容易被忽略。
关闭路径(Windows/macOS 一致):
-
File → Options → General→ 取消勾选Auto-save connection passwords - 该设置影响所有连接类型(MySQL、PostgreSQL、Oracle 等),不是按连接单独控制
- 关闭后,每次连接需手动输入密码,但能彻底切断密码写入注册表或
connections.ncx的通路
用密码管理器替代 Navicat 内置存储
把密码交给专业工具(如 Bitwarden、1Password)管理,而非依赖 Navicat 加密,是目前最可控的协作方案。Navicat 本身不提供权限粒度控制,而密码管理器可精确到「仅允许查看、禁止复制、限时访问」。
落地建议:
- 创建专用条目,标题写清楚环境与角色,例如:
staging-mysql-ro-user@navicat - 在 Navicat 连接配置中,
UserName字段照常填写,Password字段留空 → 连接时从密码管理器粘贴 - 团队共享时,只分发不含凭证的
.npz项目文件(结构-only 导入),并在Project Properties → Security中关闭项目密码保护,避免他人因打不开而自行补全密码
连接配置文件(.ncx)不能直接共享
有人会想:“我把加密的 .ncx 文件发给同事,他们双击就能连,多方便。”这恰恰是最危险的做法。因为 .ncx 是 Navicat 的完整连接上下文,包含 SSH 隧道参数、内网地址、跳板机路径、字符集等元数据——这些信息组合起来,足以定位真实拓扑并构造攻击链,哪怕密码字段为空。
典型风险点:
-
ssh_host="jump.internal"+ssh_user="ops"→ 暴露跳板机入口 -
mysql_host="10.20.30.5"+port="3306"→ 映射到具体生产实例 - 导出的
.npz包解压后,XML 中明文可见全部非密码字段,7-Zip 即可打开
真正安全的协作,是剥离连接实体,只同步 ER 图、表结构、索引定义——这些信息本身不构成攻击面,也无需密码参与。


















