Files
opsxsql/backend/app/schemas/audit_rule.py
T
logan 4ac2528f8e fix: 审核引擎优化 + 执行结果结构化展示
后端审核规则修复:
- Redis SEC-001: SET/DEL等常规命令不再误报AUTH要求,改为仅对管理级命令WARNING
- Redis SEC-003: 降级为INFO,排除已由CMD-001拦截的FLUSHDB/FLUSHALL
- Redis key提取: 排除CONFIG/ACL等管理命令,不再把子命令参数误认为key名
- MySQL SEC-006: 新增GRANT ALL/REVOKE ALL全局权限拦截
- MySQL SEC-007: 新增LOAD DATA/LOAD XML拦截
- MySQL SEC-008: 新增SLEEP()/BENCHMARK()时间盲注拦截
- MySQL SEC-009: 新增INTO OUTFILE/DUMPFILE文件写入拦截

前端执行结果结构化:
- TicketDetailPage执行结果从原始JSON改为结构化展示
- 解析JSON展示: 状态徽章+影响行数+耗时+验证状态
- Errors/Warnings逐条渲染: 红色错误框+黄色警告框+具体消息
- 删除废弃的executeStats/renderExecuteStats

其他: 审核规则6分组/慢查询移除/查询数据重命名/AuditLogs修复
测试: 1040 passed, TSC零错误
2026-05-24 01:31:33 +08:00

45 lines
1.5 KiB
Python

from datetime import datetime
from pydantic import BaseModel, ConfigDict, Field
from typing import Optional, Literal
class AuditRuleCreate(BaseModel):
name: str = Field(..., min_length=1, max_length=100)
description: Optional[str] = None
rule_type: Literal["syntax", "performance", "safety", "security", "naming", "DDL", "DML", "DQL", "DCL"]
severity: Literal["error", "warning", "info"] = "warning"
db_type: str = "mysql"
pattern: Optional[str] = None
value: Optional[str] = Field(default=None, max_length=255)
is_enabled: bool = True
message: str = Field(..., min_length=1, max_length=500)
class AuditRuleUpdate(BaseModel):
name: Optional[str] = Field(default=None, min_length=1, max_length=100)
description: Optional[str] = None
rule_type: Optional[Literal["syntax", "performance", "safety", "security", "naming", "DDL", "DML", "DQL", "DCL"]] = None
severity: Optional[Literal["error", "warning", "info"]] = None
db_type: Optional[str] = None
pattern: Optional[str] = None
value: Optional[str] = Field(default=None, max_length=255)
is_enabled: Optional[bool] = None
message: Optional[str] = Field(default=None, min_length=1, max_length=500)
class AuditRuleResponse(BaseModel):
id: int
name: str
description: Optional[str] = None
rule_type: str
severity: str
db_type: str
pattern: Optional[str] = None
value: Optional[str] = None
is_enabled: bool
message: str
created_at: datetime
updated_at: datetime
model_config = ConfigDict(from_attributes=True)