SQL Server Audit 功能體驗
阿新 • • 發佈:2018-12-11
SQL Server 的Audit功能可以用來對資料庫進行某種審記。下面用一個簡單的例子來說明一下它的用法和效果。更多詳細用法還請自行翻閱聯機叢書。
業務場景
對使用者dbo對某個表的Delete操作進行審計
建立資料庫審計(Audit)步驟
- 建立Server Audit
- 建立Database Audit Specification
- 分別啟用Server Audit 和 Database Audit Specification
圖形介面
- 建立Server Audit
說明:上圖設定的審計日誌輸出到檔案(File),也可以選擇到系統的應用程式/安全日誌(Application Log/Security Log)。
- Database Audit Specification
- 分別啟用 分別右鍵選擇啟動即可(圖略)
對應 T-SQL 命令
-- 1、建立 Server Audit
USE [master]
GO
CREATE SERVER AUDIT [TestAudit_Temp_Bank]
TO FILE
( FILEPATH = N'D:\DB-File'
,MAXSIZE = 1 GB
,MAX_ROLLOVER_FILES = 10
,RESERVE_DISK_SPACE = OFF
)
WITH
( QUEUE_DELAY = 1000
,ON_FAILURE = CONTINUE
)
GO
-- 2、建立 Database Audit Specification
USE [MyDB]
GO
CREATE DATABASE AUDIT SPECIFICATION [TestAudit_Temp_Bank_MyDB]
FOR SERVER AUDIT [TestAudit_Temp_Bank]
ADD (DELETE ON OBJECT::[dbo].[temp_bank] BY [dbo])
-- 3、分別啟用
ALTER SERVER AUDIT [TestAudit_Temp_Bank] WITH (STATUS = ON)
GO
ALTER DATABASE AUDIT SPECIFICATION [TestAudit_Temp_Bank_MyDB] WITH (STATUS = ON)
GO
效果
用資料庫擁有者賬號(會對映到使用者dbo)執行對錶temp_bank的Delete語句之後,用 sys.fn_get_audit_file函式檢視審計日誌:
SELECT DATEADD(mi,DATEDIFF(mi,GETUTCDATE(),GETDATE()),event_time) AS RealEventTime,*
FROM sys.fn_get_audit_file ('D:\DB-File\TestAudit_Temp_Bank_AC916F20-A23F-4244-8509-5E3B3ED51445_0_131822638146730000.sqlaudit',default,default);
結果:
1.日誌中的EventTime實際是UTC時間,查詢SQL中轉換為了本地時間 2.不管執行的Delete語句是否真的刪除了資料(可能Where條件不滿足),均會被記錄。 3. 如果Delete語句在儲存過程中,審計也會被記錄,在Additional Informaiton一列中會有呼叫棧資訊。