[鐵人賽][Denali 新特性探險30]SQL Server Audit Enhancements

[鐵人賽][Denali 新特性探險30]SQL Server Audit Enhancements

概述

稽核功能在Denali這版中有不少改善,好比錯誤操作選項:如果稽核本身錯誤無法寫入紀錄,

你可以選擇:1.繼續 2.關閉SERVER 3.失敗作業(預設選項=繼續)。

過濾條件:你可以針對某個登入或使用者….等執行稽核作業。

還有動作類型多了使用者定義稽核、新增TSQL-stack資訊..等,

這些改善使得稽核功能變得更有彈性及可用性,下面我將簡單實際操作使用者自訂稽核過程。

 

建立稽核(Using SSMS)

image

 

過濾條件(稽核SA)

select * from sys.server_principals

image

確認 sa 的principal_id。

 

image

輸入 server_principal_id=1。

 

建立伺服器稽核規格(Using SSMS)

image

稽核動作類型選擇 USER_DEFINED_AUDIT_GROUP。

 

建立稽核(Using TSQL)

CREATE SERVER AUDIT [Audit-test1]
TO FILE 
(    FILEPATH = N'e:\db1_audit'
    ,MAXSIZE = 0 MB
    ,MAX_FILES = 5
    ,RESERVE_DISK_SPACE = OFF
)
WITH
(    QUEUE_DELAY = 1000
    ,ON_FAILURE = CONTINUE
)
WHERE (server_principal_id=1)
GO
alter server audit [Audit-test1] with(state = on )

 

 

 

建立伺服器稽核規格(Using TSQL)

CREATE SERVER AUDIT SPECIFICATION [ServerAuditSpecification-test]
FOR SERVER AUDIT [Audit-test1]
ADD (USER_DEFINED_AUDIT_GROUP)
with(state=on)
GO

 

 

 

啟用稽核

image

 

建立兩個store procedure內含執行sp_audit_write

create proc usp_getA
as
select * from dbo.A;
declare @myinfo nvarchar(1000);
set @myinfo=N'總共筆數:' +cast(@@rowcount as varchar(10));
exec sp_audit_write @user_defined_event_id =8888 , 
 @succeeded = 1 , @user_defined_information = @myinfo;

	
create proc usp_getAA
as
exec dbo.usp_getA
declare @myinfo nvarchar(1000);
set @myinfo=N'SP 中執行另一個SP';
exec sp_audit_write @user_defined_event_id =8888 , 
 @succeeded = 1 , @user_defined_information = @myinfo;

 

 

 

測試使用者自訂稽核

image

 

查看稽核紀錄

image

這裡沒有任何紀錄是正常的,因為我的稽核篩選條件是針對 SA,所以下面我將使用SA登入後再來測試。

 

使用SA登入

image

變更連接。

 

image

輸入密碼。

 

執行SP

image

 

查看稽核紀錄(這裡我分段擷取)

image

動作識別碼為:User Defined Audit。

 

image

確認工作階段為 sa。

 

image

可以看到執行的陳述式。

 

image

Denali 稽核會擷取TSQL_stack資訊。

 

image

這裡就可以看到我們自行定義的事件識別碼和資訊。

 

接下來執行另一個SP,就可以明顯感受到其他資訊欄位的作用。

image

 

image

Level=2 ,object_name=usp_getAA,Level=3,object_name=usp_getA。

 

image

分別擷取到各自SP的使用者定義資訊。

 

參考 CREATE SERVER AUDIT (Transact-SQL)

 

 

鐵人賽第四屆心得:

這是我個人第三次參加IT邦幫忙所舉辦的鐵人賽(第二、三、四屆),

每一屆都是自我學習成長的一種挑戰,挑戰連續30天在工作下班和休閒假日之餘分享學習心得筆記。

而這屆我分享的題目是: MS SQL Server新特性探險:探險代碼 Denali

這30天中我總共分享了 Denali 15個開發面新特性、2個管理面新特性、1個效能面新特性

、1個安全面特性改善和 SSIS 新特性,雖然無法全部並仔細介紹 Denali 所有相關新特性,

但這30天讓自己真的相當充實,也終於可以不用繼續站 00:00~02:00 "棟樑"哨,

今天也替自己連三屆鐵人賽畫下完美句點。