文章出處

SQLSERVER2008新增的審核/審計功能

很多時候我們都需要對數據庫或者數據庫服務器實例進行審核/審計

例如對失敗的登錄次數進行審計,某個數據庫上的DDL語句進行審計,某個數據庫表里面的delete語句進行審計

事實上,我們這些審計的需求基本上都是為了一個目的:防黑客

 

上面的這些審計需求無非就是看一下有哪些人試圖入侵數據庫服務器,入侵了之后是否有drop表,是否有delete數據

在SQLSERVER2008及以前版本可以選擇的方案有

1、服務器級別DDL觸發器和數據庫級別的DDL觸發器(SQL2005及以上版本) 以及DML觸發器

2、自己手工從事務日志里讀取操作記錄,權威的書都會說事務日志不是審核工具,一般大型數據庫都會設置為簡單模式,事務日志截斷

3、依靠SQLSERVER ERRORLOG來檢查登錄審核,導致SQLSERVER ERRORLOG login相關的日志泛濫 導致SQL排錯造成困難

4、事件通知:http://www.cnblogs.com/gaizai/p/3473553.html
5、更改跟蹤:http://www.cnblogs.com/gaizai/p/3482579.html
6、變更數據捕獲(CDC):http://www.cnblogs.com/gaizai/p/3479731.html

 

我們一般都會把C2 審核跟蹤和登錄審核里面只限成功的登錄,以防止SQL ERRORLOG日志泛濫,因為服務器是很久才重啟一次的,如果不做修改很容易造成磁盤爆滿

--禁用C2 審核跟蹤和只限成功的登錄
EXEC sys.sp_configure N'c2 audit mode', N'0'
GO
RECONFIGURE WITH OVERRIDE
GO

USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'AuditLevel', REG_DWORD, 1
GO

 


SQLSERVER2008新增的審核功能

在sqlserver2008新增了審核功能,可以對服務器級別和數據庫級別的操作進行審核/審計,事實上,事件通知、更改跟蹤、變更數據捕獲(CDC)

都不是用來做審計的,只是某些人亂用這些功能,也正因為亂用這些功能導致踩坑

事件通知:性能跟蹤

更改跟蹤:用Sync Services來構建偶爾連接的系統

變更數據捕獲(CDC):數據倉庫的ETL 中的數據抽取(背后使用logreader)

 

而審核是SQLSERVER專門針對數據庫安全的進行的審核,記住,他是專門的

 

我們看一下審核的使用方法 

審核對象

步驟一:創建審核對象,審核對象是跟保存路徑關聯的,所以如果你需要把審核操作日志保存到不同的路徑就需要創建不同的審核對象

我們把審核操作日志保存在文件系統里,在創建之前我們還要在相關路徑先創建好保存的文件夾,我們在D盤先創建sqlaudits文件夾,然后執行下面語句

--創建審核對象之前需要切換到master數據庫
USE [master]
GO
CREATE SERVER AUDIT MyFileAudit TO FILE(FILEPATH='D:\sqlaudits') --這里指定文件夾不能指定文件,生成文件都會保存在這個文件夾
GO

 

實際上,我們在創建審核對象的同時可以指定審核選項,下面是相關腳本

把日志放在磁盤的好處是可以使用新增的TVF:sys.[fn_get_audit_file] 來過濾和排序審核數據,如果把審核數據保存在Windows 事件日志里查詢起來非常麻煩

USE [master]
GO
CREATE SERVER AUDIT MyFileAudit TO FILE(
FILEPATH='D:\sqlaudits',
MAXSIZE=4GB,
MAX_ROLLOVER_FILES=6) 
WITH (
ON_FAILURE=CONTINUE,
QUEUE_DELAY=1000);

ALTER SERVER AUDIT MyFileAudit WITH(STATE =ON)

MAXSIZE:指明每個審核日志文件的最大大小是4GB

MAX_ROLLOVER_FILES:指明滾動文件數目,類似于SQL ERRORLOG,達到多少個文件之后刪除前面的歷史文件,這里是6個文件

ON_FAILURE:指明當審核數據發生錯誤時的操作,這里是繼續進行審核,如果指定shutdown,那么將會shutdown整個實例

queue_delay:指明審核數據寫入的延遲時間,這里是1秒,最小值也是1秒,如果指定0表示是實時寫入,當然性能也有一些影響

STATE:指明啟動審核功能,STATE這個選項不能跟其他選項共用,所以只能單獨一句

 

 

