概述
對於一般的數據庫系統審計可能不太會被重視,但是對於金融系統就不一樣的。金融系統對審計要求會很高,除了了記錄數據庫各種操作記錄還可能會需要開發報表來呈現這些行為數據。使用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 |
發出以下命令之一時將引發此事件:
|
備注:文章內容來着SQLServer官方在線文檔
總結
本篇文章主要是對審計概念有一個了解,下一篇文章會詳細介紹如何收集審計信息。
備注: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須注明文章來源,且在文章開頭明顯處給明鏈接,否則保留追究責任的權利。 《歡迎交流討論》 |