审计跟踪触发器生成

时间:2013-10-21 11:02:38

标签: sql sql-server database sql-server-2008 audit-trail

使用Audit Trail系统并决定使用带触发器的Shadow / History表进行操作。

关注此Audit Trail Article并尝试使用CodeSmith Generator tool

我不明白它是如何创建历史表和触发器的。

是否有人能够理解它的工作原理并帮助我。

我试过google了解它。但是没有明确的例子

以下对我来说没有什么是明确的

审计表看起来像这样

 CREATE TABLE [dbo].[<%= AuditTableName %>] (
    [ChangeLogID] [int] IDENTITY (1, 1)  ,
    [OperationType] [varchar] (10) NOT NULL ,
    [ChangeTimestamp] [datetime] NOT NULL ,
    [MadeBy] [varchar] (6)  NOT NULL ,
    [TableChanged] [varchar] (50)  NOT NULL 
 ) ON [PRIMARY]

详细信息表看起来像这样

 CREATE TABLE [dbo].[<%= AuditFieldTableName %>] (
    [FieldName] [varchar] (50) NOT NULL ,
    [ChangeLogID] [int] NOT NULL ,
    [BeforeValue] [sql_variant]  NOT NULL ,
    [AfterValue] [sql_variant] NOT NULL 
 ) ON [PRIMARY]

如何生成并添加触发器以及如何插入AuditFieldTableName值?

1 个答案:

答案 0 :(得分:0)

由于我们在多个表中有不同类型的列,因此您指定的审计表实际上不足以满足原因。我建议使用以下审计表:

TABLE auditEntry (
    auditEntryId           INTEGER      PRIMARY KEY,
    operationType          VARCHAR(10)  NOT NULL,      -- For INSERT / UPDATE / DELETE
    changeTimestamp        DATETIME     NOT NULL,
    madeBy                 VARCHAR(50)  NOT NULL,
    tableName              VARCHAR(30)  not null,      -- stores the name of the table changed
    columnName             VARCHAR(30)  not null,      -- stores the name of column changed
    oldInt                 INTEGER,
    newInt                 INTEGER,
    oldVarchar             VARCHAR(100),
    newVarchar             VARCHAR(100),
    oldDate                DATETIME,
    newDate                DATETIME)

现在我认为,如果你有编写它们的工作知识,那么在你的表上为INSERTUPDATEDELETE编写行级别触发器是一个很小的问题。在MSDN上搜索如何编写这样的触发器,你会没事的。