SQL Server 審計 第一篇: 創建審計


審計(Audit)用於追蹤和記錄SQL Server實例或數據庫中發生的事件,審計主要包括審計對象(Server Audit)、服務器級別的審計規范(Server Audit Specification)和數據庫級別的審計規范(Database Audit Specification),審計對象是在服務器級別,用於指定審計數據的存儲方式和存儲路徑,並提供工具查看審計數據,服務器級別的審計規范用於記錄服務器級別的事件(Event),而數據庫級別的審計規范用於記錄數據庫級別的事件。

SQL Server使用 Extended Events來幫助創建審計,也就是說,審計是在擴展事件的基礎上設計的功能,專門用於審核數據庫的安全。為了啟用審計,首先需要創建一個SQL Server 實例級的審計對象,然后創建從屬於它的“服務器審計規范”或“數據庫審計規范”,審計輸出的結果數據可以存儲到審計文件(File)、安全日志(Security Log)和應用程序日志(Application Log)中。

一,審計對象的構成

構成審計的成分主要有4大類:審計對象、服務器級別的審計規范、數據庫級別的審計規范和目標(Target)。

  • 審計對象包含多個審計規范,並指定輸出結果存儲的路徑。審計結果創建時默認的狀態是disable。
  • 服務器級別的審計規范,從屬於審計對象,它包含服務器級別的審計動作組(Audit Action Group)或單個Audit Action,這些動作組或動作由Extended Events觸發。
  • 數據庫級別的審計規范,也從屬於審計對象,它包含數據庫級別的審計動作組(Audit Action Group)或單個Audit Action,這些動作組或動作由Extended Events觸發。
  • Target(也稱作Audit Destination)用於存儲審計的結果,Target可以是一個file,Windows Security Event log 或者Windows application event log.

Action Group 是預定義的,是由Action Event構成的組合,每一個Action(也稱作Action Event)都是一個原子事件,當Event(也稱作Action)發生時,Event被發送到審計對象(audit)中,SQL Server把數據記錄到Target中。關於審計的動作組和動作的詳細信息,請閱讀官方文檔:SQL Server Audit Action Groups and Actions

二,創建審計的一般步驟

啟用審計的目的一般是為了監控SQL Server執行的操作,例如,記錄什么人在什么時候查詢數據、修改數據,登陸SQL Server實例等,由於審計記錄的數據有可能很豐富,因此,啟用審計可能產生大量的日志數據,占用磁盤的大量空間。審計使用一句話來概括就是:記錄誰在什么時候做了什么事,審計對象(Audit)定義:配置數據存在何處,而審計規范(Audit Specification)定義:記錄什么事,一旦特定的事件觸發,SQL Server引擎就使用審計記錄事件發生的現場信息。

創建和使用審計的一般步驟是:

  • step1:創建服務器級別的審計對象,並啟用審計對象;審計對象用於指定存儲審計數據的路徑。
  • step2:創建審計規范,並映射到審計對象審核,啟用審計規范,審計對象開始追蹤和記錄數據;
  • step3:查看審計數據,可以通過使用SSMS的”Log Files Viewer“或函數sys.fn_get_audit_file 查看記錄的日志數據。

三,創建審計對象

審計對象的作用是指定審計數據保存的路徑,以及寫入數據的延遲和數據文件的大小,審計對象主要是存儲審計規范的數據。可以使用SSMS通過UI方式來創建服務器級別的審計對象,展開"Security",右擊Audits,通過“New Audit”,打開“Create Audit”窗體開始創建審計對象,為審計對象設置屬性:

  • Queue delay:是指數據寫入到審計文件的延遲,默認是1s。
  • On Audit Log Failure:當Target寫入審計日志出錯時,SQL Server實例是繼續、關機還是失敗。
  • Audit Destination:審計輸出的數據保存到“Audit destination”中,本文選擇File,把數據存儲到審計文件中,Audit Destination的其他類型是:Security Log和Application Log。

根據硬盤空間的限制,設置審計對象的屬性 Audit File的數量,每個文件的最大size(Maximum File size)、以及Reserve disk space,控制審計文件的大小,管理硬盤空間的使用,避免硬盤爆掉。

每當審計重新啟動時(在重新啟動SQL Server實例時,或者重啟審計時),或者達到一個文件的最大size,審計都會新建一個Audit File。

  • 如果文件數量超過MAX ROLLOVER FILES ,那么刪除最早的文件。如果把MAX_ROLLOVER_FILES的設置為0時,每當審計重啟時,都會創建一個新文件。
  • 如果設置為Max files時,審計不會rollover到下一個文件,達到Max files的限制后,新的審計數據將無法記錄,並會導致失敗。

創建的審計對象默認是禁用(Disable)的,在使用審計對象之前,必須啟用,選中新建的審計對象,右擊,選中“Enable Audit”。

也可以使用TSQL腳本創建服務器審計對象,

use [master]
go

