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的Database Audit規範,在本例中,我們將使用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
在這裡我們所作的是只建立一個Database Audit規範並把它分配到我們之前建立的伺服器審計對象中。然後,我們增添資料庫層級的可審計的行為名稱,在本例中是SELECT語句,然後捕捉所有使用者執行的查詢。你可以有多個行為或者行為組以及相關的Database Audit規範。你也可以建立一個伺服器審計規範,它可以審計伺服器層級的行為或行為組,比如跟蹤成功或失敗的登入,更改角色成員等。SQL Server審計行為組和行為的列表可以從線上說明和MSCN中得到。
由於預設情況下伺服器審計對象和Database Audit規範在建立之後都不能使用,我們需要使它們可用。要驗證它們的狀態,你可以查詢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