在修改審核選項的時候,需要先禁用審核,再開啟審核

ALTER SERVER AUDIT MyFileAudit WITH(STATE =OFF)
ALTER SERVER AUDIT MyFileAudit WITH(QUEUE_DELAY =1000)
ALTER SERVER AUDIT MyFileAudit WITH(STATE =ON)

 


審核規范

在SQLSERVER審核里面有審核規范的概念,一個審核對象只能綁定一個審核規范,而一個審核規范可以綁定到多個審核對象

我們來看一下腳本

CREATE SERVER AUDIT SPECIFICATION CaptureLoginsToFile
FOR SERVER AUDIT MyFileAudit
ADD (failed_login_group),
ADD (successful_login_group)
WITH (STATE=ON)
GO

CREATE SERVER AUDIT MyAppAudit TO APPLICATION_LOG
GO
ALTER SERVER AUDIT MyAppAudit WITH(STATE =ON)
ALTER SERVER AUDIT SPECIFICATION CaptureLoginsToFile WITH (STATE=OFF)
GO
ALTER SERVER AUDIT SPECIFICATION CaptureLoginsToFile
FOR SERVER AUDIT MyAppAudit
ADD (failed_login_group),
ADD (successful_login_group)
WITH (STATE=ON)
GO

我們創建一個服務器級別的審核規范CaptureLoginsToFile,然后再創建多一個審核對象MyAppAudit ,這個審核對象會把審核日志保存到Windows事件日志的應用程序日志里

我們禁用審核規范CaptureLoginsToFile,修改審核規范CaptureLoginsToFile屬于審核對象MyAppAudit ,修改成功

 

而如果要把多個審核規范綁定到同一個審核對象則會報錯

CREATE SERVER AUDIT SPECIFICATION CaptureLoginsToFileA
FOR SERVER AUDIT MyFileAudit
ADD (failed_login_group),
ADD (successful_login_group)
WITH (STATE=ON)
GO

CREATE SERVER AUDIT SPECIFICATION CaptureLoginsToFileB
FOR SERVER AUDIT MyFileAudit
ADD (failed_login_group),
ADD (successful_login_group)
WITH (STATE=ON)
GO

--消息 33230,級別 16,狀態 1,第 86 行
--審核 'MyFileAudit' 的審核規范已經存在。

 

這里要說一下 :審核對象和審核規范的修改 ,無論是審核對象還是審核規范,在修改他們的相關參數之前,他必須要先禁用,后修改,再啟用

--禁用審核對象
ALTER SERVER AUDIT MyFileAudit WITH(STATE =OFF)
--禁用服務器級審核規范
ALTER SERVER AUDIT SPECIFICATION CaptureLoginsToFile WITH (STATE=OFF)
GO
--禁用數據庫級審核規范
ALTER DATABASE AUDIT SPECIFICATION CaptureDBLoginsToFile WITH (STATE=OFF)
GO

--相關修改選項操作



--啟用審核對象
ALTER SERVER AUDIT MyFileAudit WITH(STATE =ON)
--啟用服務器級審核規范
ALTER SERVER AUDIT SPECIFICATION CaptureLoginsToFile WITH (STATE=ON)
GO
--啟用數據庫級審核規范
ALTER DATABASE AUDIT SPECIFICATION CaptureDBLoginsToFile WITH (STATE=ON)
GO

 

審核服務器級別事件

審核服務級別事件,我們一般用得最多的就是審核登錄失敗的事件,下面的腳本就是審核登錄成功事件和登錄失敗事件

CREATE SERVER AUDIT SPECIFICATION CaptureLoginsToFile
FOR SERVER AUDIT MyFileAudit
ADD (failed_login_group),
ADD (successful_login_group)
WITH (STATE=ON)
GO

 

修改審核規范

--跟審核對象一樣,更改審核規范時必須將其禁用
ALTER SERVER AUDIT SPECIFICATION CaptureLoginsToFile WITH (STATE =OFF)
ALTER SERVER AUDIT SPECIFICATION CaptureLoginsToFile
ADD (login_change_password_gourp),
DROP (successful_login_group)
ALTER SERVER AUDIT SPECIFICATION CaptureLoginsToFile WITH (STATE =ON)
GO

 

審核操作組

每個審核操作組對應一種操作,在SQLSERVER2008里一共有35個操作組,包括備份和還原操作,數據庫所有權的更改,從服務器和數據庫角色中添加或刪除登錄用戶