create server audit [AuditMonitorQuery]
to file 
(    
    filepath = N'G:\AuditFiles\MonitorQuery\'
    ,maxsize = 10GB
    ,max_rollover_files  = 128
    ,reserve_disk_space = off
)
with
(    queue_delay = 1000        --ms
    ,on_failure = continue
)
go

alter server audit [AuditMonitorQuery] 
with (state = on)
go

四,創建服務器級別的審計規范

展開服務器級別的Security,選中“Server Audit Specifications”,右擊彈出快捷菜單,選擇“New Server Audit Specifications”,打開“Create Server Audit Specifications”的窗體,通過UI創建審計規范:

審計規范指定審計對象記錄的事件類型,在審計規范中指定的事件類型,SQL Server 一旦檢測到事件發生,就會把跟該事件相關的信息寫入到審計對象指定的文件中,保存起來,以便於后續的檢查(review)。

使用向導來創建服務器級別的審計規范,從列表中選擇審計對象,從Audit Action Type列表中選擇審計操作組,創建的審計規范默認是禁用的,選中新建的審計規范,右擊彈出快捷菜單,選中”Enable Server Audit Specifications “啟用:

 

審核操作類型列表中選擇審計操作組,審計操作組是審計記錄的事件操作類型,常用的審計操作組是: 

  • DATABASE_OBJECT_ACCESS_GROUP:訪問數據庫對象時將引發此事件;
  • DATABASE_OBJECT_CHANGE_GROUP:針對數據庫對象(如架構)執行 CREATE、ALTER 或 DROP 語句時將引發此事件。 創建、更改或刪除任何數據庫對象時均將引發此事件。
  • DATABASE_OPERATION_GROUP:數據庫中發生操作(如檢查點或訂閱查詢通知)時將引發此事件。 對於任何數據庫的任何操作都將引發此事件。
  • FAILED_DATABASE_AUTHENTICATION_GROUP:指示某個主體嘗試登錄到數據庫並且失敗。
  • FAILED_LOGIN_GROUP:指示主體嘗試登錄到 SQL Server ,但是失敗。
  • SUCCESSFUL_LOGIN_GROUP:指示主體已成功登錄到 SQL Server。

五,創建數據庫級別的審計規范

在數據庫的Security中右擊“Database Audit Specifications”,數據庫級別的審計操作組,大部分和服務器級別的審計操作組很相似,除了數據庫級別的審計動作(Database-Level Audit Actions),在數據庫對象上發生以下操作(Action)時,記錄事件的信息:

  • SELECT
  • UPDATE
  • INSERT
  • DELETE
  • EXECUTE
  • REFERENCES
  • RECEIVE

1,使用Wizard創建數據庫審計規范

數據庫級別的審計操作追蹤和記錄的是數據庫對象(schema,objects)上發生的事件,因此必須配置Object Class、Object Schema,Object Name 和 Principal Name字段:

查看審計數據,選中Server級別的審計對象,通過”View Audit Logs“查看記錄的日志數據。

2,使用TSQL命令創建數據庫級別的審計規范

在審計規范中,如何設置Principal為public,表示對所有database principals進行審計。

CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-20191118-091731]
FOR SERVER AUDIT [Audit-20191118-090843]
ADD (DELETE ON Schema::schema_name BY public)
WITH (STATE = ON) ;

六,查看審計數據

用戶可以通過兩種方式來查看審計數據,第一種是使用UI來查看,第二種是使用系統視圖來查看。

1,使用UI查看審計數據

點擊審計對象,右擊彈出快捷菜單,點擊”View Audit Logs“查看審計對象記錄的數據:

2,通過TSQL 函數查看審計數據

查看審計數據通過sys.fn_get_audit_file()來查看:

sys.fn_get_audit_file ( file_pattern,   
    { default | initial_file_name | NULL },   
    { default | audit_record_offset | NULL } )  

審計文件名由四部分組成:AuditName_GUID_n_m.sqlaudit,第一個參數是file_pattern,包括路徑和文件名,對於文件名,可以通過特殊的匹配符指定:

  • *:表示所有的字符;
  • {}:指定GUID;
  • 如果文件名以擴展名( .sqlaudit)結尾,表示查看特定的文件; 

 例如,查看所有的審計文件中記錄的數據:

select  f.event_time
    ,f.sequence_number
    ,f.action_id
    ,a.name as action_name
    ,f.succeeded
    ,f.session_server_principal_name
    ,f.server_principal_name
    ,f.database_name
    ,f.object_id
    ,f.schema_name
    ,f.object_name
    ,f.class_type
    ,m.class_type_desc
    ,f.statement
    ,f.application_name
from sys.fn_get_audit_file('G:\AuditFiles\Monitor\*',default,default) f
inner join sys.dm_audit_actions a 
    on f.action_id=a.action_id
inner join sys.dm_audit_class_type_map m
    on f.class_type=m.class_type

 

 

參考文檔:

SQLSERVER2008新增的審核/審計功能

SQL Server Audit (Database Engine)

SQL Server Audit Action Groups and Actions

sys.fn_get_audit_file (Transact-SQL)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM