共用方式為


了解 SQL Server Audit

「稽核」(Audit) SQL Server 或 SQL Server 資料庫的執行個體牽涉到追蹤和記錄系統上所發生的事件。您可以使用幾個方法來稽核 SQL Server,如<稽核 (Database Engine)>中所述。從 SQL Server 2008 Enterprise 開始,您也可以使用 SQL Server Audit 來設定自動稽核。

SQL Server 的稽核有幾個層級,需視安裝的管制或標準需求而定。SQL Server Audit 提供了一些工具和程序,您必須擁有這些工具和程序,才能啟用、儲存及檢視各種伺服器和資料庫物件的稽核。

您可以依各個執行個體記錄伺服器稽核動作群組,然後依各個資料庫記錄資料庫稽核動作群組或資料庫稽核動作。每次遇到可稽核的動作時,就會發生稽核事件。

SQL Server Audit 元件

「稽核」(Audit) 是針對特定伺服器動作或資料庫動作群組將幾個元素組合成單一封裝的動作。SQL Server Audit 的元件結合起來可產生稱為稽核的輸出,就像是與圖形和資料元素結合的報表定義會產生報表一樣。

SQL Server Audit 會使用「擴充的事件」(Extended Events) 來幫助建立稽核。如需有關擴充的事件的詳細資訊,請參閱<SQL Server 擴充的事件簡介>。

SQL Server Audit

SQL Server Audit 物件會收集要監視之伺服器或資料庫層級動作和動作群組的單一執行個體。此稽核位於 SQL Server 執行個體層級。您可以針對每個 SQL Server 執行個體設有多個稽核。

當您定義稽核時,會針對結果的輸出指定位置,這就是稽核目的地。此稽核會在「停用」狀態下建立,而且不會自動稽核任何動作。在啟用稽核之後,稽核目的地會從此稽核接收資料。

伺服器稽核規格

「伺服器稽核規格」(Server Audit Specification) 物件屬於稽核。您可以針對每個稽核建立一個伺服器稽核規格,因為這兩者都是在 SQL Server 執行個體範圍所建立。

伺服器稽核規格會收集由擴充的事件功能所引發的許多伺服器層級動作群組。您可以將「稽核動作群組」(Audit Action Group) 併入伺服器稽核規格中。稽核動作群組是預先定義的動作群組,這些動作是 Database Engine 中發生之不可部分完成的事件。這些動作會傳送給稽核,然後它會在目標中記錄這些動作。

伺服器層級的稽核動作群組在<SQL Server Audit 動作群組和動作>主題中有描述。

資料庫稽核規格

「資料庫稽核規格」(Database Audit Specification) 物件屬於 SQL Server Audit。您可以針對每個稽核的每個 SQL Server 資料庫建立一個資料庫稽核規格。

資料庫稽核規格會收集由擴充的事件功能所引發的資料庫層級稽核動作。您可以將稽核動作群組或稽核事件加入至資料庫稽核規格。「稽核事件」(Audit Event) 是可由 SQL Server 引擎稽核之不可部分完成的動作。「稽核動作群組」(Audit Action Group) 是預先定義的動作群組,這兩者都在 SQL Server 資料庫範圍內。這些動作會傳送給稽核,然後它會在目標中記錄這些動作。

資料庫層級的稽核動作群組和稽核動作在<SQL Server Audit 動作群組和動作>主題中有描述。

目標

稽核的結果會傳送到目標,這可以是檔案、Windows 安全性事件記錄檔或 Windows 應用程式事件記錄檔 (Windows XP 不支援寫入安全性記錄檔)。記錄檔必須定期檢閱及封存,以確保目標有足夠的空間來寫入其他的記錄。

重要事項重要事項

任何經過驗證的使用者都可以讀寫 Windows 應用程式事件記錄檔。應用程式事件記錄檔所需的權限低於 Windows 安全性事件記錄檔,所以比起 Windows 安全性事件記錄檔是較不安全的。

寫入到 Windows 安全性記錄檔需要將 SQL Server 服務帳戶加入產生安全性稽核原則。根據預設,本機系統、本機服務和網路服務都是此原則的一部分。您可以使用安全性原則嵌入式管理單元 (secpol.msc) 來設定這項設定。此外,[稽核物件存取] 安全性原則必須已啟用 [成功][失敗]。您可以使用安全性原則嵌入式管理單元 (secpol.msc) 來設定這項設定。在 Windows Vista 或 Windows Server 2008 中,您可以使用稽核原則程式 (AuditPol.exe) 從命令列設定更細微的 application generated 原則。如需有關啟用寫入 Windows 安全性記錄檔之步驟的詳細資訊,請參閱<如何:將伺服器稽核事件寫入安全性記錄檔>。如需有關 Auditpol.exe 程式的詳細資訊,請參閱知識庫文件 921469:<如何使用「群組原則」對 Windows Server 2003 網域或 Windows 2000 網域中的 Windows Vista 用戶端電腦進行詳細的安全性稽核設定>。Windows 事件記錄檔在 Windows 作業系統中為全域的範圍。如需有關 Windows 事件記錄檔的詳細資訊,請參閱<事件檢視器概觀>(英文)。如果您需要更精確的稽核權限,請使用二進位檔案目標。