添加審核操作組的只需在審核規范里使用ADD,下面語句添加了登錄用戶修改密碼操作的操作組

ADD (login_change_password_gourp)

 

這里說一下服務器審核的內部實際上使用的是SQL2008新增的擴展事件里面的其中一個package:SecAudit package,當然他內部也是使用擴展事件來收集服務器信息

 

審核數據庫級別事件 

數據庫審核規范存在于他們的數據庫中,不能審核tempdb中的數據庫操作

CREATE DATABASE AUDIT SPECIFICATION和ALTER DATABASE AUDIT SPECIFICATION

工作方式跟服務器審核規范一樣

在SQLSERVER2008里一共有15個數據庫級別的操作組
7個數據庫級別的審核操作是:select ,insert,update,delete,execute,receive,references

 

相關腳本如下:

--創建審核對象
USE [master]
GO
CREATE SERVER AUDIT MyDBFileAudit TO FILE(FILEPATH='D:\sqldbaudits') 
GO
ALTER  SERVER AUDIT  MyDBFileAudit WITH (STATE=ON)
GO
--創建數據庫級別審核規范
USE [sss]
GO
CREATE DATABASE AUDIT SPECIFICATION CaptureDBActionToEventLog
FOR SERVER AUDIT MyDBFileAudit
ADD (database_object_change_group),
ADD (SELECT ,INSERT,UPDATE,DELETE ON schema::dbo   BY PUBLIC)
WITH (STATE =ON)

 

我們先在D盤創建sqldbaudits文件夾

第一個操作組對數據庫中所有對象的DDL語句create,alter,drop等進行記錄
第二個語句監視由任何public用戶(也就是所有用戶)對dbo架構的任何對象所做的DML操作

 

創建完畢之后可以在SSMS里看到相關的審核

數據庫審核規范

服務器審核規范和審核對象


查看審核事件

被記錄到文件系統的審核文件不是存儲在可以利用記事本打開的文本文件中,而是采用二進制文件的方式

 

 

這里說一個,當磁盤空間不足的時候是可以直接刪除這些SQLAUDIT文件

如果使用DDL觸發器的方法:http://www.cnblogs.com/gaizai/p/3363220.html?ADUIN=xxx2&ADSESSION=1387155615&ADTAG=CLIENT.QQ.5275_.0&ADPUBNO=26274

一般都會在數據庫里頭創建一張表來保存審計數據,但是當表數據量達到很多的時候,DBA也需要去維護這張表

工作量又增加了,可能你會說,我需要審計的項目不多,所以審計的數據也不會太多,但對于某些大公司來說

他們要審計的數據是非常多的,有些需要歸檔,而有些不需要歸檔

 

對于不需要歸檔審計數據的情況,我比較喜歡這種方式,當磁盤容量不夠的時候把最老的那個審計文件刪除掉

當然,你可以把整個sqlaudits文件夾或某個sqlaudit文件進行備份,放到備份磁盤上,然后刪除一些較老的sqlaudit文件

備份了之后以后就有機會對之前的審計數據進行翻查,都比較靈活

 


我們有兩種方法查看審核日志

方法一:對象資源管理器-》安全性-》審核-》選中某個審核對象-》右鍵-》查看審核日志

 

審核項目包括有:日期、時間戳記、服務器實例名稱、操作ID、類類型、序列號、成功或失敗、列權限、數據庫主體ID、服務器主體名稱、

服務器主體SID、被執行的(或嘗試)的實際語句等等

 

方法二:使用新的表值函數sys.[fn_get_audit_file]()

此函數接受一個或多個審核文件的參數(使用通配符模式匹配)

并利用另外兩個附加參數可以指定要處理的起始文件,以及開始讀取審核的已知偏移位置

這兩個參數都是可選的,但依然必須使用關鍵字default指定,此函數隨后從文件中讀取二進制數據,并將格式化這些審核項目

 

服務器級別審核

根據最近時間的那個sqlaudit文件,查詢這個文件里面的信息

