Back to blog
Sep 25, 2024
2 min read

数据库审计字段设计

数据库审计字段如何设计?

设计数据库审计字段时,你需要考虑哪些信息对于追踪数据变更、用户行为和合规性检查是有用的。以下是一个较为全面的数据库审计字段设计方案,这些字段可以嵌入到你的数据库表中,或者专门用于审计日志表中。

通用审计字段(可嵌入到业务表中)

  1. 创建时间(CreatedAt)

    • 类型:DATETIME 或 TIMESTAMP
    • 默认值:CURRENT_TIMESTAMP
    • 描述:记录该条数据被创建的时间。
  2. 创建者(CreatedBy)

    • 类型:通常是整型(用户ID)或字符串(用户名),取决于你的系统如何标识用户
    • 默认值:无(需要在应用层设置)
    • 描述:记录创建该条数据的用户或系统标识。
  3. 最后修改时间(UpdatedAt)

    • 类型:DATETIME 或 TIMESTAMP
    • 默认值:CURRENT_TIMESTAMP(但通常设置为ON UPDATE CURRENT_TIMESTAMP)
    • 描述:记录该条数据最后一次被修改的时间。
  4. 最后修改者(UpdatedBy)

    • 类型:整型或字符串
    • 默认值:无(需要在应用层设置)
    • 描述:记录最后一次修改该条数据的用户或系统标识。
  5. 删除标记(IsDeleted 或 DeletedAt)

    • IsDeleted(布尔型):
      • 类型:BOOLEAN
      • 默认值:FALSE
      • 描述:用于软删除,表示记录是否被逻辑删除。
    • DeletedAt(时间戳型):
      • 类型:DATETIME 或 TIMESTAMP
      • 默认值:NULL
      • 描述:记录数据被删除的时间戳,用于软删除。

    注意:通常你会选择IsDeleted或DeletedAt中的一个,而不是两者都使用。

专用审计日志表字段

如果你希望有更详细的审计跟踪,可以设计一个专门的审计日志表。这样的表将包含关于数据变更、用户操作和系统事件的详细信息。

  1. 日志ID(LogId)

    • 类型:整型(自增主键)
    • 描述:审计日志的唯一标识符。
  2. 操作时间(OperationTime)

    • 类型:DATETIME 或 TIMESTAMP
    • 默认值:CURRENT_TIMESTAMP
    • 描述:操作发生的时间。
  3. 操作类型(OperationType)

    • 类型:整型(枚举对应的ID)或字符串
    • 描述:表示执行的操作类型,如CREATE、UPDATE、DELETE、LOGIN等。
  4. 操作对象(OperationObject)

    • 类型:字符串
    • 描述:被操作的数据对象的标识或名称,如“用户表-用户ID:123”。
  5. 变更前数据(BeforeData)

    • 类型:JSON或TEXT(取决于数据量)
    • 描述:可选,存储操作前的数据状态。
  6. 变更后数据(AfterData)

    • 类型:JSON或TEXT
    • 描述:可选,存储操作后的数据状态。
  7. 执行用户(ExecutedBy)

    • 类型:整型(用户ID)或字符串(用户名)
    • 描述:执行该操作的用户或系统标识。
  8. 备注(Remark)

    • 类型:TEXT
    • 描述:关于此次操作的额外信息或注释。

实施建议

  • 性能考虑:对于高并发场景,确保审计日志的写入操作不会对主业务逻辑产生显著影响。考虑使用异步写入、批量处理或专门的日志服务。
  • 安全性:确保审计日志的存储和访问都符合安全标准,特别是敏感信息(如用户数据)的加密和访问控制。
  • 一致性:在应用层确保所有关键操作都记录了相应的审计信息,避免遗漏。
  • 可扩展性:设计审计字段和日志表时,考虑未来的扩展需求,以便轻松添加新的审计维度或操作类型。