Skip to content

SQL 管控导出规则描述与页面展示不一致(ZJRC) #3371

Description

@actiontech-bot

问题现象

ZJRC zjrc_3.2408 的 SQL 管控列表导出中,“规则描述”列与页面当前审核结果展示不一致。

以 dml_check_index_selectivity 为例(已用现网截图复核):

位置 实际展示
页面当前审核结果(displayMode=ruleDesc) 建议连库查询时,确保SQL执行计划中使用的索引区分度大于阈值
列表接口 audit_result.message 索引:STRUCT_INDEX1,未超过区分度阈值:70,建议使用超过阈值的索引
修复前 Excel「规则描述」列 写入了 audit_result.message(含具体索引名和阈值)

原始口述「导出写的是规则描述、页面是规则名称」不够精确。可验收定义是:Excel「规则描述」必须与页面规则固定描述一致,不能写成当次审核动态命中消息。

复现条件

  1. 基线:zjrc_3.2408(未合入本修复)
  2. 数据源:MySQL
  3. 规则模板启用 dml_check_index_selectivity
  4. 准备区分度低于阈值的索引(如 STRUCT_INDEX1),并触发 SQL 审核进入 SQL 管控
  5. 打开 SQL 管控列表,记录「当前审核结果」展示文案
  6. 导出 Excel,对比「规则名称 / 规则描述」列

问题原因

审核结果同时包含两类语义不同的字段:

  • AuditResult.Message:本次 SQL 生成的动态命中信息,可能包含索引名、阈值等运行时内容
  • Rule.Desc:规则配置中的固定描述

页面默认 displayMode=ruleDesc:优先 sqleRule.<rule_name>.desc / 规则模板 desc,最后才回退到 message。
导出原先直接把 AuditResult.Message 写入「规则描述」列,没有按 DBType + RuleName 回查 Rule.Desc。

因此页面和导出虽然都叫“规则描述”,实际取的不是同一条数据。

修复方案

仅改 SQL 管控列表导出:

  • 「规则名称」列:直接导出 AuditResult.RuleName
  • 「规则描述」列:按 DBType + RuleName 从规则描述缓存取 Rule.Desc
  • 规则不存在时回退到 RuleName,导出不中断
  • 不改审核结果存储、页面接口、扫描导出、整改导出

修复后效果

同一条 dml_check_index_selectivity:

  • 规则名称:dml_check_index_selectivity
  • 规则描述:建议连库查询时,确保SQL执行计划中使用的索引区分度大于阈值
  • Excel 不再出现 STRUCT_INDEX1 / 未超过区分度阈值:70 这类动态消息

兼容性

  • 不改接口契约,不改历史审核结果
  • 仅影响 SQL 管控列表导出 Excel 的「规则名称 / 规则描述」列取值
  • 不标记 not_compatible,不更新产品文档

测试影响面

  1. 动态消息与固定描述明显不同:命中索引区分度规则,页面与 Excel 描述一致,Excel 不含具体索引名
  2. 单条 SQL 命中多条规则:名称、描述、级别一一对应
  3. 不同数据库类型存在同名规则:按 DBType + RuleName 匹配
  4. 自定义规则:导出固定描述
  5. 已删除或无法查询的规则:描述回退为 RuleName,导出不中断
  6. 自定义导出列:单独选择或取消「规则名称」「规则描述」
  7. 特殊字符和长文本:含 &、<、换行时 Excel 可打开且内容完整

留痕

  • EE 仓库 actiontech/sqle-ee 创建 Issue 失败:机器人 Token 无 Issues 写权限(403)
  • 本 Issue 为 CE 兜底记录,开发与 PR 仍面向 sqle-ee / zjrc_3.2408

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions