SQL Server 審計操作概念

pursuer.chen發表於2018-01-10

概述  

對於一般的資料庫系統審計可能不太會被重視,但是對於金融系統就不一樣的。金融系統對審計要求會很高,除了了記錄資料庫各種操作記錄還可能會需要開發報表來呈現這些行為資料。使用SQL Server Audit 功能,您可以對伺服器級別和資料庫級別事件組以及單個事件進行稽核。

“稽核”SQL Server 的例項或 SQL Server 資料庫涉及到跟蹤和記錄系統中發生的事件,您可以記錄每個例項的伺服器稽核操作組,或記錄每個資料庫的資料庫稽核操作組或資料庫稽核操作。在每次遇到可稽核操作時,都將發生稽核事件。

 

 SQL Server 稽核包括零個或多個稽核操作專案。這些稽核操作專案可以是一組操作,例如 Server_Object_Change_Group,也可以是單個操作,例如對錶的 SELECT 操作。

注意:Server_Object_Change_Group 包括對任何伺服器物件(資料庫或端點)的 CREATE、ALTER 和 DROP 操作。

稽核可以有以下類別的操作:

  • 伺服器級別。這些操作包括伺服器操作,例如管理更改以及登入和登出操作。
  • 資料庫級別。這些操作包括資料操作語言 (DML) 和資料定義語言 (DDL) 操作。
  • 稽核級別。這些操作包括稽核過程中的操作。

針對 SQL Server 稽核元件執行的某些操作本質上是在特定稽核中進行稽核的,在這些情況下,由於事件發生在父物件上,因此將自動發生稽核事件。

本質上將對下列操作進行稽核:

  • 伺服器稽核狀態更改(將狀態設定為 ON 或 OFF)

本質上將不對下列事件進行稽核:

  • CREATE SERVER AUDIT SPECIFICATION
  • ALTER SERVER AUDIT SPECIFICATION
  • DROP SERVER AUDIT SPECIFICATION
  • CREATE DATABASE AUDIT SPECIFICATION
  • ALTER DATABASE AUDIT SPECIFICATION
  • DROP DATABASE AUDIT SPECIFICATION

最初建立時會禁用所有稽核。

伺服器級別稽核操作組

伺服器級別稽核操作組是類似於 SQL Server 安全稽核事件類的操作。有關詳細資訊,請參閱 SQL Server 事件類參考。

下表介紹了伺服器級稽核操作組,並提供了適用的等效 SQL Server 事件類。

操作組名稱說明
APPLICATION_ROLE_CHANGE_PASSWORD_GROUP 更改應用程式角色的密碼時將引發此事件。 等效於 Audit App Role Change Password Event Class。
AUDIT_CHANGE_GROUP 建立、修改或刪除任何稽核時,均將引發此事件。 建立、修改或刪除任何稽核規範時,均將引發此事件。 任何針對某稽核的更改均將在該稽核中稽核。 等效於 Audit Change Audit Event Class。
BACKUP_RESTORE_GROUP 發出備份或還原命令時,將引發此事件。 等效於 稽核備份和還原事件類。
BROKER_LOGIN_GROUP 引發此事件的目的是為了報告與 Service Broker 傳輸安全性相關的稽核訊息。 等效於 Audit Broker Login Event Class。
DATABASE_CHANGE_GROUP 建立、更改或刪除資料庫時將引發此事件。 建立、更改或刪除任何資料庫時均將引發此事件。 等效於 Audit Database Management Event Class。
DATABASE_LOGOUT_GROUP 在包含資料庫使用者登出某一資料庫時,會引發此事件。 等效於 Audit Database Logout 事件類。
DATABASE_MIRRORING_LOGIN_GROUP 引發此事件的目的是為了報告與資料庫映象傳輸安全性相關的稽核訊息。 等效於 Audit Database Mirroring Login Event Class。
DATABASE_OBJECT_ACCESS_GROUP 訪問資料庫物件(如訊息型別、程式集和協定)時將引發此事件。 此事件由對任何資料庫的任何訪問而引發。 注意:這可能導致生成大量稽核記錄。

等效於 Audit Database Object Access Event Class。
DATABASE_OBJECT_CHANGE_GROUP 針對資料庫物件(如架構)執行 CREATE、ALTER 或 DROP 語句時將引發此事件。 建立、更改或刪除任何資料庫物件時均將引發此事件。 注意:這可能會導致生成大量稽核記錄。

