问题现象
ZJRC zjrc_3.2408 的 SQL 管控列表导出中,“规则描述”列与页面当前审核结果展示不一致。
以 dml_check_index_selectivity 为例(已用现网截图复核):
| 位置 |
实际展示 |
页面当前审核结果(displayMode=ruleDesc) |
建议连库查询时,确保SQL执行计划中使用的索引区分度大于阈值 |
列表接口 audit_result.message |
索引:STRUCT_INDEX1,未超过区分度阈值:70,建议使用超过阈值的索引 |
| 修复前 Excel「规则描述」列 |
写入了 audit_result.message(含具体索引名和阈值) |
原始口述「导出写的是规则描述、页面是规则名称」不够精确。可验收定义是:Excel「规则描述」必须与页面规则固定描述一致,不能写成当次审核动态命中消息。
复现条件
- 基线:
zjrc_3.2408(未合入本修复)
- 数据源:MySQL
- 规则模板启用
dml_check_index_selectivity
- 准备区分度低于阈值的索引(如
STRUCT_INDEX1),并触发 SQL 审核进入 SQL 管控
- 打开 SQL 管控列表,记录「当前审核结果」展示文案
- 导出 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,不更新产品文档
测试影响面
- 动态消息与固定描述明显不同:命中索引区分度规则,页面与 Excel 描述一致,Excel 不含具体索引名
- 单条 SQL 命中多条规则:名称、描述、级别一一对应
- 不同数据库类型存在同名规则:按
DBType + RuleName 匹配
- 自定义规则:导出固定描述
- 已删除或无法查询的规则:描述回退为
RuleName,导出不中断
- 自定义导出列:单独选择或取消「规则名称」「规则描述」
- 特殊字符和长文本:含
&、<、换行时 Excel 可打开且内容完整
留痕
- EE 仓库
actiontech/sqle-ee 创建 Issue 失败:机器人 Token 无 Issues 写权限(403)
- 本 Issue 为 CE 兜底记录,开发与 PR 仍面向
sqle-ee / zjrc_3.2408
问题现象
ZJRC
zjrc_3.2408的 SQL 管控列表导出中,“规则描述”列与页面当前审核结果展示不一致。以
dml_check_index_selectivity为例(已用现网截图复核):displayMode=ruleDesc)建议连库查询时,确保SQL执行计划中使用的索引区分度大于阈值audit_result.message索引:STRUCT_INDEX1,未超过区分度阈值:70,建议使用超过阈值的索引audit_result.message(含具体索引名和阈值)原始口述「导出写的是规则描述、页面是规则名称」不够精确。可验收定义是:Excel「规则描述」必须与页面规则固定描述一致,不能写成当次审核动态命中消息。
复现条件
zjrc_3.2408(未合入本修复)dml_check_index_selectivitySTRUCT_INDEX1),并触发 SQL 审核进入 SQL 管控问题原因
审核结果同时包含两类语义不同的字段:
AuditResult.Message:本次 SQL 生成的动态命中信息,可能包含索引名、阈值等运行时内容Rule.Desc:规则配置中的固定描述页面默认
displayMode=ruleDesc:优先sqleRule.<rule_name>.desc/ 规则模板desc,最后才回退到message。导出原先直接把
AuditResult.Message写入「规则描述」列,没有按DBType + RuleName回查Rule.Desc。因此页面和导出虽然都叫“规则描述”,实际取的不是同一条数据。
修复方案
仅改 SQL 管控列表导出:
AuditResult.RuleNameDBType + RuleName从规则描述缓存取Rule.DescRuleName,导出不中断修复后效果
同一条
dml_check_index_selectivity:dml_check_index_selectivity建议连库查询时,确保SQL执行计划中使用的索引区分度大于阈值STRUCT_INDEX1/未超过区分度阈值:70这类动态消息兼容性
not_compatible,不更新产品文档测试影响面
DBType + RuleName匹配RuleName,导出不中断&、<、换行时 Excel 可打开且内容完整留痕
actiontech/sqle-ee创建 Issue 失败:机器人 Token 无 Issues 写权限(403)sqle-ee/zjrc_3.2408