SELECT  [event_time] AS '觸發審核的日期和時間' ,
        sequence_number AS '單個審核記錄中的記錄順序' ,
        action_id AS '操作的 ID' ,
        succeeded AS '觸發事件的操作是否成功' ,
        permission_bitmask AS '權限掩碼' ,
        is_column_permission AS '是否為列級別權限' ,
        session_id AS '發生該事件的會話的 ID' ,
        server_principal_id AS '執行操作的登錄上下文 ID' ,
        database_principal_id AS '執行操作的數據庫用戶上下文 ID' ,
        target_server_principal_id AS '執行 GRANT/DENY/REVOKE 操作的服務器主體' ,
        target_database_principal_id AS '執行 GRANT/DENY/REVOKE 操作的數據庫主體' ,
        object_id AS '發生審核的實體的 ID(服務器對象,DB,數據庫對象,架構對象)' ,
        class_type AS '可審核實體的類型' ,
        session_server_principal_name AS '會話的服務器主體' ,
        server_principal_name AS '當前登錄名' ,
        server_principal_sid AS '當前登錄名 SID' ,
        database_principal_name AS '當前用戶' ,
        target_server_principal_name AS '操作的目標登錄名' ,
        target_server_principal_sid AS '目標登錄名的 SID' ,
        target_database_principal_name AS '操作的目標用戶' ,
        server_instance_name AS '審核的服務器實例的名稱' ,
        database_name AS '發生此操作的數據庫上下文' ,
        schema_name AS '此操作的架構上下文' ,
        object_name AS '審核的實體的名稱' ,
        statement AS 'TSQL 語句(如果存在)' ,
        additional_information AS '單個事件的唯一信息,以 XML 的形式返回' ,
        file_name AS '記錄來源的審核日志文件的路徑和名稱' ,
        audit_file_offset AS '包含審核記錄的文件中的緩沖區偏移量' ,
        user_defined_event_id AS '作為 sp_audit_write 參數傳遞的用戶定義事件 ID' ,
        user_defined_information AS '于記錄用戶想要通過使用 sp_audit_write 存儲過程記錄在審核日志中的任何附加信息'
FROM    sys.[fn_get_audit_file]('D:\sqlaudits\MyFileAudit_F0BCDC6F-0A89-459D-B345-9DDEB036CC39_0_130595725124220000.sqlaudit',
                                DEFAULT, DEFAULT)
WHERE   [event_time] BETWEEN '2014-11-04 11:02:00'
                     AND     '2014-11-04 11:18:00' 

 

 

數據庫級別審核

先執行下面腳本查詢一些數據

USE [sss]
GO
SELECT * FROM [dbo].[nums]
SELECT  [event_time] AS '觸發審核的日期和時間' ,
        sequence_number AS '單個審核記錄中的記錄順序' ,
        action_id AS '操作的 ID' ,
        succeeded AS '觸發事件的操作是否成功' ,
        permission_bitmask AS '權限掩碼' ,
        is_column_permission AS '是否為列級別權限' ,
        session_id AS '發生該事件的會話的 ID' ,
        server_principal_id AS '執行操作的登錄上下文 ID' ,
        database_principal_id AS '執行操作的數據庫用戶上下文 ID' ,
        target_server_principal_id AS '執行 GRANT/DENY/REVOKE 操作的服務器主體' ,
        target_database_principal_id AS '執行 GRANT/DENY/REVOKE 操作的數據庫主體' ,
        object_id AS '發生審核的實體的 ID(服務器對象,DB,數據庫對象,架構對象)' ,
        class_type AS '可審核實體的類型' ,
        session_server_principal_name AS '會話的服務器主體' ,
        server_principal_name AS '當前登錄名' ,
        server_principal_sid AS '當前登錄名 SID' ,
        database_principal_name AS '當前用戶' ,
        target_server_principal_name AS '操作的目標登錄名' ,
        target_server_principal_sid AS '目標登錄名的 SID' ,
        target_database_principal_name AS '操作的目標用戶' ,
        server_instance_name AS '審核的服務器實例的名稱' ,
        database_name AS '發生此操作的數據庫上下文' ,
        schema_name AS '此操作的架構上下文' ,
        object_name AS '審核的實體的名稱' ,
        statement AS 'TSQL 語句(如果存在)' ,
        additional_information AS '單個事件的唯一信息,以 XML 的形式返回' ,
        file_name AS '記錄來源的審核日志文件的路徑和名稱' ,
        audit_file_offset AS '包含審核記錄的文件中的緩沖區偏移量' ,
        user_defined_event_id AS '作為 sp_audit_write 參數傳遞的用戶定義事件 ID' ,
        user_defined_information AS '于記錄用戶想要通過使用 sp_audit_write 存儲過程記錄在審核日志中的任何附加信息'
