Navicat 17 不支持数据库审计日志轮转,其 scheduler_*.log 仅为任务运行日志,不含SQL、用户、IP等审计要素;真正的审计需通过定期查询+导出CSV+外部脚本归档实现。

Navicat 17 本身不生成数据库审计日志,所谓“轮转审计日志”必须靠外部 SQL 查询 + 导出 + 文件管理组合实现。它没有 audit_log、pg_audit 或 Oracle Unified Audit 的集成能力,所有“审计”动作都只是定期查表、导出结果,再靠系统级手段做文件轮转。
为什么不能直接轮转 Navicat 自身的日志
Navicat 的 scheduler_*.log 是任务调度器自身的运行日志(如“任务开始”“退出码 0”),记录的是 Navicat 是否跑完了,不是数据库干了什么。它不包含 SQL 内容、执行人、IP、时间戳等审计要素,也不支持按大小或天数自动切割。你改不了它的格式,也控制不了它的落盘路径和保留策略。
真正可行的“审计日志轮转”三步链
你需要手动构造一条能反映安全状态的查询(比如查账号锁态、权限变更、新建库),让 Navicat 定期执行并导出为 CSV/Excel,再用操作系统机制做文件归档。关键点如下:
- 查询语句必须返回结构化结果,且字段名清晰(如
locked_count、last_changed);MySQL 8.0+ 要注意mysql.user表字段已变,别照搬 5.7 的写法 - 导出配置里必须勾选「将日志输出到文件」,路径用绝对路径(如
D:\navicat_audit\user_locks_%Y%m%d.csv),且确保运行用户对该目录有写入+创建权限 - 文件名中
%Y%m%d是唯一可用的动态变量;Navicat 不支持%H%i%s级别精度,也**不支持按文件大小触发轮转**——轮转逻辑得交给外部脚本
Windows 下用 PowerShell 实现真正轮转
Navicat 只负责生成单日文件,轮转(压缩旧文件、删除超期、重命名归档)必须由系统脚本补位。例如每天备份后执行:
powershell
# 保留最近 30 天的审计 CSV,其余压缩为 zip 并移走
Get-ChildItem "D:\navicat_audit\user_locks_*.csv" |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
ForEach-Object {
$zipPath = $_.FullName -replace '\.csv$', '.zip'
Compress-Archive -Path $_.FullName -DestinationPath $zipPath
Remove-Item $_.FullName
}
这段脚本不能塞进 Navicat 任务里,得配 Windows Task Scheduler 单独跑,且触发时间要晚于 Navicat 备份任务至少 2 分钟,否则会找不到刚生成的文件。
容易被忽略的权限与静默失败点
计划任务在后台运行时,是以当前 Windows 用户身份(非管理员、非 SYSTEM)执行的。如果导出路径是 C:\Users\Alice\Documents\,而 Navicat 是以服务模式启动的,就可能因 UAC 隔离导致写入失败——且 Navicat 不报错,只跳过导出步骤。最稳的做法是:
- 导出路径设为非用户目录,如
D:\navicat_audit\,提前右键 → 属性 → 安全 → 给当前用户 Full Control - 在连接属性 → 高级 → 勾选「保存密码」,否则计划任务连不上库,整个审计链就断了
- SQL 中禁用
USE db_name和参数化查询(如WHERE created_at > ?),这些在计划任务里会被忽略或解析为空
真正的审计闭环不在 Navicat 界面里,而在你能否把每日导出的 CSV 持续喂给分析脚本、告警规则或 SIEM 系统。Navicat 只是那个帮你把数据“取出来”的搬运工,轮转、归档、告警,都得自己搭骨架。


















