为我们的应用程序实现审计跟踪

joh*_* Gu 1 sql-server database-design

我想为我们的系统添加审计跟踪,所以当发生任何添加/删除/更新操作时,我将使用以下信息记录它: -

  1. CRUD操作类型.是添加,删除还是更新.

  2. 已修改的记录ID.

  3. 日期和时间.

现在我发现了两种方法; 要么拥有一个包含以下字段的审计跟踪表: -

  • ID.如123445.
  • CRUD_description.如删除
  • RECORD_ID.如Qaeop12771
  • 日期.如1june2O13

或者有两个表用于CRUD操作的查找表,例如

  • CRUD_ID.如3.
  • CRUD_Description.such如删除.

审计审判将参考上表: -

  • ID.比如123445.
  • CRUD_ID(这将是CRUD表的外键),例如3.
  • RECORD_ID.如Qaeop12771
  • 日期.如1june2O13

那么哪种方法更好?

第二个问题如果我将遵循第二种方法.然后我最好在我的代码中使用CRUD_ID,例如,如果oprration是delete,我的代码可能如下: -

Inset into audit_trail (ID, CRUD_ID, Record_ID, Date) values ( 123445, 3,12771,1june2O13) //CRUID 3 represents delete operation.
Run Code Online (Sandbox Code Playgroud)

最好的祝福

Moh*_*ari 11

从数据库设计的角度来看(忽略数据库功能和应用程序体系结构)我希望通过实现一个名为Trail_History没有任何外键的平面表来实现每个实体和每个字段的更改的审计跟踪表(更改历史记录),列将是:

  1. UserCode:表示进行更改的应用程序用户唯一标识符.(强制)
  2. TransactionCode:任何CRUD操作都需要具有唯一的事务代码(如GUID)(强制)
  3. ChangeDate: 交易日期.(强制)
  4. EntityName:正在操纵的实体(表).(强制)
  5. ObjectId:被操纵主键的实体.
  6. FieldName:实体字段名称.
  7. OldValue:实体字段旧值.
  8. NewValue:实体字段新值
  9. OperationType:CRUD操作鉴别器.(强制)

使用此方法
可以跟踪任何实体(表)
报告将是可读的
仅记录更改.
事务代码将是通过单个操作检测更改的关键点,第二个问题将得到解答.

希望有所帮助.