"""Preset audit rule seed data for MySQL, PostgreSQL, and Redis.""" from typing import List, Dict, Any # ── MySQL 预设规则 ────────────────────────────────────────────── MYSQL_SEED_RULES: List[Dict[str, Any]] = [ { "name": "DDLMultiToCommit", "description": "DDL 允许单个工单提交多条DDL", "rule_type": "DDL", "severity": "info", "db_type": "mysql", "pattern": None, "value": None, "message": "DDL 允许单个工单提交多条DDL语句", }, { "name": "DDLAllowMultiAlter", "description": "DDL 允许多alter", "rule_type": "DDL", "severity": "info", "db_type": "mysql", "pattern": None, "value": None, "message": "DDL 允许在单条ALTER TABLE中使用多个修改操作", }, { "name": "DDLAllowColumnType", "description": "允许字段类型转换", "rule_type": "DDL", "severity": "warning", "db_type": "mysql", "pattern": None, "value": None, "message": "允许字段类型转换,请确认数据兼容性", }, { "name": "DDLAllowChangeColumnPosition", "description": "允许 AFTER/FIRST 修改列位置", "rule_type": "DDL", "severity": "info", "db_type": "mysql", "pattern": None, "value": None, "message": "允许使用 AFTER/FIRST 修改列位置", }, { "name": "DDLEnableDropTable", "description": "允许删表操作", "rule_type": "DDL", "severity": "warning", "db_type": "mysql", "pattern": None, "value": None, "message": "允许执行 DROP TABLE 操作,请确认已备份", }, { "name": "DDLEnablePrimaryKey", "description": "检查表必须包含主键", "rule_type": "DDL", "severity": "error", "db_type": "mysql", "pattern": None, "value": None, "message": "建表必须指定主键", }, { "name": "DDLCheckTableComment", "description": "强制表注释", "rule_type": "DDL", "severity": "warning", "db_type": "mysql", "pattern": None, "value": None, "message": "建表时必须添加表注释(COMMENT)", }, { "name": "DMLAllowInsertNull", "description": "允许 Insert Null 值", "rule_type": "DML", "severity": "info", "db_type": "mysql", "pattern": None, "value": None, "message": "允许 INSERT 语句中包含 NULL 值", }, { "name": "DMLWhere", "description": "强制 DML 语句包含 WHERE 条件", "rule_type": "DML", "severity": "error", "db_type": "mysql", "pattern": None, "value": None, "message": "UPDATE/DELETE 语句必须包含 WHERE 条件", }, { "name": "DDLMaxKeyParts", "description": "单索引字段上限", "rule_type": "DDL", "severity": "warning", "db_type": "mysql", "pattern": None, "value": "8", "message": "单索引包含的字段数不得超过8个", }, { "name": "DDLMaxKey", "description": "单表索引上限", "rule_type": "DDL", "severity": "warning", "db_type": "mysql", "pattern": None, "value": "12", "message": "单表索引数量不得超过12个", }, { "name": "MaxDDLAffectRows", "description": "DDL 最大影响行数", "rule_type": "DDL", "severity": "warning", "db_type": "mysql", "pattern": None, "value": "0", "message": "DDL 最大影响行数为0(不限制)", }, { "name": "DDLMaxCharLength", "description": "CHAR 类型最大长度", "rule_type": "DDL", "severity": "warning", "db_type": "mysql", "pattern": None, "value": "10", "message": "CHAR 类型长度不得超过10,超出请使用 VARCHAR", }, { "name": "MaxTableNameLen", "description": "表名长度限制", "rule_type": "DDL", "severity": "warning", "db_type": "mysql", "pattern": None, "value": "45", "message": "表名长度不得超过45个字符", }, { "name": "DMLMaxInsertRows", "description": "INSERT 最大行数限制", "rule_type": "DML", "severity": "warning", "db_type": "mysql", "pattern": None, "value": "500", "message": "单次 INSERT 最多插入500行", }, ] # ── PostgreSQL 预设规则 ───────────────────────────────────────── POSTGRES_SEED_RULES: List[Dict[str, Any]] = [ { "name": "PGDDLMultiToCommit", "description": "PostgreSQL DDL 允许单个工单提交多条DDL", "rule_type": "DDL", "severity": "info", "db_type": "postgres", "pattern": None, "value": None, "message": "DDL 允许单个工单提交多条DDL语句", }, { "name": "PGDDLAllowColumnType", "description": "PostgreSQL 允许字段类型转换", "rule_type": "DDL", "severity": "warning", "db_type": "postgres", "pattern": None, "value": None, "message": "允许字段类型转换,请确认数据兼容性", }, { "name": "PGDDLEnablePrimaryKey", "description": "PostgreSQL 检查表必须包含主键", "rule_type": "DDL", "severity": "error", "db_type": "postgres", "pattern": None, "value": None, "message": "建表必须指定主键", }, { "name": "PGDDLEnableDropTable", "description": "PostgreSQL 允许删表操作", "rule_type": "DDL", "severity": "warning", "db_type": "postgres", "pattern": None, "value": None, "message": "允许执行 DROP TABLE 操作,请确认已备份", }, { "name": "PGDDLCheckTableComment", "description": "PostgreSQL 强制表注释", "rule_type": "DDL", "severity": "warning", "db_type": "postgres", "pattern": None, "value": None, "message": "建表时必须添加表注释(COMMENT ON TABLE)", }, { "name": "PGDMLWhere", "description": "PostgreSQL 强制 DML 包含 WHERE 条件", "rule_type": "DML", "severity": "error", "db_type": "postgres", "pattern": None, "value": None, "message": "UPDATE/DELETE 语句必须包含 WHERE 条件", }, { "name": "PGDMLAllowInsertNull", "description": "PostgreSQL 允许 Insert Null 值", "rule_type": "DML", "severity": "info", "db_type": "postgres", "pattern": None, "value": None, "message": "允许 INSERT 语句中包含 NULL 值", }, { "name": "PGDDLMaxKeyParts", "description": "PostgreSQL 单索引字段上限", "rule_type": "DDL", "severity": "warning", "db_type": "postgres", "pattern": None, "value": "8", "message": "单索引包含的字段数不得超过8个", }, { "name": "PGDDLMaxKey", "description": "PostgreSQL 单表索引上限", "rule_type": "DDL", "severity": "warning", "db_type": "postgres", "pattern": None, "value": "12", "message": "单表索引数量不得超过12个", }, { "name": "PGMaxTableNameLen", "description": "PostgreSQL 表名长度限制", "rule_type": "DDL", "severity": "warning", "db_type": "postgres", "pattern": None, "value": "63", "message": "表名长度不得超过63个字符", }, { "name": "PGDMLMaxInsertRows", "description": "PostgreSQL INSERT 最大行数限制", "rule_type": "DML", "severity": "warning", "db_type": "postgres", "pattern": None, "value": "500", "message": "单次 INSERT 最多插入500行", }, ] # ── Redis 预设规则 ────────────────────────────────────────────── REDIS_SEED_RULES: List[Dict[str, Any]] = [ { "name": "RedisAllowFlushDB", "description": "Redis 允许 FLUSHDB 操作", "rule_type": "DML", "severity": "warning", "db_type": "redis", "pattern": None, "value": None, "message": "允许执行 FLUSHDB 操作,将清空当前数据库", }, { "name": "RedisMaxKeyLen", "description": "Redis Key 最大长度限制", "rule_type": "DDL", "severity": "warning", "db_type": "redis", "pattern": None, "value": "256", "message": "Key 长度不得超过256个字符", }, { "name": "RedisRequireTTL", "description": "Redis 写入操作必须设置 TTL", "rule_type": "DML", "severity": "error", "db_type": "redis", "pattern": None, "value": None, "message": "写入 Key 时必须设置过期时间(TTL)", }, { "name": "RedisDefaultTTL", "description": "Redis 默认 TTL 值(秒)", "rule_type": "DML", "severity": "info", "db_type": "redis", "pattern": None, "value": "3600", "message": "默认 TTL 为3600秒(1小时)", }, ] # 映射: db_type → 种子规则列表 SEED_RULES_MAP = { "mysql": MYSQL_SEED_RULES, "postgres": POSTGRES_SEED_RULES, "redis": REDIS_SEED_RULES, }