使用SQL Audit,測試版本為2008 SP3
--1.建立稽核並啟用
USE [master]
GO
/****** Object: Audit [Audit-DEMO-0311] Script Date: 03/15/2012 00:03:37 ******/
CREATE SERVER AUDIT [Audit-DEMO-0311]
TO FILE
( FILEPATH = N'D:\TEMP\'
,MAXSIZE = 0 MB
,MAX_ROLLOVER_FILES = 2147483647
,RESERVE_DISK_SPACE = OFF
)
WITH
( QUEUE_DELAY = 1000
,ON_FAILURE = CONTINUE
,AUDIT_GUID = '0f9b0a5b-478d-4b3b-90cf-2b68b8657e81'
)
GO
執行完成後,會在安全性中看到一個新的稽核(Audit-DEMO-0311),接著啟用它。
--2.建立資料庫稽核規格
USE [北風貿易]
GO
CREATE DATABASE AUDIT SPECIFICATION [北風貿易]
FOR SERVER AUDIT [Audit-DEMO-0311]
ADD (DATABASE_OBJECT_PERMISSION_CHANGE_GROUP),
ADD (DELETE ON OBJECT::[dbo].[AduitTable] BY [dbo]),
ADD (EXECUTE ON OBJECT::[dbo].[AduitTable] BY [dbo]),
ADD (INSERT ON OBJECT::[dbo].[AduitTable] BY [dbo]),
ADD (SELECT ON OBJECT::[dbo].[AduitTable] BY [dbo]),
ADD (UPDATE ON OBJECT::[dbo].[AduitTable] BY [dbo])
WITH (STATE = ON)
GO
執行完成後,會在北風貿易資料庫的安全性è資料庫稽核規格會看到一個名稱為北風貿易的稽核規格,接著啟用它。
--3.執行測試指令並觀看稽核結果
SELECT * FROM dbo.AduitTable
WHERE Column1='TEST2'
發現稽核的語法變成
SELECT * FROM [dbo].[AduitTable] WHERE [Column1]=@1
實際的值TEST2則是看不到。
上網查了一下,發現這是一個Bug,要上Service Pack才能解決這個問題,於是我將SQL SERVER安裝了SP3,安裝完成後,發現之前的問題解決了。
--4.執行宣告變數的SQL指令,並觀看結果
DECLARE @Column1 VARCHAR(10)
SET @Column1='2'
SELECT * FROM AduitTable
WHERE Column1=@Column1
稽核結果只有變數名稱,但沒有實際資料值。
後來在討論區看到這個問題在sql server 2008尚未解決,結果只好自己摸摸鼻子寫trigger或用cdc了,真希望微軟能快快解決這個問題。
Ps:SQL SERVER 2008 R2 SP1的版本好像也是一樣。
沒有留言:
張貼留言