feat: Phase1安全基线 — 风险等级+审核超时+执行进度+通知脱敏+高危确认+维护窗口 (1119测试)

新增功能:
- ticket_sql_items模型: 逐条SQL执行记录(状态/耗时/影响行数)
- risk_evaluator.py: 4级风险评估(low/medium/high/critical), 支持MySQL/PG/Redis/Mongo
- Ticket模型: 新增risk_level + workflow_id字段
- 审核引擎签名改造: audit(sql, db_type, instance_id=None) 支持EXPLAIN预检
- 审核超时保护: 10s超时跳过审核, 防止工单创建阻塞
- 工单创建自动风险计算 + 审批流匹配(instance.workflow_id优先)
- SQL items查询API: GET /{ticket_id}/sql-items 含进度统计
- 执行器集成: 执行完成后自动更新SQL items逐条状态
- 通知脱敏: password/secret/token自动掩码, SQL预览截断100字符
- 高危操作强制二次确认: high/critical级别需confirmed=true
- 维护窗口控制: system_settings配置执行时间窗口(支持跨午夜)
- 45个新测试: 风险评估24+通知脱敏5+维护窗口2+SQL分类11+配置2
This commit is contained in:
logan committed 2026-05-25 10:25:42 +08:00
1 parent 030f3f2339
commit 7be0bf1a7c
9 files changed
+809 -16

No files matched your search

+28
View File
@@ -0,0 +1,28 @@
"""工单 SQL 逐条执行记录 — 支持执行进度透明展示。
每条 SQL 单独记录执行状态、耗时、影响行数、错误信息。
"""
from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, func
from sqlalchemy.orm import relationship
from app.core.database import Base
class TicketSqlItem(Base):
__tablename__ = "ticket_sql_items"
id = Column(Integer, primary_key=True, autoincrement=True)
ticket_id = Column(Integer, ForeignKey("tickets.id"), nullable=False, index=True)
seq = Column(Integer, nullable=False, comment="SQL 顺序号,从 1 开始")
sql_text = Column(Text, nullable=False, comment="单条 SQL 文本")
sql_type = Column(String(20), nullable=True, comment="SQL 类型: DDL/DML/DQL/SET 等")
status = Column(String(20), default="pending", comment="pending/running/success/failed/skipped")
affected_rows = Column(Integer, default=0)
duration_ms = Column(Integer, default=0, comment="执行耗时(毫秒)")
error_message = Column(Text, nullable=True)
started_at = Column(DateTime, nullable=True)
finished_at = Column(DateTime, nullable=True)
created_at = Column(DateTime, server_default=func.now())
ticket = relationship("Ticket", backref="sql_items")