等效於 Audit Database Object Management Event Class。
DATABASE_OBJECT_OWNERSHIP_CHANGE_GROUP 在資料庫範圍內更改物件所有者時,將引發此事件。 伺服器上任意資料庫的任意物件所有權發生更改時,均將引發此事件。 等效於 Audit Database Object Take Ownership Event Class。
DATABASE_OBJECT_PERMISSION_CHANGE_GROUP 針對資料庫物件(例如,程式集和架構)發出 GRANT、REVOKE 或 DENY 語句時將引發此事件。 伺服器上任意資料庫的任意物件許可權發生更改時,均將引發此事件。 等效於 Audit Database Object GDR Event Class。
DATABASE_OPERATION_GROUP 資料庫中發生操作(如檢查點或訂閱查詢通知)時將引發此事件。 對於任何資料庫的任何操作都將引發此事件。 等效於 Audit Database Operation Event Class。
DATABASE_OWNERSHIP_CHANGE_GROUP 使用 ALTER AUTHORIZATION 語句更改資料庫的所有者時,將引發此事件,並將檢查執行該操作所需的許可權。 伺服器上任意資料庫的任意資料庫所有權發生更改時,均將引發此事件。 等效於 Audit Change Database Owner Event Class。
DATABASE_PERMISSION_CHANGE_GROUP SQL Server 中的任何主體針對某語句許可權發出 GRANT、REVOKE 或 DENY 語句時均將引發此事件(僅適用於資料庫事件,例如授予對某資料庫的許可權)。

伺服器上任意資料庫的任意資料庫許可權發生更改 (GDR) 時,均將引發此事件。 等效於 Audit Database Scope GDR Event Class。
DATABASE_PRINCIPAL_CHANGE_GROUP 在資料庫中建立、更改或刪除主體(如使用者)時,將引發此事件。 等效於 Audit Database Principal Management Event Class。 (還等效於 Audit Add DB Principal 事件類,該事件類針對不推薦使用的 sp_grantdbaccess、sp_revokedbaccess、sp_addPrincipal 和 sp_dropPrincipal 儲存過程時發生。)

使用 sp_addrole 或 sp_droprole 儲存過程新增或刪除資料庫角色時,將引發此事件。 建立、更改或刪除任何資料庫的任何主體時均將引發此事件。 等效於 Audit Add Role Event Class。
DATABASE_PRINCIPAL_IMPERSONATION_GROUP 資料庫範圍記憶體在模擬操作(如 EXECUTE AS <主體> 或 SETPRINCIPAL)時將引發此事件。 此事件針對任何資料庫中完成的模擬引發。 等效於 Audit Database Principal Impersonation Event Class。
DATABASE_ROLE_MEMBER_CHANGE_GROUP 向資料庫角色新增登入名或從中刪除登入名時將引發此事件。 此事件類由 sp_addrolemember、sp_changegroup 和 sp_droprolemember 儲存過程引發。 任何資料庫的任何資料庫角色成員發生更改時,均將引發此事件。 等效於 Audit Add Member to DB Role Event Class。
DBCC_GROUP 主體發出任何 DBCC 命令時,將引發此事件。 等效於 Audit DBCC Event Class。
FAILED_DATABASE_AUTHENTICATION_GROUP 指示某個主體嘗試登入到包含資料庫並且失敗。 此類中的事件由新連線引發或由連線池中重用的連線引發。 等效於 Audit Login Failed Event Class。
FAILED_LOGIN_GROUP 指示主體嘗試登入到 SQL Server ,但是失敗。 此類中的事件由新連線引發或由連線池中重用的連線引發。 等效於 Audit Login Failed Event Class。
FULLTEXT_GROUP 指示發生了全文事件。 等效於 Audit Fulltext Event Class。
LOGIN_CHANGE_PASSWORD_GROUP 通過 ALTER LOGIN 語句或 sp_password 儲存過程更改登入密碼時,將引發此事件。 等效於 Audit Login Change Password Event Class。
LOGOUT_GROUP 指示主體已登出 SQL Server。 此類中的事件由新連線引發或由連線池中重用的連線引發。 等效於 Audit Logout Event Class。
SCHEMA_OBJECT_ACCESS_GROUP 每次在架構中使用物件許可權時,都將引發此事件。 等效於 Audit Schema Object Access Event Class。
SCHEMA_OBJECT_CHANGE_GROUP 針對架構執行 CREATE、ALTER 或 DROP 操作時將引發此事件。 等效於 Audit Schema Object Management Event Class。

