共用方式為


SQL Server 稽核 (資料庫引擎)

適用於: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) Service Pack 1 和更新版本中,所有版本都支援資料庫層級稽核。 在此之前,資料庫層級稽核僅限於 Enterprise、Developer 和 Evaluation 版本。 如需詳細資訊,請參閱 SQL Server 2016 的版本和支援功能

注意

本文適用於 SQL Server。 針對 SQL Database,請參閱 Azure SQL Database 和 Azure Synapse Analytics 的稽核

SQL Server 稽核元件

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

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

SQL 伺服器稽核

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

當您定義稽核時,會針對結果的輸出指定位置, 這就是稽核目的地。 這個稽核是在停用狀態建立的,且不會自動執行稽核。 在啟用稽核之後,稽核目的地會從稽核系統接收資料。

伺服器稽核規格

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

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

SQL Server 稽核動作群組和動作一文會說明伺服器層級的稽核動作群組。

注意

由於效能限制,我們不會稽核 tempdb 和臨時表。 雖然批次完成的動作群組會擷取針對臨時表的語句,但可能無法正確填入物件名稱。 不過,一律會稽核源數據表,確保記錄從源數據表到臨時表的所有插入。

資料庫稽核規格

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

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

文章 SQL Server 稽核動作群組和動作 說明了資料庫層級的稽核動作群組和稽核動作。

目標

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

重要

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

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

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

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

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

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

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

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

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

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

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

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

如需有關寫入到目標的稽核記錄的更多資訊,請參閱 SQL Server Audit 記錄

使用 SQL Server 稽核的概觀

您可使用 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。 當 SQL Server 以 -m 旗標啟動時, 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 稽核

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

  • 鏡像伺服器必須具有相同 GUID 的審核,才能使資料庫審核規格能夠寫入審核記錄。 這可以使用 命令 CREATE AUDIT WITH GUID = <guid-from-source-server-audit>來設定。

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

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

稽核管理員

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

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

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

數據定義語言語句

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

DDL 陳述式 描述
變更授權 變更安全性實體的擁有權。
更改資料庫稽核規範 使用 SQL Server Audit 功能改變資料庫稽核規格物件。
ALTER SERVER AUDIT 使用 SQL Server Audit 功能改變伺服器稽核物件。
更改伺服器審核規範 使用 SQL Server Audit 功能改變伺服器稽核規格物件。
建立資料庫稽核規格 使用 SQL Server Audit 功能建立資料庫稽核規格物件。
CREATE SERVER AUDIT 使用 SQL Server Audit 來建立伺服器稽核物件。
建立伺服器稽核規格 使用 SQL Server Audit 功能建立伺服器稽核規格物件。
刪除資料庫稽核規格 使用 SQL Server Audit 功能卸除資料庫稽核規格物件。
DROP SERVER AUDIT 使用 SQL Server Audit 功能卸除伺服器稽核物件。
刪除伺服器審核規範 使用 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 欄位。
函數_取得稽核檔案 從伺服器稽核建立的稽核檔案中傳回資訊。

目錄視圖

下表列出可用於 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 AUDITCONTROL SERVER 許可權。 若要建立、修改或移除資料庫稽核規格,資料庫主體需要擁有ALTER ANY DATABASE AUDIT 的許可權或在該資料庫上具有 ALTERCONTROL 的許可權。 此外,主體必須具有連線到資料庫的許可權,或ALTER ANY SERVER AUDITCONTROL SERVER許可權。

許可權 VIEW ANY DEFINITION 提供檢視伺服器層級稽核檢視的存取權,並提供 VIEW DEFINITION 檢視資料庫層級稽核檢視的存取權。 拒絕這些許可權會使檢視目錄的能力失效,即使主體具有 ALTER ANY SERVER AUDITALTER ANY DATABASE AUDIT 許可權也是如此。

如需如何授與許可權的詳細資訊,請參閱 GRANT

警告

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

文章 描述
伺服器屬性 - 安全性頁面 說明如何開啟 SQL Server 的登入稽核。 這些稽核記錄會儲存在 Windows 應用程式記錄檔中。
伺服器組態:c2 稽核模式 說明 SQL Server 中的 C2 安全合規性稽核模式。
安全性稽核事件類別 (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 安全性的最新資訊。