SQL Server 2008 將審計提升為第一級伺服器物件,支援以 T-SQL 建立 伺服器審計、資料庫審計規格,針對 SELECT 等 DML 作業進行細粒度審計,結果寫入檔案系統,無需 Profiler 或第三方工具。
USE master;
CREATE SERVER AUDIT SelectAudit
TO FILE (FILEPATH = 'C:\Audits\SelectAudit\',
MAXSIZE = 1 GB,
MAX_ROLLOVER_FILES = 10,
RESERVE_DISK_SPACE = ON)
WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
-- QUEUE_DELAY 1000ms 非同步寫入,效能影響極小
-- ON_FAILURE = CONTINUE 避免審計失敗導致資料庫掛起
USE AdventureWorks;
CREATE DATABASE AUDIT SPECIFICATION SelectSpec
FOR SERVER AUDIT SelectAudit
ADD (SELECT ON SCHEMA::HumanResources BY [public]) -- 審計 public 角色對 HR 結構描述的 SELECT
WITH (STATE = ON); -- 立即啟用
ALTER SERVER AUDIT SelectAudit WITH (STATE = ON);
-- 檢視狀態
SELECT name, is_state_enabled FROM sys.server_file_audits;
SELECT name, is_state_enabled FROM sys.database_audit_specifications;
SELECT * FROM sys.fn_get_audit_file('C:\Audits\SelectAudit\*', DEFAULT, DEFAULT);
-- 重要欄位:event_time, action_id, succeeded, server_principal_name, database_name, object_name, statement
CREATE DATABASE AUDIT SPECIFICATION MultiTableSelectSpec
FOR SERVER AUDIT SelectAudit
ADD (SELECT ON OBJECT::Sales.SalesOrderHeader BY [public]),
ADD (SELECT ON OBJECT::Sales.SalesOrderDetail BY [public]),
ADD (SELECT ON SCHEMA::Production BY [db_datareader])
WITH (STATE = ON);
CREATE SERVER AUDIT SPECIFICATION LoginAuditSpec
FOR SERVER AUDIT SelectAudit
ADD (FAILED_LOGIN_GROUP),
ADD (SUCCESSFUL_LOGIN_GROUP),
ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP)
WITH (STATE = ON);
MAXSIZE、MAX_ROLLOVER_FILES 防止磁碟爆滿。SQL Server 2008 內建審計以 T-SQL 完整可腳本化、可版控、可自動化部署,配合檔案目標非同步寫入,實現生產環境可接受的 SELECT 審計能力。