1. 程式人生 > >SQL Server Audit 功能體驗

SQL Server Audit 功能體驗

SQL Server 的Audit功能可以用來對資料庫進行某種審記。下面用一個簡單的例子來說明一下它的用法和效果。更多詳細用法還請自行翻閱聯機叢書。

業務場景

對使用者dbo對某個表的Delete操作進行審計

建立資料庫審計(Audit)步驟

  1. 建立Server Audit
  2. 建立Database Audit Specification
  3. 分別啟用Server Audit 和 Database Audit Specification
圖形介面
  1. 建立Server Audit 在這裡插入圖片描述

說明:上圖設定的審計日誌輸出到檔案(File),也可以選擇到系統的應用程式/安全日誌(Application Log/Security Log)。

  1. Database Audit Specification 在這裡插入圖片描述
  2. 分別啟用 分別右鍵選擇啟動即可(圖略)
對應 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一列中會有呼叫棧資訊。