當您將稽核資訊儲存到檔案時,為了避免遭到篡改,您可以使用以下方式來限制對檔案位置的存取:

  • SQL Server 服務帳戶必須具有讀取和寫入權限。

  • 稽核管理員通常需要讀取和寫入權限。這會假設稽核管理員為管理稽核檔案的 Windows 帳戶,例如將稽核檔案複製到不同的共用位置、備份稽核檔案等等。

  • 被授權可讀取稽核檔案的稽核讀取者必須擁有讀取權限。

即使當 Database Engine 寫入檔案時,其他擁有權限的 Windows 使用者還是可以讀取稽核檔案。Database Engine 不會進行獨佔鎖定來防止讀取作業。

因為 Database Engine 可以存取檔案,所以具有 CONTROL SERVER 權限的 SQL Server 登入可以使用 Database Engine 來存取稽核檔案。若要記錄正在讀取稽核檔案的任何使用者,請在 master.sys.fn_get_audit_file 上定義稽核。這樣會記錄具有 CONTROL SERVER 權限的登入,該登入已經透過 SQL Server 來存取稽核檔案。

如果稽核管理員將檔案複製到不同的位置 (基於類似封存的理由),新位置的 ACL 應該降低為以下權限:

  • 稽核管理員 - 讀取 / 寫入

  • 稽核讀取者 - 讀取

我們建立您最好從不同的 SQL Server 執行個體 (如 SQL Server Express 的執行個體) 產生稽核報表,而只有稽核管理員或稽核讀取者可存取這個執行個體。您可以藉由使用不同的 Database Engine 執行個體進行報告,以防止未經授權的使用者取得稽核記錄的存取權。

您可以提供額外的防護措施來避免未經授權的人存取,其方式是使用 Windows BitLocker 磁碟機加密或 Windows 加密檔案系統,將用來存放稽核檔案的資料夾加密。

如需有關寫入目標之稽核記錄的詳細資訊,請參閱<SQL Server Audit 記錄>。

使用 SQL Server Audit 的概觀

您可以使用 SQL Server Management Studio 或 Transact-SQL 來定義稽核。在建立及啟用稽核之後,目標將會收到項目。

您可以使用 Windows 中的 [事件檢視器] 公用程式來閱讀 Windows 事件記錄檔。如果是檔案目標,您可以使用 SQL Server Management Studio 中的 [記錄檔檢視器] 或是 fn_get_audit_file 函數來閱讀目標檔案。

建立及使用稽核的一般程序如下所示。

  1. 建立稽核,並定義目標。

  2. 建立對應至稽核的伺服器稽核規格或資料庫稽核規格。啟用該稽核規格。

  3. 啟用稽核。

  4. 使用 Windows [事件檢視器][記錄檔檢視器] 或是 fn_get_audit_file 函數來閱讀稽核事件。

SQL Server Audit 的如何主題>主題提供了使用稽核功能的 SQL Server Management Studio 和 Transact-SQL 範例。

考量因素

如果在稽核起始期間發生失敗,伺服器將不會啟動。在此情況下,可以在命令列上使用 –f 選項來啟動伺服器。

當稽核失敗造成伺服器關閉,或是因為已針對稽核指定 ON_FAILURE=SHUTDOWN 而造成伺服器無法啟動時,MSG_AUDIT_FORCED_SHUTDOWN 事件將會寫入記錄檔中。由於關閉將發生在初次遇到此設定時,所以此事件將會寫入一次。當稽核的失敗訊息造成伺服器關閉之後,將會寫入此事件。管理員可藉由使用 –m 旗標在單一使用者模式下啟動 SQL Server,以略過稽核所導致的關閉。如果您在單一使用者模式下啟動,您會將指定 ON_FAILURE=SHUTDOWN 於該工作階段執行的任何稽核降級為 ON_FAILURE=CONTINUE。當使用 –m 旗標啟動 SQL Server 時,MSG_AUDIT_SHUTDOWN_BYPASSED 訊息將會寫入到錯誤記錄檔。

如需有關服務啟動選項的詳細資訊,請參閱<使用 SQL Server 服務啟動選項>。

附加已定義稽核的資料庫

如果附加的資料庫有稽核規格,而且指定了未存在於伺服器上的 GUID 時,將會造成「遺棄的」(Orphaned) 稽核規格。因為具有相符 GUID 的稽核不存在於伺服器執行個體上,所以不會記錄任何稽核事件。若要更正這個狀況,請使用 ALTER DATABASE AUDIT SPECIFICATION 命令,將被遺棄的稽核規格連接到現有的伺服器稽核。或者,使用 CREATE SERVER AUDIT 命令,建立具有指定之 GUID 的新伺服器稽核。

您可以將有定義稽核規格的資料庫附加到不支援 SQL Server Audit 的另一個 SQL Server 版本 (例如 SQL Server Express),但是它不會記錄稽核事件。

資料庫鏡像和 SQL Server Audit

已定義資料庫稽核規格而且使用資料庫鏡像的資料庫將會包含資料庫稽核規格。若要在鏡像的 SQL 執行個體上正確運作,必須設定下列項目:

  • 鏡像伺服器必須具有相同 GUID 的稽核,才能讓資料庫稽核規格寫入稽核記錄。您可以使用 CREATE AUDIT WITH GUID=<GUID from source Server Audit> 命令來進行這項設定。

  • 如果是二進位檔案目標,鏡像伺服器服務帳戶必須具有寫入稽核記錄之位置的適當權限。

  • 如果是 Windows 事件記錄檔目標,鏡像伺服器所在之電腦的安全性原則必須允許服務帳戶存取安全性或應用程式事件記錄檔。