AutoAudit介紹 AutoAudit這個是Paul Nielsen寫的一個開源的審計跟蹤的腳本項目,項目位於https://autoaudit.codeplex.com/上,Paul Nielsen的一篇博客CodeGen to Create Fixed Audit Trail Trigger... ...
AutoAudit介紹
AutoAudit這個是Paul Nielsen寫的一個開源的審計跟蹤的腳本項目,項目位於https://autoaudit.codeplex.com/上,Paul Nielsen的一篇博客CodeGen to Create Fixed Audit Trail Triggers上也介紹了他創建這個項目的前因後果。目前最新的版本為3.30a,官方文檔寫著支持SQL Server 2005, 2008, 2012。根據我的測試,SQL Server 2014也是支持的。看了這個項目最後一次更新時間為2012年,也就是說那個時候SQL Server 2014、SQL Server 2016、SQL Server 2017都還沒有發佈。可以這樣說,AudoAudit這個項目自2012年後,已經停止更新了。
那麼AutoAudit這個腳本能做那些跟蹤審計方面的工作呢?下麵籠統的總結了一下AutoAudit的功能:
1: 審計、跟蹤記錄所有的DDL腳本。
它創建了一個資料庫DDL的觸發器,它會捕獲DDL相關腳本。例如,創建、修改、刪除資料庫對象等。
2: 審計DML(INSERT、UPDATE、DELETE)的腳本以及數據變化。
可以靈活配置、動態監控某個表、或一批表、或者所有表的DML操作,例如INSERT、UPDATE、DELTE操作,可以只捕獲SQL語句,也可以捕獲相關值的變化(記錄修改前的值與修改後的值)。可以設置參數、在被監控的表上動態的生成觸發器等。
AutoAudit部署
AutoAudit的部署是非常簡單的事情,你從官方下載一個AutoAudit的SQL腳本,例如當前版本為AutoAudit 3.30a.sql,你可以修改一些變數或不做修改,在你需要做審計跟蹤的資料庫執行腳本就輕鬆部署了。當然,如果你要搞懂、弄透的話,還得花費一番功夫研究一下腳本。AutoAudit 3.30a.sql的腳本大概6000多行,裡面有大量的註釋,代碼非常優雅、簡潔。個人拜讀起來,感覺就是一件精雕細琢的藝術品,爽心悅目。下麵來簡單介紹一下這個開源項目吧,估計認真看代碼的沒有幾個人。
如果你沒有修改任何參數,執行完這個腳本後,就會在當前資料庫上創建下麵一些對象:
1:資料庫DDL觸發器SchemaAuditDDLTrigger
2:創建一些資料庫對象,如果沒有修改參數@AuditSchema,預設創建在Audit這個Schema下麵。
Table(8個)
[Audit].[AuditAllExclusions] 排除審計、跟蹤的表
[Audit].[AuditBaseTables] 記錄審計、跟蹤表的相關參數,它會取這裡的相關值動態生成相關觸發器。預設為空
[Audit].[AuditDetail] 記錄表數據INSERT、UPDATE、DELETE變化前後的值(可以記錄全部欄位或部分欄位)
[Audit].[AuditDetailArchive] [Audit].[AuditDetail]的歸檔數據。
[Audit].[AuditHeader] 記錄表DML操作的相關用戶、應用程式、以及SQL語句等。
[Audit].[AuditHeaderArchive] [Audit].[AuditDetail]表的數據歸檔表
[Audit].[AuditSettings] AutoAudit的相關參數
[Audit].[SchemaAudit] 記錄資料庫的DDL信息,例如SQL、應用程式等等。
View(5個)
[Audit].[vAudit]
[Audit].[vAuditAll]
[Audit].[vAuditArchive]
[Audit].[vAuditDetailAll]
[Audit].[vAuditHeaderAll]
Procedure(16個)
[Audit].[pAutoAuditArchive]
[Audit].[pAutoAudit]
[Audit].[pAutoAuditRebuild]
[Audit].[pAutoAuditRebuildAll]
[Audit].[pAutoAuditDrop]
[Audit].[pAutoAuditAll]
[Audit].[pAutoAuditSetTriggerState]
[Audit].[pAutoAuditSetTriggerStateAll]
[Audit].[pAutoAuditDropAll]
[Audit].[GenerateIt]
[Audit].[SuspendIt]
[Audit].[ReactivateIt]
[Audit].[RemoveIt]
[Audit].[ProcessExpiredDataAudits]
[Audit].[ProcessDataAuditsCleanup]
[Audit].[ProcessDataAuditsCleanupForAllDb]
表 [Audit].[AuditSettings]是配置信息表,關於AudoAudit的配置信息都位於該表。如果要瞭解、學習AudoAudit這個項目,那麼必須瞭解這些參數。參數具體功能可以參加腳本註釋信息.
SELECT * FROM [Audit].[AuditSettings]
此時,你查詢[Audit].[SchemaAudit],發現資料庫DDL觸發器已經捕獲了你創建視圖、存儲過程等等的DDL腳本
下麵我們來測試一下AutoAudit的功能吧, 如下所示,我們清空[Audit].[SchemaAudit]下數據,然後創建、修改TEST表,具體測試腳本如下,資料庫的DDL觸發器會捕獲相關DDL SQL,當然DML操作是不會被捕獲的。
TRUNCATE TABLE [Audit].[SchemaAudit]
GO
CREATE TABLE TEST(ID INT ,NAME VARCHAR(12));
GO
ALTER TABLE