此事件針對架構物件引發。 等效於 Audit Object Derived Permission Event Class。

任何資料庫的任何架構發生更改時,均將引發此事件。 等效於 Audit Statement Permission Event Class。
SCHEMA_OBJECT_OWNERSHIP_CHANGE_GROUP 檢查更改架構物件(例如表、過程或函式)的所有者的許可權時,會引發此事件。 使用 ALTER AUTHORIZATION 語句指定物件所有者時會引發此事件。 伺服器上任意資料庫的任意架構所有權發生更改時,均將引發此事件。 等效於 Audit Schema Object Take Ownership Event Class。
SCHEMA_OBJECT_PERMISSION_CHANGE_GROUP 對架構物件執行 GRANT、DENY 或 REVOKE 語句時將引發此事件。 等效於 Audit Schema Object GDR Event Class。
SERVER_OBJECT_CHANGE_GROUP 針對伺服器物件執行 CREATE、ALTER 或 DROP 操作時將引發此事件。 等效於 Audit Server Object Management Event Class。
SERVER_OBJECT_OWNERSHIP_CHANGE_GROUP 伺服器範圍中的物件的所有者發生更改時將引發此事件。 等效於 Audit Server Object Take Ownership Event Class。
SERVER_OBJECT_PERMISSION_CHANGE_GROUP SQL Server中的任何主體針對某伺服器物件許可權發出 GRANT、REVOKE、或 DENY 語句時,將引發此事件。 等效於 Audit Server Object GDR Event Class。
SERVER_OPERATION_GROUP 使用安全稽核操作(如使更改設定、資源、外部訪問或授權)時將引發此事件。 等效於 Audit Server Operation Event Class。
SERVER_PERMISSION_CHANGE_GROUP 為獲取伺服器範圍內的許可權(例如,建立登入名)而發出 GRANT、REVOKE 或 DENY 語句時,將引發此事件。 等效於 Audit Server Scope GDR Event Class。
SERVER_PRINCIPAL_CHANGE_GROUP 建立、更改或刪除伺服器主體時將引發此事件。 等效於 Audit Server Principal Management Event Class。

主體發出 sp_defaultdb 或 sp_defaultlanguage 儲存過程或 ALTER LOGIN 語句時,將引發此事件。 等效於 Audit Addlogin Event Class。

呼叫 sp_addlogin 和 sp_droplogin 儲存過程時會引發此事件。 還等效於 Audit Login Change Property Event Class。

此事件由 sp_grantlogin 或 sp_revokelogin 儲存過程引發。 等效於 Audit Login GDR Event Class。
SERVER_PRINCIPAL_IMPERSONATION_GROUP 伺服器範圍內發生模擬(如 EXECUTE AS <登入名>)時將引發此事件。 等效於 Audit Server Principal Impersonation Event Class。
SERVER_ROLE_MEMBER_CHANGE_GROUP 向固定伺服器角色新增登入名或從中刪除登入名時將引發此事件。 此事件由 sp_addsrvrolemember 和 sp_dropsrvrolemember 儲存過程引發。 等效於 Audit Add Login to Server Role Event Class。
SERVER_STATE_CHANGE_GROUP 修改 SQL Server 服務狀態時將引發此事件。 等效於 Audit Server Starts and Stops Event Class。
SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP 指示主體已成功登入到包含資料庫。 等效於 Audit Successful Database Authentication 事件類。
SUCCESSFUL_LOGIN_GROUP 指示主體已成功登入到 SQL Server。 此類中的事件由新連線引發或由連線池中重用的連線引發。 等效於 Audit Login Event Class。
TRACE_CHANGE_GROUP 對於檢查 ALTER TRACE 許可權的所有語句,都會引發此事件。 等效於 Audit Server Alter Trace Event Class。
TRANSACTION_GROUP 此事件由 BEGIN TRANSACTION、ROLLBACK TRANSACTION 和 COMMIT TRANSACTION 操作引發(無論是對這些語句的顯式呼叫還是隱式事務操作)。 此外,因事務回退導致的各個事件的 UNDO 操作也會引發此事件。
USER_CHANGE_PASSWORD_GROUP 每當使用 ALTER USER 語句更改包含資料庫使用者的密碼時,都會引發此事件。
USER_DEFINED_AUDIT_GROUP 此組監視器事件通過使用 sp_audit_write (Transact-SQL) 引發。 通常,觸發器或儲存過程包括對 sp_audit_write 的呼叫以便實現對重要事件的稽核。

