设计数据库审计字段时,你需要考虑哪些信息对于追踪数据变更、用户行为和合规性检查是有用的。以下是一个较为全面的数据库审计字段设计方案,这些字段可以嵌入到你的数据库表中,或者专门用于审计日志表中。
通用审计字段(可嵌入到业务表中)
-
创建时间(CreatedAt)
- 类型:DATETIME 或 TIMESTAMP
- 默认值:CURRENT_TIMESTAMP
- 描述:记录该条数据被创建的时间。
-
创建者(CreatedBy)
- 类型:通常是整型(用户ID)或字符串(用户名),取决于你的系统如何标识用户
- 默认值:无(需要在应用层设置)
- 描述:记录创建该条数据的用户或系统标识。
-
最后修改时间(UpdatedAt)
- 类型:DATETIME 或 TIMESTAMP
- 默认值:CURRENT_TIMESTAMP(但通常设置为ON UPDATE CURRENT_TIMESTAMP)
- 描述:记录该条数据最后一次被修改的时间。
-
最后修改者(UpdatedBy)
- 类型:整型或字符串
- 默认值:无(需要在应用层设置)
- 描述:记录最后一次修改该条数据的用户或系统标识。
-
删除标记(IsDeleted 或 DeletedAt)
- IsDeleted(布尔型):
- 类型:BOOLEAN
- 默认值:FALSE
- 描述:用于软删除,表示记录是否被逻辑删除。
- DeletedAt(时间戳型):
- 类型:DATETIME 或 TIMESTAMP
- 默认值:NULL
- 描述:记录数据被删除的时间戳,用于软删除。
注意:通常你会选择IsDeleted或DeletedAt中的一个,而不是两者都使用。
- IsDeleted(布尔型):
专用审计日志表字段
如果你希望有更详细的审计跟踪,可以设计一个专门的审计日志表。这样的表将包含关于数据变更、用户操作和系统事件的详细信息。
-
日志ID(LogId)
- 类型:整型(自增主键)
- 描述:审计日志的唯一标识符。
-
操作时间(OperationTime)
- 类型:DATETIME 或 TIMESTAMP
- 默认值:CURRENT_TIMESTAMP
- 描述:操作发生的时间。
-
操作类型(OperationType)
- 类型:整型(枚举对应的ID)或字符串
- 描述:表示执行的操作类型,如CREATE、UPDATE、DELETE、LOGIN等。
-
操作对象(OperationObject)
- 类型:字符串
- 描述:被操作的数据对象的标识或名称,如“用户表-用户ID:123”。
-
变更前数据(BeforeData)
- 类型:JSON或TEXT(取决于数据量)
- 描述:可选,存储操作前的数据状态。
-
变更后数据(AfterData)
- 类型:JSON或TEXT
- 描述:可选,存储操作后的数据状态。
-
执行用户(ExecutedBy)
- 类型:整型(用户ID)或字符串(用户名)
- 描述:执行该操作的用户或系统标识。
-
备注(Remark)
- 类型:TEXT
- 描述:关于此次操作的额外信息或注释。
实施建议
- 性能考虑:对于高并发场景,确保审计日志的写入操作不会对主业务逻辑产生显著影响。考虑使用异步写入、批量处理或专门的日志服务。
- 安全性:确保审计日志的存储和访问都符合安全标准,特别是敏感信息(如用户数据)的加密和访问控制。
- 一致性:在应用层确保所有关键操作都记录了相应的审计信息,避免遗漏。
- 可扩展性:设计审计字段和日志表时,考虑未来的扩展需求,以便轻松添加新的审计维度或操作类型。