FROM    sys.[fn_get_audit_file]('D:\sqldbaudits\MyDBFileAudit_698BA060-CC40-4A3C-B19D-12B370712404_0_130595753193920000.sqlaudit',
                                DEFAULT, DEFAULT)

 

將審核日志保存到文件系統的好處就是可以使用TVP里通過where 和order by對審核數據進行篩選和排序

 

和審核相關的視圖

--查詢審核相關視圖
SELECT * FROM sys.[server_file_audits]
SELECT * FROM sys.[server_audit_specifications]
SELECT * FROM sys.[server_audit_specification_details]
SELECT * FROM sys.[database_audit_specifications]
SELECT * FROM sys.[database_audit_specification_details]
SELECT * FROM sys.[dm_server_audit_status]
SELECT * FROM sys.[dm_audit_actions]
SELECT * FROM sys.[dm_audit_class_type_map]

 

刪除相關對象

--刪除順序
--刪除數據庫審核規范
USE [sss]
GO
ALTER DATABASE AUDIT SPECIFICATION [CaptureDBActionToEventLog] WITH (STATE=OFF)
GO
DROP DATABASE AUDIT SPECIFICATION [CaptureDBActionToEventLog]
GO

--刪除服務器審核規范
USE [master]
GO
ALTER SERVER  AUDIT SPECIFICATION [CaptureLoginsToFile] WITH (STATE=OFF)
GO
DROP SERVER AUDIT SPECIFICATION [CaptureLoginsToFile]
GO

--刪除審核對象
ALTER SERVER AUDIT [MyFileAudit] WITH (STATE=OFF)
GO
ALTER SERVER AUDIT [MyAppAudit] WITH (STATE=OFF)
GO
ALTER SERVER AUDIT [MyEventLogAudit] WITH (STATE=OFF)
GO
DROP SERVER AUDIT [MyAppAudit]
GO
DROP SERVER AUDIT [MyFileAudit]
GO
DROP SERVER AUDIT [MyEventLogAudit]
GO

 

要查看是否打開了審核引擎使用下面SQL語句

“XE engine initialized已經初始化”表示審核引擎已經打開,擴展事件可以捕獲審核事件

SELECT * FROM sys.[dm_os_ring_buffers] WHERE [ring_buffer_type]='RING_BUFFER_XE_LOG'

<Record id = "0" type ="RING_BUFFER_XE_LOG" time ="106735">
<XE_LogRecord message="XE engine initialized"></XE_LogRecord></Record>

 


總結

本文概括介紹了SQLSERVER2008新增的審核功能,在SQLSERVER相關論壇里面“審核”這個話題是大家問得比較多的

希望通過這篇文章,能讓大家認識新增的審核功能,在生產環境里面遇到問題也可以互相交流

 

而審核功能最大的好處是:你使用自建審計表來保存審計數據,如果聰明的黑客攻破你的數據庫實例,他自然可以把你的那個審計表

drop掉,你同樣查不出黑客的任何蛛絲馬跡,而審核不同,他把審核數據放在SQLSERVER外面,除非你們公司的SA和DBA的安全意識

很弱,黑客有機會把磁盤文件刪除掉,否則依然有可能查出黑客的蛛絲馬跡進行預防!!

 

 

msdn相關文章:

CREATE SERVER AUDIT (Transact-SQL)

SQL Server Audit Action Groups and Actions

sys.fn_get_audit_file (Transact-SQL)

 

如有不對的地方,歡迎大家拍磚o(∩_∩)o 

 

補充:搬遷數據庫后,數據庫審核規范是不會刪除的,你可以在新的數據庫實例上再創建審核對象并把審核對象綁定到原來的數據庫審核規范

--附加數據庫,模擬搬遷數據庫
USE [master]
GO
CREATE DATABASE [MacFilter] ON 
( FILENAME = N'E:\DataBase\MacFilter.mdf' ),
( FILENAME = N'E:\DataBase\MacFilter_log.ldf' )
 FOR ATTACH
GO


--在新實例上重新創建審核對象
CREATE SERVER AUDIT MyFileAudit TO FILE(
FILEPATH='E:\sqlaudits',
MAXSIZE=4GB,
MAX_ROLLOVER_FILES=6) 
WITH (
ON_FAILURE=CONTINUE,
QUEUE_DELAY=1000);

ALTER SERVER AUDIT MyFileAudit WITH(STATE =ON)


