SQL Server Audit (Database Engine)

適用於:SQL ServerAzure SQL 受控執行個體

稽核 SQL Server 資料庫引擎或個別資料庫的執行個體,會牽涉到追蹤和記錄資料庫引擎中發生的事件。 SQL Server 稽核可讓您建立伺服器稽核,其中可能包含伺服器等級事件的伺服器稽核規格,以及資料庫等級事件的資料庫稽核規格。 稽核的事件可以寫入事件記錄或稽核檔案。

重要

Azure SQL 受控執行個體上,此 T-SQL 功能有特定的行為變更。 如需所有 T-SQL 行為變更的詳細資料,請參閱 Azure SQL 受控執行個體與 SQL Server 之間的 T-SQL 差異 \(部分機器翻譯\)。

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

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

所有 SQL Server 版本都支援伺服器層級稽核。 所有版本都支援以 SQL Server 2016 (13.x) SP1 開頭的資料庫層級稽核。 在這之前,資料庫層級稽核則限於 Enterprise、Developer 和 Evaluation Edition。 如需詳細資訊,請參閱 SQL Server 2016 版本支援的功能

注意

本主題適用於 SQL Server。 針對 SQL Database,請參閱 開始使用 SQL 資料庫稽核

SQL Server Audit 元件

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

SQL Server 稽核會使用擴充事件協助建立稽核。 如需擴充事件的詳細資訊,請參閱 擴充事件

SQL Server Audit

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

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

伺服器稽核規格

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

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

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

資料庫稽核規格

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

資料庫稽核規格會收集由擴充的事件功能所引發的資料庫層級稽核動作。 您可以將稽核動作群組或稽核事件加入資料庫稽核規格。 「稽核事件」是可由 SQL Server 引擎稽核的不可部分完成動作。 「稽核動作群組」 是預先定義的動作群組。 兩者都在 SQL Server 資料庫範圍內。 這些動作會傳送給稽核,然後它會在目標中記錄這些動作。 請勿在使用者資料庫稽核規格中包含伺服器範圍的物件,例如系統檢視表。

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

目標

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

重要

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

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

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

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

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

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

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

因為資料庫引擎可以存取檔案,所以具有 CONTROL SERVER 權限的 SQL Server 登入可以使用資料庫引擎存取稽核檔案。 若要記錄正在讀取稽核檔案的任何使用者,請在 master.sys.fn_get_audit_file 上定義稽核。 系統會記錄具有 CONTROL SERVER 權限的登入行動已透過 SQL Server 存取稽核檔案。

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

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

  • 稽核讀取者 - 讀取

建議您從只有稽核管理員或稽核讀取者可存取的不同 SQL Server 執行個體 (例如 SQL Server Express 執行個體) 產生稽核報表。 您可以藉由使用不同的資料庫引擎執行個體進行報告,防止未經授權的使用者取得稽核記錄的存取權。

您可以提供額外的防護措施來避免未經授權的人存取,其方式是使用 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 函數來閱讀稽核事件。

如需詳細資訊,請參閱 建立伺服器稽核與伺服器稽核規格建立伺服器稽核和資料庫稽核規格

考量

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

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

如需服務啟動選項的詳細資訊,請參閱 Database Engine 服務啟動選項

附加已定義稽核的資料庫

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

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

資料庫鏡像和 SQL Server Audit

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

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

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

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

稽核系統管理員

系統管理員 固定伺服器角色的成員會識別為每個資料庫中的 dbo 使用者。 若要稽核系統管理員的動作,請稽核 dbo 使用者的動作。

使用 Transact-SQL 建立及管理稽核

您可以使用 DDL 陳述式、動態管理檢視和函數及目錄檢視來實作 SQL Server Audit 的所有層面。

資料定義語言陳述式

您可以使用下列 DDL 陳述式來建立、改變和卸除稽核規格:

DDL 陳述式 描述
ALTER AUTHORIZATION 變更安全性實體的擁有權。
ALTER DATABASE AUDIT SPECIFICATION 使用 SQL Server Audit 功能改變資料庫稽核規格物件。
ALTER SERVER AUDIT 使用 SQL Server Audit 功能改變伺服器稽核物件。
ALTER SERVER AUDIT SPECIFICATION 使用 SQL Server Audit 功能改變伺服器稽核規格物件。
CREATE DATABASE AUDIT SPECIFICATION 使用 SQL Server Audit 功能建立資料庫稽核規格物件。
CREATE SERVER AUDIT 使用 SQL Server Audit 來建立伺服器稽核物件。
CREATE SERVER AUDIT SPECIFICATION 使用 SQL Server Audit 功能建立伺服器稽核規格物件。
DROP DATABASE AUDIT SPECIFICATION 使用 SQL Server Audit 功能卸除資料庫稽核規格物件。
DROP SERVER AUDIT 使用 SQL Server Audit 功能卸除伺服器稽核物件。
DROP SERVER AUDIT SPECIFICATION 使用 SQL Server Audit 功能卸除伺服器稽核規格物件。

