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

Sql server 为我们的应用程序实现审计跟踪,sql-server,database-design,Sql Server,Database Design,我想为我们的系统添加一个审计跟踪,因此当发生任何添加/删除/更新操作时,我将使用以下信息记录它:- 积垢操作类型。是添加、删除还是更新 已修改的记录ID 日期和时间 现在我发现有两种方法可以遵循;或者使用包含以下字段的单个审核跟踪表:- 例如123445。 积垢描述。例如删除 记录ID,如Qaeop12771 日期例如2013年6月1日 或者有两个表,一个用于CRUD操作的查找表,例如 积垢ID。例如3。 CRUD_说明。例如删除。 然后,审计试验将参考上表:- ID.例如123445。 CRU

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

积垢操作类型。是添加、删除还是更新

已修改的记录ID

日期和时间

现在我发现有两种方法可以遵循;或者使用包含以下字段的单个审核跟踪表:-

例如123445。 积垢描述。例如删除 记录ID,如Qaeop12771 日期例如2013年6月1日 或者有两个表,一个用于CRUD操作的查找表,例如

积垢ID。例如3。 CRUD_说明。例如删除。 然后,审计试验将参考上表:-

ID.例如123445。 CRUD_ID这将是CRUD表的外键,如3。 记录ID,如Qaeop12771 日期例如2013年6月1日 那么哪种方法更好

第二个问题我是否会遵循第二种方法。那么,在我的代码中使用CRUD_ID是否更可取?例如,如果操作是delete,我的代码可能如下所示:-

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

致以最诚挚的问候

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

UserCode:应用程序用户唯一标识符,表示进行更改的用户。强制性的 TransactionCode:任何CRUD操作都需要一个唯一的事务代码,如GUID必填 变更日期:交易日期。强制性的 EntityName:正在操作的实体表。必需 ObjectId:正在操纵主键的实体。 字段名:实体字段名。 旧值:实体字段旧值。 NewValue:实体字段新值 操作类型:积垢操作鉴别器。强制性的 采用这种方法,任何实体表都可以被跟踪,报告将是可读的,只有更改才会被记录。事务代码将是通过单个操作检测更改的关键点,第二个问题将得到回答。
希望对您有所帮助。

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

UserCode:应用程序用户唯一标识符,表示进行更改的用户。强制性的 TransactionCode:任何CRUD操作都需要一个唯一的事务代码,如GUID必填 变更日期:交易日期。强制性的 EntityName:正在操作的实体表。必需 ObjectId:正在操纵主键的实体。 字段名:实体字段名。 旧值:实体字段旧值。 NewValue:实体字段新值 操作类型:积垢操作鉴别器。强制性的 采用这种方法,任何实体表都可以被跟踪,报告将是可读的,只有更改才会被记录。事务代码将是通过单个操作检测更改的关键点,第二个问题将得到回答。
希望对您有所帮助。

这两种方法确实非常相似

第二种方法的效率稍高,但灵活性较差,因为如果需要新的审核操作,则需要在类型表中插入新记录


您需要审计多少信息的问题更有趣。因为假设三个用户在每次更新记录后,你仍然不知道是谁改变了你的设计。

实际上,这两种方法非常相似

第二种方法的效率稍高,但灵活性较差,因为如果需要新的审核操作,则需要在类型表中插入新记录


您需要审计多少信息的问题更有趣。因为假设三个用户在每次更新记录后,您仍然不知道是谁更改了您的设计。

您的RDBMS是什么?如果您的RDBMS中有审计功能,您是否考虑过任何可用功能?我将使用Sql server 2OO8。但是我无法使用数据库记录这些技术,因为用户将在应用程序级别上定义。另请参见什么是您的RDBMS?如果您的RDBMS中有审计功能,您是否考虑过任何可用功能?我将使用Sql server 2OO8。但我无法使用数据库记录这些技术,因为用户将在应用程序级别上定义。另请参阅,谢谢您的回答,但为什么第二种方法效率更高,但灵活性更低。关于并发更新,我应该有一个insert语句而不是更新-我已经更新了我的原始问题-。因此,在这种情况下,所有并发更新、插入或删除都将记录在审核中。。我说的对吗?谢谢你的回答,但为什么第二种方法会更有效,但灵活性会更低呢。关于concurren t更新,我应该有一个insert语句而不是更新-我已经更新了我的原始问题-。因此,在这种情况下,所有并发更新、插入或删除都将记录在审核中。。我说得对吗?