簡體   English   中英

表格審核軌跡

[英]AUDIT TRAIL OF TABLES

我想對特定表進行審計跟蹤,例如在表中插入,更新,刪除的內容,所有這些日志都保存在一個表中,我正在使用sql server 2012。 誰能幫助我實現這一目標?

請注意- 游標使用受到限制

在該表上創建一個after觸發器,並將記錄插入到日志表中。

create trigger <trigger_name> after insert/update/delete/ on 
table <orig table>
  begin
     insert into the log tables ('all the fields that you require');
  end 

這可以使用Triggers實現。 如果表上發生大量的插入,刪除和更新操作,觸發器將使DML操作變慢。 如果是小表,則可以按如下所示創建TRIGGER,以根據發生的操作將行記錄到另一個表中。

您可以使用Inserted and Deleted魔術表,這些表保存觸發器中正在插入和刪除的行。

如果您需要使用CDC (更改數據捕獲)對審核進行更多控制,則還有另一種選擇。

CREATE TABLE TrailTable
(
    Id INT,
    Name VARCHAR(100)
);

CREATE TABLE TrailTableLog
(
    Id INT,
    Name VARCHAR(100),
    Action CHAR(3)
);


Insert Into TrailTable VALUES (1,'Vi');
Insert Into TrailTable VALUES (2,'Vr');
Insert Into TrailTable VALUES (3,'An');
Insert Into TrailTable VALUES (4,'Ma');

CREATE TRIGGER dbo.TRG_IDU_TrailTable
ON dbo.TrailTable
AFTER INSERT, UPDATE, DELETE
AS 
BEGIN
    SET NOCOUNT ON;

    DECLARE @Action as char(1);
    SET @Action = (CASE WHEN EXISTS(SELECT * FROM INSERTED)
                         AND EXISTS(SELECT * FROM DELETED)
                        THEN 'U'  -- Set Action to Updated.
                        WHEN EXISTS(SELECT * FROM INSERTED)
                        THEN 'I'  -- Set Action to Insert.
                        WHEN EXISTS(SELECT * FROM DELETED)
                        THEN 'D'  -- Set Action to Deleted.
                        ELSE NULL -- Skip. It may have been a "failed delete".   
                    END)

    IF(@Action = 'I')
    BEGIN
        INSERT INTO TRG_IDU_TrailTable (Id, Name, Action)
        SELECT Id, Name, 'I' FROM INSERTED;
    END

    IF(@Action = 'D')
    BEGIN
        INSERT INTO TRG_IDU_TrailTable (Id, Name, Action)
        SELECT Id, Name, 'D' FROM DELETED;
    END

    IF(@Action = 'U')
    BEGIN

        INSERT INTO TRG_IDU_TrailTable (Id, Name, Action)
        SELECT Id, Name, 'U-D' FROM INSERTED; -- Records Deleted to Update

        INSERT INTO TRG_IDU_TrailTable (Id, Name, Action)
        SELECT Id, Name, 'U-I' FROM INSERTED; --Records Inserted to Update
    END

END

嘗試使用CDC(更改數據捕獲) 一個非常有用的工具,將有助於管理審計跟蹤

閱讀來自MSDN的文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM