Navicat 不支持 SSL 加密与定时同步一体化,需先在连接属性中显式启用 SSL(MySQL 必填 CA 文件,PostgreSQL verify-full 模式路径须用正斜杠),再基于该连接保存同步任务(.nsx),并禁用密码保存、改用明文密码,最后通过命令行执行且服务端强制 require_secure_transport=ON 并抓包验证。
navicat 本身不支持“开箱即用”的 ssl 加密 + 定时同步一体化功能;必须分两步走:先确保连接层启用 ssl,再用命令行工具驱动已保存的同步任务——否则看似配置了 ssl,实际同步仍走明文通道。
SSL 连接配置必须在 Navicat 连接属性中显式启用
很多人以为只要服务端开了 SSL,Navicat 就会自动加密通信。事实是:Navicat 默认禁用 SSL,哪怕你填了证书路径,没勾选开关也完全无效。
- 打开连接编辑窗口 → 切到「SSL」标签页 → 必须勾选
Use SSL - MySQL 场景下:
SSL CA File是唯一必填项(填服务端的ca.pem);SSL Cert File和SSL Key File只有用户被创建为REQUIRE X509时才需要 - PostgreSQL 场景下:若选
verify-full模式,SSL Root Certificate路径必须用正斜杠(如C:/certs/root.crt),含空格、中文或反斜杠都会报file not found - 连接测试成功 ≠ 同步走 SSL —— 同步动作是否加密,取决于这个连接配置是否被同步任务真正引用(见下一条)
同步任务必须基于已启用 SSL 的连接保存
你在 GUI 中手动点「数据同步」时,Navicat 会临时读取当前连接设置;但导出为 .nsx 文件后,它只固化当时所选的源/目标连接 ID,不固化 SSL 配置快照。如果之后改过连接属性但没重存同步任务,命令行执行时就可能降级为明文。
- 在 GUI 中完成一次完整同步配置(选好源库、目标库、映射规则)→ 点击
Save As保存为sync_with_ssl.nsx - 保存前务必确认:源连接和目标连接都已在各自的连接属性中启用了 SSL,并通过
Test Connection验证过 - 不要复用旧的
.nsx文件——哪怕只是改过一次密码或 SSL 设置,也得重新保存同步任务 - 验证方式:用命令行运行该
.nsx,然后登录数据库查SELECT Ssl_cipher FROM performance_schema.threads WHERE PROCESSLIST_USER = 'your_user';,结果非空才算真加密
命令行调用时不能依赖 GUI 的密码管理
Windows 下 navigator.exe 执行 .nsx 时,无法访问系统凭据管理器;若连接设置了 Save password,命令行会静默失败,错误日志里只显示 Failed to load connection。
- 在连接属性中取消勾选
Save password,改在「连接」标签页的Password字段填明文密码(仅限内网可信环境) - 命令行调用格式(路径含空格必须加双引号):
C:\Program Files\PremiumSoft\Navicat Premium 16\navigator.exe -sync "D:\sync\sync_with_ssl.nsx" - macOS/Linux 用户注意:
navicatCLI不支持.nsx同步,只能退回到mysqldump+mysql组合,或使用 Windows 虚拟机跑完整版 - 任务计划中务必勾选「不管用户是否登录都要运行」,否则锁屏后任务直接挂起
同步成功不等于数据真加密,必须验证协议层
即使 .nsx 基于 SSL 连接保存、命令行也跑通了,仍有极大概率因服务端配置残缺导致 MySQL 静默回退到非 SSL 模式——比如只配了 ssl_cert 没配 ssl_key,或 require_secure_transport=OFF。
- 服务端必须开启强制 SSL:
SET PERSIST require_secure_transport = ON;(MySQL 8.0+)或写入my.cnf后重启 - 抓包是最可靠验证方式:
tcpdump -i lo port 3306 -w ssl_test.pcap,用 Wireshark 打开,搜索SELECT或字段值——能看到明文就说明没走 SSL - Navicat 日志里搜
SSL: Cipher,出现类似ECDHE-RSA-AES128-GCM-SHA256的字符串才算握手成功
最常被忽略的一点:SSL 隧道只保护客户端到跳板机(或直连数据库)这段,而 Navicat 的数据同步本质仍是 SQL 协议交互;若目标库未启用 TLS 或未配 require_secure_transport,中间网络节点仍可嗅探账号、密码和所有同步语句。别把 SSH 隧道和 SSL 混为一谈,也别信“连上了就安全了”。


















