"""数据脱敏规则模型 — 定义脱敏规则的存储结构。""" from sqlalchemy import Column, Integer, String, Text, Boolean, DateTime, ForeignKey, func, UniqueConstraint from app.core.database import Base class MaskingRule(Base): """数据脱敏规则,用于动态脱敏查询结果。 通过组合 (instance_id, database, table_name, column_name) 唯一确定一条规则。 """ __tablename__ = "masking_rules" id = Column(Integer, primary_key=True, autoincrement=True) instance_id = Column(Integer, ForeignKey("instances.id"), nullable=False) database = Column(String(100), nullable=False) table_name = Column(String(100), nullable=False) column_name = Column(String(100), nullable=False) mask_type = Column(String(30), nullable=False) # full / partial / hash / truncate / regex mask_config = Column(Text, nullable=True) # JSON 配置 is_enabled = Column(Boolean, default=True) created_at = Column(DateTime, server_default=func.now()) updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) __table_args__ = ( UniqueConstraint( "instance_id", "database", "table_name", "column_name", name="uk_masking_rule_col" ), )