注意事項

伺服器級別操作組涵蓋了整個 SQL Server 例項中的操作。例如,如果將相應操作組新增到伺服器稽核規範中,則將記錄任何資料庫中的任何架構物件訪問檢查。在資料庫稽核規範中,僅記錄該資料庫中的架構物件訪問。

伺服器級別的操作不允許對資料庫級別的操作進行詳細篩選。實現詳細操作篩選需要資料庫級別的稽核,例如,對 Employee 組中登入名的 Customers 表執行的 SELECT 操作進行的稽核。在使用者資料庫稽核規範中不要包括伺服器範圍的物件,例如系統檢視。

資料庫級別稽核操作組

資料庫級別稽核操作組是類似於 SQL Server 安全稽核事件類的操作。有關事件類的詳細資訊,請參閱 SQL Server 事件類參考。

下表介紹了資料庫級別稽核操作組,並提供了適用的等效 SQL Server 事件類。

操作組名稱說明
APPLICATION_ROLE_CHANGE_PASSWORD_GROUP 更改應用程式角色的密碼時將引發此事件。 等效於 Audit App Role Change Password Event Class。
AUDIT_CHANGE_GROUP 建立、修改或刪除任何稽核時,均將引發此事件。 建立、修改或刪除任何稽核規範時,均將引發此事件。 任何針對某稽核的更改均將在該稽核中稽核。 等效於 Audit Change Audit Event Class。
BACKUP_RESTORE_GROUP 發出備份或還原命令時,將引發此事件。 等效於 稽核備份和還原事件類。
DATABASE_CHANGE_GROUP 建立、更改或刪除資料庫時將引發此事件。 等效於 Audit Database Management Event Class。
DATABASE_LOGOUT_GROUP 在包含資料庫使用者登出某一資料庫時,會引發此事件。 等效於 稽核備份和還原事件類。
DATABASE_OBJECT_ACCESS_GROUP 訪問資料庫物件(如證照和非對稱金鑰)時將引發此事件。 等效於 Audit Database Object Access Event Class。
DATABASE_OBJECT_CHANGE_GROUP 針對資料庫物件(如架構)執行 CREATE、ALTER 或 DROP 語句時將引發此事件。 等效於 Audit Database Object Management Event Class。
DATABASE_OBJECT_OWNERSHIP_CHANGE_GROUP 資料庫範圍中的物件的所有者發生更改時將引發此事件。 等效於 Audit Database Object Take Ownership Event Class。
DATABASE_OBJECT_PERMISSION_CHANGE_GROUP 針對資料庫物件(例如,程式集和架構)發出 GRANT、REVOKE 或 DENY 語句時將引發此事件。 等效於 Audit Database Object GDR Event Class。
DATABASE_OPERATION_GROUP 資料庫中發生操作(如檢查點或訂閱查詢通知)時將引發此事件。 等效於 Audit Database Operation Event Class。
DATABASE_OWNERSHIP_CHANGE_GROUP 使用 ALTER AUTHORIZATION 語句更改資料庫的所有者時,將引發此事件,並將檢查執行該操作所需的許可權。 等效於 Audit Change Database Owner Event Class。
DATABASE_PERMISSION_CHANGE_GROUP SQL Server 中的任何使用者針對某語句許可權發出 GRANT、REVOKE 或 DENY 語句時均將引發此事件(僅適用於資料庫事件,例如授予對資料庫的許可權)。 等效於 Audit Database Scope GDR Event Class。
DATABASE_PRINCIPAL_CHANGE_GROUP 在資料庫中建立、更改或刪除主體(如使用者)時,將引發此事件。 等效於 Audit Database Principal Management Event Class。 還等效於 Audit Add DB User 事件類,該事件類針對不推薦使用的 sp_grantdbaccess、sp_revokedbaccess、sp_adduser 和 sp_dropuser 儲存過程發生。

