2013-07-09 87 views
32

我不知道,如果這些要求是標準的或沒有,但我很納悶的是有一個解決方案在那裏它可以做到以下幾點:在sql-server中實現審計跟蹤的最佳方法是什麼?

  • 對一組指定的表之前保持紀錄的副本在相關表的審計版本中更改它。

我寧願不必爲每個表格編碼。我想知道是否有可以安裝在MS-SQL之上的解決方案,它可以爲你做到這一點?

+0

這已被問及在這裏回答:http://stackoverflow.com/questions/8873335/how-to-create-generic-sql-server-stored-procedure-to-perform-inserts-into-audit – Alicia

+0

使用觸發選項,以您的要求... – bgs

回答

34

有很多方法可以做到這一點,取決於你使用的是哪個版本的sql server。

這裏有一些

希望這將有助於。

+1

您也可以使用CLR觸發器,它可能會或可能不會更適合您通過TSQL的目的。 – BJury

+0

我將第二次鏈接到這篇文章(因爲它是4年前寫的,他們看起來幾乎相同):https://www.simple-talk.com/sql/database-administration/pop-rivetts-sql -server-faq-no.5-pop-on-the-audit-trail/ 無論如何,這是一個相當老的腳本,應該檢查和更新以支持模式和unicode數據類型(nvarchar,nchar ...) – Jaime

+1

請訪問下面的鏈接數量的方法以及他們的利弊:http://stackoverflow.com/questions/10060408/sql-server-2008-change-data-capture-vs-triggers-in-audit-trail/ 35455760#35455760 – emkays

1

看看觸發器。這些可以用來實現一些東西來滿足你的要求。

+0

謝謝克里斯!我寧願避免觸發器 - 至少讓我的團隊實現觸發器 - 因爲這最終會成爲代碼。有點認爲沒有第三方「插件」可以做到這一點。 – robotwasp

0

看看這篇文章 - Auditing in SQL Server 2008其精美的需要已經存在SQL Server 2008中

審覈功能我還必須提到的是@Microtechie回答指出了一些偉大的文章優勢。閱讀並決定哪一個更容易適應。

5

創建觸發器,它會爲XML這種方式,我們可以記錄所有表相同的表,使之更加靈活

CREATE TABLE [dbo].[AuditAll] (
    AuditId int   NOT NULL IDENTITY(1,1), 
    [DateTime] datetime  NOT NULL, 
    TableName nvarchar(255) NOT NULL, 
    AuditEntry xml   NULL, 

    CONSTRAINT [PK_AuditAll] PRIMARY KEY CLUSTERED (AuditId ASC) 
) 

我只需要「老」的價值觀,所以我只存儲刪除表,插入無論如何,桌子都可以在桌子上看到。

CREATE TRIGGER AuditSimple 
    ON Simple 
    AFTER INSERT,DELETE,UPDATE 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

IF (SELECT COUNT(*) FROM deleted) > 0 
begin 
    Declare @AuditMessage XML 
    --set valut to all xml from deleted table 
    set @AuditMessage = (select * from deleted for xml auto) 

    insert into AuditAll(DateTime, TableName, AuditEntry) 
     values (GetDate(), 'Simple', @AuditMessage) 
end 

END 
GO 

我想這可以很容易地sp_foreach被要求創建於於數據庫的每個表,但我們並沒有在此刻需要的時候,只記得改變你的表名

歡呼

5

您可以嘗試基於第三方點擊式觸發的解決方案,如ApexSQL Audit - SQL Server數據庫的審計工具,該工具可捕獲數據庫中發生的數據更改,包括誰進行了更改,哪些對象受到影響,當它被創建時,以及SQL登錄信息,應用程序用於進行更改的主機和主機。它存儲在一箇中央存儲庫中的所有捕獲的信息並出口他們在打印友好格式

聲明:我作爲ApexSQL

+0

我在我的一個應用程序中使用了ApexSQL。它在審計方面做得很好,但是如果你必須弄清楚使用審計表/查詢應用程序出了什麼問題,那麼它的工作很糟糕。我不會再使用它。 – Viv

0

產品支持工程師,數據庫快照的工作,你可以保持您的數據的只讀副本在那個瞬間。同樣,如果需要備份日誌,您可以在特定的時間段恢復您的信息。

您還可以從日誌中讀取信息以檢索已更改的信息。

另一種不符合您偏好的解決方案是使用觸發器跟蹤更改,但可能需要在每個表上工作。您還可以啓用更改數據捕獲功能來檢測更改,還需要爲每個表啓用此功能,但它需要的代碼少於觸發器。

最後,還有第三方工具,如Apex SQL Trigger,只需點擊幾下鼠標即可自動完成這項工作。

相關問題