--修改原來的數據庫級別審核規范
USE [MacFilter]
GO
ALTER DATABASE AUDIT SPECIFICATION CaptureDBActionToEventLog WITH (STATE =OFF)
GO
--重新綁定
ALTER DATABASE AUDIT SPECIFICATION CaptureDBActionToEventLog
FOR SERVER AUDIT MyFileAudit
WITH (STATE =ON)

--更新測試
UPDATE [Mac_Table] SET [MAC]=22 WHERE [PcName]='android_3eb52207eb8b89ee'


--查詢審核數據
SELECT  [event_time] AS '觸發審核的日期和時間' ,
        sequence_number AS '單個審核記錄中的記錄順序' ,
        action_id AS '操作的 ID' ,
        succeeded AS '觸發事件的操作是否成功' ,
        permission_bitmask AS '權限掩碼' ,
        is_column_permission AS '是否為列級別權限' ,
        session_id AS '發生該事件的會話的 ID' ,
        server_principal_id AS '執行操作的登錄上下文 ID' ,
        database_principal_id AS '執行操作的數據庫用戶上下文 ID' ,
        target_server_principal_id AS '執行 GRANT/DENY/REVOKE 操作的服務器主體' ,
        target_database_principal_id AS '執行 GRANT/DENY/REVOKE 操作的數據庫主體' ,
        object_id AS '發生審核的實體的 ID(服務器對象,DB,數據庫對象,架構對象)' ,
        class_type AS '可審核實體的類型' ,
        session_server_principal_name AS '會話的服務器主體' ,
        server_principal_name AS '當前登錄名' ,
        server_principal_sid AS '當前登錄名 SID' ,
        database_principal_name AS '當前用戶' ,
        target_server_principal_name AS '操作的目標登錄名' ,
        target_server_principal_sid AS '目標登錄名的 SID' ,
        target_database_principal_name AS '操作的目標用戶' ,
        server_instance_name AS '審核的服務器實例的名稱' ,
        database_name AS '發生此操作的數據庫上下文' ,
        schema_name AS '此操作的架構上下文' ,
        object_name AS '審核的實體的名稱' ,
        statement AS 'TSQL 語句(如果存在)' ,
        additional_information AS '單個事件的唯一信息,以 XML 的形式返回' ,
        file_name AS '記錄來源的審核日志文件的路徑和名稱' ,
        audit_file_offset AS '包含審核記錄的文件中的緩沖區偏移量' 
FROM    sys.[fn_get_audit_file]('e:\sqlaudits\MyFileAudit_149774D4-C5D9-4700-9FA1-AF0E13CED504_0_130595854334250000.sqlaudit',
                                DEFAULT, DEFAULT)

 

腳本更新

--查看審核結果


----查詢服務器審核事件
SELECT  fgaf.[event_time] AS '觸發審核的日期和時間' ,
        fgaf.sequence_number AS '單個審核記錄中的記錄順序' ,
        fgaf.action_id AS '操作的 ID' ,
        fgaf.succeeded AS '觸發事件的操作是否成功' ,
        fgaf.permission_bitmask AS '權限掩碼' ,
        fgaf.is_column_permission AS '是否為列級別權限' ,
        fgaf.session_id AS '發生該事件的會話的 ID' ,
        fgaf.server_principal_id AS '執行操作的登錄上下文 ID' ,
        fgaf.database_principal_id AS '執行操作的數據庫用戶上下文 ID' ,
        fgaf.target_server_principal_id AS '執行 GRANT/DENY/REVOKE 操作的服務器主體' ,
        fgaf.target_database_principal_id AS '執行 GRANT/DENY/REVOKE 操作的數據庫主體' ,
        fgaf.object_id AS '發生審核的實體的 ID(服務器對象,DB,數據庫對象,架構對象)' ,
        fgaf.class_type AS '可審核實體的類型' ,
        --[dactm].[class_type_desc] AS '可審核實體的類型描述' ,
        fgaf.session_server_principal_name AS '會話的服務器主體' ,
        fgaf.server_principal_name AS '當前登錄名' ,
        fgaf.server_principal_sid AS '當前登錄名 SID' ,
        fgaf.database_principal_name AS '當前用戶' ,
        fgaf.target_server_principal_name AS '操作的目標登錄名' ,
        fgaf.target_server_principal_sid AS '目標登錄名的 SID' ,
        fgaf.target_database_principal_name AS '操作的目標用戶' ,
        fgaf.server_instance_name AS '審核的服務器實例的名稱' ,
        fgaf.database_name AS '發生此操作的數據庫上下文' ,
        fgaf.schema_name AS '此操作的架構上下文' ,
        fgaf.object_name AS '審核的實體的名稱' ,
        fgaf.statement AS 'TSQL 語句(如果存在)' ,
        fgaf.additional_information AS '單個事件的唯一信息,以 XML 的形式返回' ,
        fgaf.file_name AS '記錄來源的審核日志文件的路徑和名稱' ,
        fgaf.audit_file_offset AS '包含審核記錄的文件中的緩沖區偏移量'