使用不推薦使用的 sp_addrole 和 sp_droprole 儲存過程新增或刪除資料庫角色時,將引發此事件。 等效於 Audit Add Role Event Class。
DATABASE_PRINCIPAL_IMPERSONATION_GROUP 資料庫範圍內發生模擬(如 EXECUTE AS <使用者>)時將引發此事件。 等效於 Audit Database Principal Impersonation Event Class。
DATABASE_ROLE_MEMBER_CHANGE_GROUP 向資料庫角色新增登入名或從中刪除登入名時將引發此事件。 此事件類與 sp_addrolemember、sp_changegroup 和 sp_droprolemember 儲存過程一起使用。等效於 Audit Add Member to DB Role 事件類
DBCC_GROUP 主體發出任何 DBCC 命令時,將引發此事件。 等效於 Audit DBCC Event Class。
FAILED_DATABASE_AUTHENTICATION_GROUP 指示某個主體嘗試登入到包含資料庫並且失敗。 此類中的事件由新連線引發或由連線池中重用的連線引發。 引發此事件。
SCHEMA_OBJECT_ACCESS_GROUP 每次在架構中使用物件許可權時,都將引發此事件。 等效於 Audit Schema Object Access Event Class。
SCHEMA_OBJECT_CHANGE_GROUP 針對架構執行 CREATE、ALTER 或 DROP 操作時將引發此事件。 等效於 Audit Schema Object Management Event Class。

此事件針對架構物件引發。 等效於 Audit Object Derived Permission Event Class。 還等效於 Audit Statement Permission Event Class。
SCHEMA_OBJECT_OWNERSHIP_CHANGE_GROUP 檢查更改架構物件(例如表、過程或函式)的所有者的許可權時,將引發此事件。 使用 ALTER AUTHORIZATION 語句指定物件所有者時會引發此事件。 等效於 Audit Schema Object Take Ownership Event Class。
SCHEMA_OBJECT_PERMISSION_CHANGE_GROUP 每次對架構物件發出 GRANT、DENY 或 REVOKE 時,均會引發此事件。 等效於 Audit Schema Object GDR Event Class。
SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP 指示主體已成功登入到包含資料庫。 等效於 Audit Successful Database Authentication 事件類。
USER_CHANGE_PASSWORD_GROUP 每當使用 ALTER USER 語句更改包含資料庫使用者的密碼時,都會引發此事件。
USER_DEFINED_AUDIT_GROUP 此組監視器事件通過使用 sp_audit_write (Transact-SQL) 引發。

資料庫級別稽核操作

資料庫級別的操作支援直接對資料庫架構以及架構物件(例如表、檢視、儲存過程、函式、擴充套件儲存過程、佇列、同義詞)進行的特定操作進行稽核。不稽核型別、XML 架構集合、資料庫和架構。架構物件的稽核可以在架構和資料庫上配置,這意味著指定架構或資料庫包含的所有架構物件上的事件都將被稽核。下表介紹了資料庫級別的稽核操作。

操作 說明

SELECT

發出 SELECT 語句時將引發此事件。

UPDATE

發出 UPDATE 語句時將引發此事件。

INSERT

發出 INSERT 語句時將引發此事件。

DELETE

發出 DELETE 語句時將引發此事件。

EXECUTE

發出 EXECUTE 語句時將引發此事件。

RECEIVE

發出 RECEIVE 語句時將引發此事件。

REFERENCES

檢查 REFERENCES 許可權時將引發此事件。

注意事項

  • 資料庫級別的稽核操作不適用於列。

  • 當查詢處理器對查詢進行引數化時,稽核事件日誌中會出現引數而不是查詢的列值。

  • 不會記錄 RPC 語句。

稽核級別的稽核操作組

您也可以對稽核過程中的操作進行稽核。這些操作可以是伺服器範圍或資料庫範圍的操作。如果在資料庫範圍內,則僅針對資料庫稽核規範而進行。下表介紹了稽核級別的稽核操作組。

操作組名稱 說明

AUDIT_ CHANGE_GROUP

發出以下命令之一時將引發此事件:

  • CREATE SERVER AUDIT

  • ALTER SERVER AUDIT

  • DROP SERVER AUDIT

  • CREATE SERVER AUDIT SPECIFICATION

  • ALTER SERVER AUDIT SPECIFICATION

  • DROP SERVER AUDIT SPECIFICATION

  • CREATE DATABASE AUDIT SPECIFICATION

  • ALTER DATABASE AUDIT SPECIFICATION

  • DROP DATABASE AUDIT SPECIFICATION

 

 備註:文章內容來著SQLServer官方線上文件

總結

 本篇文章主要是對審計概念有一個瞭解,下一篇文章會詳細介紹如何收集審計資訊。

 

 

 

 

 

備註:

    作者:pursuer.chen

    部落格:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結,否則保留追究責任的權利。

《歡迎交流討論》

 

相關文章