MySQL 审核网关上线前:分层配置、摘要校验和观察模式
SQL 审核网关上线最怕配置漂移:白名单、超时、审计和阻断开关可能在实例间不一致。把配置做成有版本摘要、可审查且能快速回退的发布物。
配置项分层管理
规则、阈值、白名单和开关应分别管理。规则说明要写清触发条件和预期动作;白名单要有业务归属与失效时间;阻断开关默认关闭,先在观察模式积累证据。敏感连接信息不应放进规则文件或日志,应通过部署环境提供。
| 配置类别 | 例子 | 发布要求 |
|---|---|---|
| 语法规则 | 禁止无条件写入 | 单元测试与规则编号 |
| 风险阈值 | 预估扫描行数门槛 | 按业务域评审 |
| 白名单 | 已验证的 SQL 指纹 | 归属、理由、过期时间 |
| 行为开关 | 观察、告警、阻断 | 可在不重启时回退 |
用摘要比较配置,而不是复制全文
import hashlib import json def config_digest(config: dict) -> str: payload = json.dumps(config, sort_keys=True, separators=(",", ":")) return hashlib.sha256(payload.encode()).hexdigest()[:12] def compatible(expected: dict, current: dict) -> bool: return config_digest(expected) == config_digest(current)部署前输出配置摘要、规则版本和开关状态即可,不需要把 SQL 文本、账号或地址写进日志。实例摘要不一致时停止扩大范围,先找出差异。
最后的上线检查
确认观察模式已覆盖典型业务 SQL,误报有处理路径;确认网关故障时的默认行为是放行还是降级;确认审计记录已经脱敏且有保留期限。上线后观察命中率、阻断率和请求错误率。任何异常增长都应能一键回到观察模式,而不是临时修改配置文件。