如何使用 SQL Server Audit 功能
在預設情況下,使用者操作資料庫的動作並不會被記錄下來。雖然我們可以使用觸發程序之類的功能來進行偵測,但是設定起來還是相當繁瑣。
因此我們可以使用 SQL Server Audit 功能對伺服器或者資料庫物件進行查詢、新增、更新與刪除等動作的稽核,將其記錄到檔案或者 Window 應用程式的事件紀錄。
建立稽核
從物件總管中點選執行個體 > 安全性 > 稽核,新增稽核。
這個稽核是用於定義蒐集到的稽核紀錄如何儲存,選項包含
- File
- Windows Security Log
- Windows Application Log
建議調整稽核檔案數目上限及檔案大小上限,避免磁碟空間被塞滿導致系統發生異常。
剛被建立的稽核會處於停用狀態,必須要啟用紀錄才能夠被保存。
新增伺服器稽核規格
從物件總管中點選執行個體 > 安全性 > 伺服器稽核規格,新增伺服器稽核規格。
輸入伺服器稽核規格的名稱並選擇上面所建立的稽核
假設我們想要稽核資料庫或者資料表執行 CREATE、ALTER 或 DROP 陳述式時,選擇以下稽核動作群組名稱。
- DATABASE_OBJECT_CHANGE_GROUP
- SCHEMA_OBJECT_CHANGE_GROUP
關於稽核動作群組名稱的詳細描述,請參考此篇文章。
完成伺服器稽核規格設定後,一樣需要啟用才會開始進行稽核。
需要注意的是伺服器稽核規格與稽核都必須要同時啟動,才能夠正確紀錄。
檢視稽核紀錄
確認建立資料庫與資料表的動作是否會被稽核記錄
利用下列的 T-SQL 指令碼建立資料庫
USE [master]
GO
CREATE DATABASE [Database_1]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'Database_1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Database_1.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
LOG ON
( NAME = N'Database_1_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Database_1_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
GO
利用下列的 T-SQL 指令碼建立資料表
USE [Database_1]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Table_1](
[Column_1] [nchar](10) NULL
) ON [PRIMARY]
GO
從物件總管中點選執行個體 > 安全性 > 稽核,檢視稽核紀錄。
確認建立資料庫與資料表的動作都被稽核記錄下來了
新增資料庫稽核規格
伺服器稽核規格會針對該伺服器底下的所有物件生效,若只想針對特定資料庫進行稽核紀綠,可以使用資料庫稽核規格。
從物件總管中點選執行個體 > 資料庫 > 安全性 > 資料庫稽核規格, 新增伺服器稽核規格。
輸入資料庫稽核規格的名稱並選擇上面所建立的稽核
假設我們想要稽核資料表執行 DELETE 陳述式時,選擇 DELETE 動作名稱。
資料庫層級的設定必須明確指明要稽核的物件類別、結構描述及名稱,同時必須明確指定要稽核的主體名稱(Principal Name)。
按下確定後,跑出此版本的 SQL Server 不提供更細微的稽核功能。
原來資料庫層級的稽核僅在 SQL Server 企業版中才可使用
相信大家已經學會了如何使用 SQL Server Audit 功能來追蹤資料庫的軌跡,希望有幫助大家。