SQL Server 2008中的SQL審計已經變成一個一流的服務器對象。正如前面一篇文章所提到的,現在你甚至可以審計一個要求使用SQL跟蹤或者在前面版本中的其它第三方產品的SELECT語句查詢。但是,雖然使用圖形用戶界面對於處理小的任務是很好的,尤其是第一次學習一些東西時,但是這樣做可能是很乏味的,尤其是如果你重復相同的任務時。這篇文章將和前面的文章一樣通過同類的Transact-SQL語句使用相同的例子。如果你想審計,我們可以假設審計在數據庫中10個或者更多的表,那麼這會使你更容易地做到。我也將使用文件系統來存儲審計對象。我們將使用CREATE SERVER AUDIT完成這個任務。
-- Create Server Audit object
USE master
CREATE SERVER AUDIT testAudit TO FILE(FILEPATH='C:\Temp\SelectAudit\')
GO
這個服務器審計對象負責搜集你想監測的服務器和/或者數據庫級別的行為和行為組並且在實例級別上創建。這也意味著如果你有很多實例在一個服務器上運行,那麼你要為每個實例創建服務器審計對象。接著,我們將在適當的數據庫中創建一個叫做testAudSpec的數據庫審計規范,在本例中,我們將使用AdventureWorks數據庫。我們將使用CREATE DATABASE AUDIT SPECIFICATION語句來完成這個任務。
-- Create an audit specification
USE AdventureWorks
GO
CREATE DATABASE AUDIT SPECIFICATION testAudSpec FOR SERVER AUDIT testAudit
ADD (SELECT ON HumanResources.Employee BY Public)
GO
在這裡我們所作的是只創建一個數據庫審計規范並把它分配到我們之前創建的服務器審計對象中。然後,我們增添數據庫級別的可審計的行為名稱,在本例中是SELECT語句,然後捕捉所有用戶執行的查詢。你可以有多個行為或者行為組以及相關的數據庫審計規范。你也可以創建一個服務器審計規范,它可以審計服務器級別的行為或行為組,比如跟蹤成功或失敗的登錄,更改角色成員等。SQL Server審計行為組和行為的列表可以從聯機幫助和MSCN中得到。
由於默認情況下服務器審計對象和數據庫審計規范在創建之後都不能使用,我們需要使它們可用。要驗證它們的狀態,你可以查詢sys.server_file_audits和
sys.database_audit_specifications系統對象。is_state_enabled字段能告訴我們它們的狀態。
-- Verify Audit objects if turned on (1 = Enabled)
USE master
SELECT is_state_enabled,* FROM sys.server_file_audits
USE AdventureWorks
SELECT is_state_enabled,* FROM sys.database_audit_specifications
GO