merge: SQL平台代码v1 优化包合并 — 193条审核规则 + 16页面UI优化

后端新增 (Step 1):
- mysql_audit_rules.py: 63条 MySQL审核规则 (DDL 36 + DML 9 + 命名 5 + 性能 5 + 安全 5)
- redis_audit_rules.py: 43条 Redis审核规则 (KEY管理 10 + 命令安全 12 + 数据结构 8 + 性能 8 + 安全 5)
- mongodb_audit_rules.py: 42条 MongoDB审核规则 (集合管理 + 查询安全 + 聚合管道 + 写入安全 + 性能)
- postgres_audit_rules.py: 45条 PostgreSQL审核规则 (DDL 18 + DML 8 + DQL 6 + 安全 6 + 性能 7)

后端合并 (Step 2):
- audit_engine_v2.py: 新增4个DB规则模块import (100+→200+规则)
- audit_rule_seeds.py: 新增30条MongoDB种子规则 + 别名映射
- audit_rule.py: 新增数据库类型别名 (postgresql→postgres, pg→postgres, mongo→mongodb)

前端优化 (Step 4) — 16页面全覆盖:
- InstancePage, WorkflowPage, TicketsPage, TicketCreatePage, TicketDetailPage
- UsersPage, SlowQueryPage, DataDictionaryPage, Dashboard
- InstanceGroupPage, AuditLogsPage, QueriesPage, AuditRulesPage, RolesPage
- useAuth.tsx, SqlEditor.tsx

后端测试 895/895 通过, 前端 tsc --noEmit 通过
This commit is contained in:
logan committed 2026-05-23 16:46:13 +08:00
1 parent e1ba8b3327
commit 58eb78c987
24 files changed
+16333 -2225

No files matched your search