FROM    sys.[fn_get_audit_file]('E:\DataBaseAudit\ServerAudit\ServerFileAudit_9E770D97-AD49-466A-8367-7885850200F8_0_130596271711880000.sqlaudit',
                                DEFAULT, DEFAULT) AS fgaf
        INNER JOIN sys.[dm_audit_class_type_map] AS dactm ON [dactm].[class_type] = [fgaf].[class_type]
WHERE   fgaf.[event_time] BETWEEN '2014-11-04'
                          AND     '2014-11-06'
ORDER BY fgaf.[event_time] 


----查詢某個數據庫的審核事件
SELECT  fgaf.[event_time] AS '觸發審核的日期和時間' ,
        fgaf.sequence_number AS '單個審核記錄中的記錄順序' ,
        fgaf.action_id AS '操作的 ID' ,
        fgaf.succeeded AS '觸發事件的操作是否成功' ,
        fgaf.permission_bitmask AS '權限掩碼' ,
        fgaf.is_column_permission AS '是否為列級別權限' ,
        fgaf.session_id AS '發生該事件的會話的 ID' ,
        fgaf.server_principal_id AS '執行操作的登錄上下文 ID' ,
        fgaf.database_principal_id AS '執行操作的數據庫用戶上下文 ID' ,
        fgaf.target_server_principal_id AS '執行 GRANT/DENY/REVOKE 操作的服務器主體' ,
        fgaf.target_database_principal_id AS '執行 GRANT/DENY/REVOKE 操作的數據庫主體' ,
        fgaf.object_id AS '發生審核的實體的 ID(服務器對象,DB,數據庫對象,架構對象)' ,
        fgaf.class_type AS '可審核實體的類型' ,
        [dactm].[class_type_desc] AS '可審核實體的類型描述' ,
        fgaf.session_server_principal_name AS '會話的服務器主體' ,
        fgaf.server_principal_name AS '當前登錄名' ,
        fgaf.server_principal_sid AS '當前登錄名 SID' ,
        fgaf.database_principal_name AS '當前用戶' ,
        fgaf.target_server_principal_name AS '操作的目標登錄名' ,
        fgaf.target_server_principal_sid AS '目標登錄名的 SID' ,
        fgaf.target_database_principal_name AS '操作的目標用戶' ,
        fgaf.server_instance_name AS '審核的服務器實例的名稱' ,
        fgaf.database_name AS '發生此操作的數據庫上下文' ,
        fgaf.schema_name AS '此操作的架構上下文' ,
        fgaf.object_name AS '審核的實體的名稱' ,
        fgaf.statement AS 'TSQL 語句(如果存在)' ,
        fgaf.additional_information AS '單個事件的唯一信息,以 XML 的形式返回' ,
        fgaf.file_name AS '記錄來源的審核日志文件的路徑和名稱' ,
        fgaf.audit_file_offset AS '包含審核記錄的文件中的緩沖區偏移量'
FROM    sys.[fn_get_audit_file]('E:\DataBaseAudit\DBAudit_db\DBFileAudit_db%8O%89095_794BC4B9-4126-4CF7-BDD9-F24D8DA1CE70_0_130596271711960000.sqlaudit',
                                DEFAULT, DEFAULT) AS fgaf
        INNER JOIN sys.[dm_audit_class_type_map] AS dactm ON [dactm].[class_type] = [fgaf].[class_type]
WHERE   fgaf.[event_time] BETWEEN '2014-11-04'
                          AND     '2014-11-06'
ORDER BY fgaf.[event_time] 


--服務器審核規范詳細
SELECT * FROM sys.[server_audit_specification_details]
--數據庫審核規范詳細
SELECT * FROM sys.[database_audit_specification_details]

SELECT * FROM sys.[dm_audit_actions] 

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()