根本原因是自动任务仍用旧密码缓存或加密密钥失效:它加载的是任务注册时的连接快照,不动态读取新密码;且若未勾选“不管用户是否登录都要运行”和“使用最高权限运行”,dpapi/keychain解密会失败,导致authentication failed。

Navicat自动运行任务在修改数据库密码后立即失败,根本原因不是连接参数“没更新”,而是任务仍用旧密码缓存或加密密钥失效——它压根没机会去校验新密码,就在认证阶段被拦截了。
自动任务不读取连接编辑器里的新密码
你在Navicat GUI里改完连接的密码并点「确定」,只是更新了该连接配置的本地缓存;但已创建的自动运行任务,其执行时加载的是任务注册那一刻序列化的连接快照(含加密后的旧密码),不会动态拉取最新配置。即使你重新编辑任务、点保存,若未手动触发「测试连接」或未显式刷新密码字段,password 字段实际仍是空或旧密文。
- 打开任务编辑界面 → 「连接」页 → 点击右侧「测试连接」按钮:这一步会强制重读当前连接配置并解密验证,若失败说明密码字段未真正更新
- 如果测试连接报
Access denied for user,别急着怀疑数据库,先检查该连接是否仍勾选了「使用操作系统认证」——这种模式下改数据库密码完全无效 - 对MySQL 8.0+,确认连接属性中「高级」页的「允许旧密码」未被误启用,否则新密码哈希格式不兼容
密码加密密钥与用户登录上下文强绑定
Navicat用 Windows DPAPI 或 macOS Keychain 加密保存密码,而自动任务以计划任务形式运行时,若未在「常规」页勾选「不管用户是否登录都要运行」+「使用最高权限运行」,系统会用无凭据上下文(如SYSTEM账户)尝试解密,必然失败,错误表现为 Authentication failed 或直接静默退出。
- 任务属性 → 「常规」页 → 确认「配置为」选的是当前系统版本(如Windows 11),旧版兼容模式会导致DPAPI密钥不可见
- 不要依赖「保存密码」复选框:它只控制GUI是否记住密码,不影响自动任务所用密文;必须确保任务创建时,对应连接已通过「测试连接」成功一次
- Mac 用户注意:
reset_navicat.command类工具清钥匙串后,所有自动任务的密码解密都会失效,必须重建任务
脚本内硬编码密码未同步更新
如果你的SQL脚本里有 mysql -u root -ppass123 这类明文调用,或者用 LOAD DATA INFILE 触发服务端导出,这些地方的密码和权限是独立于Navicat连接配置的。改完Navicat密码,这类脚本照样拿旧凭据去连,自然报错。
- 搜索脚本全文,替换所有
-ppass*、PASSWORD('...')、IDENTIFIED BY '...'等硬编码凭据 - MySQL服务端导出需
FILE权限,而该权限不随用户密码变更自动继承,需手动执行GRANT FILE ON *.* TO 'user'@'host'; FLUSH PRIVILEGES; - PostgreSQL脚本若含
psql -U user -W,-W会强制交互输密,自动任务无法响应,必须改用PGPASSWORD=xxx psql -U user并确保环境变量在任务上下文中生效
最常被忽略的一点:Navicat自动任务的密码解密失败不会报具体密钥错误,只显示笼统的连接超时或认证失败——得进 Windows 事件查看器查 Scheduled Tasks 日志,过滤ID为100、200的条目,才能看到「Failed to decrypt password using current user context」这类真实线索。