+316 -1
View File
@@ -1,4 +1,4 @@
"""Preset audit rule seed data for MySQL, PostgreSQL, and Redis."""
"""Preset audit rule seed data for MySQL, PostgreSQL, Redis, and MongoDB."""
from typing import List, Dict, Any
@@ -270,6 +270,320 @@ POSTGRES_SEED_RULES: List[Dict[str, Any]] = [
},
]
# ── MongoDB 预设规则 ────────────────────────────────────────────
MONGODB_SEED_RULES: List[Dict[str, Any]] = [
{
"name": "MongoDB集合命名规范(snake_case)",
"description": "MongoDB 集合名应使用小写下划线命名(snake_case)",
"rule_type": "DDL",
"severity": "warning",
"db_type": "mongodb",
"pattern": r"^[a-z][a-z0-9_]*$",
"value": None,
"message": "集合名不符合 snake_case 命名规范,应使用小写下划线格式",
},
{
"name": "MongoDB集合名最大长度限制",
"description": "MongoDB 集合名最大长度为 64 字节",
"rule_type": "DDL",
"severity": "warning",
"db_type": "mongodb",
"pattern": None,
"value": "64",
"message": "集合名长度超过64字节,请缩短集合名",
},
{
"name": "MongoDB禁止删除集合",
"description": "生产环境禁止执行删除集合操作",
"rule_type": "DDL",
"severity": "error",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "禁止执行删除集合操作,数据将永久丢失",
},
{
"name": "MongoDB禁止删除数据库",
"description": "禁止执行 dropDatabase 操作",
"rule_type": "DDL",
"severity": "error",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "禁止执行 dropDatabase 操作,将删除整个数据库",
},
{
"name": "MongoDB禁止删除索引",
"description": "禁止执行删除索引操作",
"rule_type": "DDL",
"severity": "error",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "禁止执行删除索引操作,可能导致查询性能急剧下降",
},
{
"name": "MongoDB推荐Schema Validator",
"description": "创建集合时建议使用 JSON Schema Validator",
"rule_type": "DDL",
"severity": "info",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "建议为集合添加 JSON Schema Validator 以约束文档结构",
},
{
"name": "MongoDB查询必须带filter",
"description": "find/delete/update 操作必须包含 filter 条件",
"rule_type": "DQL",
"severity": "error",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "查询/更新/删除操作缺少 filter 条件,将操作全集合数据",
},
{
"name": "MongoDB推荐指定projection",
"description": "查询推荐指定 projection 限制返回字段",
"rule_type": "DQL",
"severity": "info",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "查询未指定 projection,建议添加 projection 限制返回字段",
},
{
"name": "MongoDB禁止$where/$function",
"description": "禁止使用 $where 和 $function 执行 JavaScript",
"rule_type": "DQL",
"severity": "error",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "禁止使用 $where/$function 执行 JavaScript,存在严重安全风险",
},
{
"name": "MongoDB禁止前缀模糊匹配",
"description": "禁止正则表达式前缀模糊匹配,无法有效使用索引",
"rule_type": "DQL",
"severity": "warning",
"db_type": "mongodb",
"pattern": r'/\^|"\$regex"\s*:\s*"\^',
"value": None,
"message": "前缀模糊匹配无法有效使用索引,建议调整查询策略",
},
{
"name": "MongoDB查询返回结果上限",
"description": "查询返回结果建议不超过 10000 条",
"rule_type": "DQL",
"severity": "warning",
"db_type": "mongodb",
"pattern": None,
"value": "10000",
"message": "查询未设置 limit 或 limit 超过 10000 条,建议分页查询",
},
{
"name": "MongoDB禁止聚合$out/$merge",
"description": "聚合管道禁止 $out/$merge 写操作",
"rule_type": "DQL",
"severity": "error",
"db_type": "mongodb",
"pattern": r'"\$(out|merge)"',
"value": None,
"message": "禁止在聚合管道中使用 $out/$merge 阶段,可能覆盖现有集合",
},
{
"name": "MongoDB聚合管道阶段数上限",
"description": "聚合管道阶段数建议不超过 20 个",
"rule_type": "DQL",
"severity": "warning",
"db_type": "mongodb",
"pattern": None,
"value": "20",
"message": "聚合管道阶段数超过20个,请优化查询结构",
},
{
"name": "MongoDB$unwind大数据量警告",
"description": "$unwind 展开数组可能导致文档数量急剧膨胀",
"rule_type": "DQL",
"severity": "warning",
"db_type": "mongodb",
"pattern": r'"\$unwind"',
"value": None,
"message": "$unwind 可能急剧增加文档数量,请确认数组字段元素数量",
},
{
"name": "MongoDB批量写入上限",
"description": "批量写入建议不超过 1000 条",
"rule_type": "DML",
"severity": "warning",
"db_type": "mongodb",
"pattern": None,
"value": "1000",
"message": "批量写入超过1000条,请分批写入",
},
{
"name": "MongoDBupdateMany必须带条件",
"description": "updateMany 必须包含 filter 条件",
"rule_type": "DML",
"severity": "error",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "updateMany 操作缺少 filter 条件,将更新全集合文档",
},
{
"name": "MongoDBdeleteMany必须带条件",
"description": "deleteMany 必须包含 filter 条件",
"rule_type": "DML",
"severity": "error",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "deleteMany 操作缺少 filter 条件,将删除全集合文档",
},
{
"name": "MongoDB禁止unset关键字段",
"description": "禁止 $unset 关键字段(_id, create_time等)",
"rule_type": "DML",
"severity": "error",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "禁止使用 $unset 删除关键字段,可能导致数据完整性问题",
},
{
"name": "MongoDB禁止重命名集合",
"description": "禁止执行 renameCollection 操作",
"rule_type": "DML",
"severity": "error",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "禁止重命名集合,可能导致应用连接失败",
},
{
"name": "MongoDB禁止绕过文档验证",
"description": "禁止 bypassDocumentValidation: true",
"rule_type": "DML",
"severity": "error",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "禁止设置 bypassDocumentValidation 绕过 Schema 验证",
},
{
"name": "MongoDB单文档大小限制",
"description": "单文档大小建议不超过 10MB 警告阈值",
"rule_type": "DML",
"severity": "warning",
"db_type": "mongodb",
"pattern": None,
"value": "10485760",
"message": "文档大小超过10MB警告阈值,建议拆分或精简文档",
},
{
"name": "MongoDB禁止嵌套深度超过5层",
"description": "文档嵌套深度建议不超过 5 层",
"rule_type": "DML",
"severity": "warning",
"db_type": "mongodb",
"pattern": None,
"value": "5",
"message": "文档嵌套深度超过5层,建议优化文档结构",
},
{
"name": "MongoDB禁止db.eval()",
"description": "禁止 db.eval() 执行 JavaScript",
"rule_type": "security",
"severity": "error",
"db_type": "mongodb",
"pattern": r'\bdb\.eval\s*\(',
"value": None,
"message": "禁止 db.eval() 执行 JavaScript,存在严重安全风险",
},
{
"name": "MongoDB禁止操作系统集合",
"description": "禁止操作系统集合",
"rule_type": "security",
"severity": "error",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "禁止操作系统集合,存在安全风险",
},
{
"name": "MongoDB禁止MapReduce",
"description": "禁止使用 mapReduce,使用聚合管道替代",
"rule_type": "security",
"severity": "error",
"db_type": "mongodb",
"pattern": r'\bmapReduce\b',
"value": None,
"message": "禁止 mapReduce,请使用聚合管道替代",
},
{
"name": "MongoDB防止$cmd注入",
"description": "禁止直接操作 $cmd 集合",
"rule_type": "security",
"severity": "error",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "禁止直接操作 $cmd 集合,存在注入攻击风险",
},
{
"name": "MongoDB敏感操作审计日志",
"description": "删除、更新等敏感操作应记录审计日志",
"rule_type": "security",
"severity": "info",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "敏感操作应确保已记录审计日志,便于安全追踪",
},
{
"name": "MongoDB缺少索引查询警告",
"description": "查询条件字段应创建索引",
"rule_type": "performance",
"severity": "warning",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "查询条件字段缺少索引可能导致全集合扫描",
},
{
"name": "MongoDB全集合扫描警告",
"description": "缺少 filter 条件将导致全集合扫描",
"rule_type": "performance",
"severity": "warning",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "查询缺少过滤条件,将导致全集合扫描",
},
{
"name": "MongoDB复合索引字段顺序建议",
"description": "复合索引字段顺序应遵循 ESR 规则",
"rule_type": "performance",
"severity": "info",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "建议遵循 ESR 规则设计复合索引: 等值 > 排序 > 范围",
},
{
"name": "MongoDB分片键选择建议",
"description": "分片集合应选择高基数字段作为分片键",
"rule_type": "performance",
"severity": "info",
"db_type": "mongodb",
"pattern": None,
"value": None,
"message": "建议选择高基数均匀分布字段作为分片键",
},
]
# ── Redis 预设规则 ──────────────────────────────────────────────
REDIS_SEED_RULES: List[Dict[str, Any]] = [
{
@@ -319,4 +633,5 @@ SEED_RULES_MAP = {
"mysql": MYSQL_SEED_RULES,
"postgres": POSTGRES_SEED_RULES,
"redis": REDIS_SEED_RULES,
"mongodb": MONGODB_SEED_RULES,
}