動態檢視和函數

下表列出可用於 SQL Server 稽核的動態檢視和函數。

動態檢視和函數 描述
sys.dm_audit_actions 傳回稽核記錄檔中可報告的每個稽核動作以及可設定為 SQL Server 稽核一部分的每個稽核動作群組的資料列。
sys.dm_server_audit_status 提供有關稽核之目前狀態的資訊。
sys.dm_audit_class_type_map 傳回一個資料表,它會將稽核記錄檔中的 class_type 欄位對應到 sys.dm_audit_actions 中的 class_desc 欄位。
fn_get_audit_file 從伺服器稽核建立的稽核檔案中傳回資訊。

目錄檢視

下表列出可用於 SQL Server 稽核的目錄檢視。

目錄檢視 描述
sys.database_audit_specifications 包含有關伺服器執行個體上 SQL Server 稽核內資料庫稽核規格的資訊。
sys.database_audit_specification_details 包含所有資料庫伺服器執行個體上 SQL Server 稽核內資料庫稽核規格的資訊。
sys.server_audits 針對伺服器執行個體中每一項 SQL Server 稽核納入一個資料列。
sys.server_audit_specifications 包含有關伺服器執行個體上 SQL Server 稽核內之伺服器稽核規格的資訊。
sys.server_audit_specifications_details 包含伺服器執行個體上 SQL Server 稽核內伺服器稽核規格詳細資料 (動作) 的資訊。
sys.server_file_audits 包含有關伺服器執行個體上 SQL Server 稽核內檔案稽核類型的存放區擴充資訊。

權限

SQL Server 稽核的每一個功能和命令都有個別的權限需求。

若要建立、改變或卸除伺服器稽核或伺服器稽核規格,伺服器主體需要 ALTER ANY SERVER AUDIT 或 CONTROL SERVER 權限。 若要建立、改變或卸除資料庫稽核規格,資料庫主體需要資料庫的 ALTER ANY DATABASE AUDIT 權限或是 ALTER 或 CONTROL 權限。 此外,主體還必須擁有連接資料庫的權限,或 ALTER ANY SERVER AUDIT 或 CONTROL SERVER 權限。

VIEW ANY DEFINITION 權限提供的存取權可以檢視伺服器層級稽核檢視,而 VIEW DEFINITION 提供的存取權可以檢視資料庫層級稽核檢視。 拒絕這些權限時,會覆寫目錄檢視的檢視能力,即使主體具有 ALTER ANY SERVER AUDIT 或 ALTER ANY DATABASE AUDIT 權限亦同。

如需進一步了解如何授與權限,請參閱 GRANT (Transact-SQL)

警告

系統管理員 (sysadmin) 角色中的主體可以損害任何稽核元件,而 db_owner 角色中的主體可以損害資料庫中的稽核規格。 SQL Server 稽核會驗證建立或修改稽核規格的登入至少具有 ALTER ANY DATABASE AUDIT 權限。 但是,當您附加資料庫時,它不會進行任何驗證。 您應該假設所有資料庫稽核規格都與系統管理員 (sysadmin) 或 db_owner 角色中的主體一樣值得信任。

建立伺服器稽核與伺服器稽核規格

建立伺服器稽核和資料庫稽核規格

檢視 SQL Server Audit 記錄

將 SQL Server Audit 事件寫入安全性記錄檔

伺服器屬性 (安全性頁面)
說明如何開啟 SQL Server 的登入稽核。 這些稽核記錄會儲存在 Windows 應用程式記錄檔中。

C2 稽核模式伺服器組態選項
說明 SQL Server 中的 C2 安全合規性稽核模式。

Security Audit 事件類別目錄 (SQL Server Profiler)
說明您可在 SQL Server Profiler 中使用的稽核事件。 如需詳細資訊,請參閱 SQL Server Profiler

SQL 追蹤
說明如何從自己的應用程式中使用 SQL 追蹤手動建立追蹤,而非使用 SQL Server Profiler。

DDL 觸發程序
說明如何使用資料定義語言 (DDL) 觸發程序來追蹤資料庫的變更。

Microsoft TechNet:SQL Server TechCenter:SQL Server 2005 安全性與保護
提供 SQL Server 安全性的最新資訊。

另請參閱

SQL Server Audit 動作群組和動作
SQL Server Audit 記錄