问题描述
用户通过数据查询页面成功执行 SQL 后,SQL 审计事件已经生成并落库,但在“日志审计”页面按默认操作时间范围查询时看不到记录。清空“操作时间”条件后记录可以出现。
复现步骤
-
使用普通账号(现场复现账号为 pika)执行:
select * from `aa_revise_test11`;
-
打开“系统管理 / 日志审计”页面。
-
使用页面默认的操作时间范围查询。
-
观察不到刚刚执行的 SQL。
-
清空“操作时间”筛选条件后重新查询,记录出现。
实际结果
因此不是审计事件未生成或未落库,而是时间条件将记录过滤掉。
根因分析
时间字段和时区处理不一致:
- 前端
frontend/src/views/system/SqlLog.vue 构造查询时间时固定减去 8 小时;
- 后端
backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmExecSqlAuditMapper.xml 使用该范围过滤 gmt_create;
- 页面实际展示和排序使用的是
operate_time。
这会导致东八区环境下按操作时间查询时遗漏已存在的审计记录。
另外,页面刷新不会更新查询结束时间,页面打开后新产生的 SQL 也可能继续被旧时间窗口遗漏。
期望结果
- “操作时间”筛选应基于
operate_time,并使用一致、明确的时区语义。
- 页面默认时间范围能够查到刚执行并成功落库的 SQL。
- 点击刷新时应更新查询结束时间,能够包含页面打开后产生的新记录。
- 清空时间条件与设置等价完整时间范围时,结果集合应保持一致。
建议修复
- 将 Mapper 的时间范围过滤字段由
gmt_create 调整为 operate_time。
- 统一前后端时间传递与时区转换,避免固定减 8 小时与数据库本地时间混用。
- 刷新查询时重新计算结束时间。
- 增加东八区环境下的审计时间范围回归测试。
问题描述
用户通过数据查询页面成功执行 SQL 后,SQL 审计事件已经生成并落库,但在“日志审计”页面按默认操作时间范围查询时看不到记录。清空“操作时间”条件后记录可以出现。
复现步骤
使用普通账号(现场复现账号为
pika)执行:打开“系统管理 / 日志审计”页面。
使用页面默认的操作时间范围查询。
观察不到刚刚执行的 SQL。
清空“操作时间”筛选条件后重新查询,记录出现。
实际结果
执行侧
sql_audit.log已生成完整的[START]与[SUCCESS]事件。数据库中对应审计记录已经存在,现场记录 ID 为
36、37,状态均为SUCCESS。控制台实际记录的 SQL 为:
同一个查询时间范围:
gmt_create只能返回 4 条;operate_time可以返回 33 条,并包含上述两条记录。因此不是审计事件未生成或未落库,而是时间条件将记录过滤掉。
根因分析
时间字段和时区处理不一致:
frontend/src/views/system/SqlLog.vue构造查询时间时固定减去 8 小时;backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmExecSqlAuditMapper.xml使用该范围过滤gmt_create;operate_time。这会导致东八区环境下按操作时间查询时遗漏已存在的审计记录。
另外,页面刷新不会更新查询结束时间,页面打开后新产生的 SQL 也可能继续被旧时间窗口遗漏。
期望结果
operate_time,并使用一致、明确的时区语义。建议修复
gmt_create调整为operate_time。