Sql-Server

INSERT 語句觸發 SQL Server 審計以將其寫在日誌中,儘管 INSERT 未列為審計操作

  • March 17, 2021

背景: 我試圖記錄使用者在數據庫中查詢的內容。我發現的一個選項是創建伺服器和數據庫審計規範。我不想包含 INSERT 語句,因為將為插入的每條記錄記錄這些語句,如果將大量數據添加到表中,這將是很多。

問題: 我們有一個 SQL 作業(在作業代理中),它使用 INSERT 查詢將數據插入到表中。我希望這些日誌不會出現在我們的 .sqlaudit 文件中,但確實出現了。甚至 INSERT 也不屬於我們的數據庫審計規範中的操作。我想知道它是否被觸發做另一個動作?我已經列出了我包含的所有操作,但據我了解,它們都不會觸發伺服器在 .sqlaudit 文件中寫入 INSERT 日誌。可能是什麼問題?

***注意:***我還使用查詢工具執行了一個 INSERT 查詢,它仍然會記錄它。

添加到數據庫審計規範的審計操作類型:

  • DATABASE_OBJECT_ACCESS_GROUP
  • SCHEMA_OBJECT_ACCESS_GROUP
  • DATABASE_OBJECT_CHANGE_GROUP
  • SCHEMA_OBJECT_CHANGE_GROUP
  • 刪除
  • 執行
  • 選擇
  • 更新

這是它在 .sqlaudit 文件中記錄的語句:

INSERT [dbo].[table_name]([a],[b],[c],[d],[e],[f],[g],[h],[i],[j],[k],[l]) VALUES(@Param000004,@Param000005,@Param000006,@Param000007,@Param000008,@Param000009,@Param000010,@Param000011,@Param000012,@Param000013,@Param000014,@Param000015)

最佳方法是禁用對該INSERT表的審核,但由於您似乎遇到了特殊情況,因此這是處理它的一種方法:

一旦通過連接到已審核的數據庫並執行此查詢INSERT來確保未啟用審核:

-- List enabled database specifications
SELECT  a.audit_id,
       a.name as audit_name,
       s.name as database_specification_name,
       d.audit_action_name,
       s.is_state_enabled,
       d.is_group,
       s.create_date,
       s.modify_date,
       d.audited_result
FROM sys.server_audits AS a
JOIN sys.database_audit_specifications AS s
ON a.audit_guid = s.audit_guid
JOIN sys.database_audit_specification_details AS d
ON s.database_specification_id = d.database_specification_id
WHERE s.is_state_enabled = 1

您可以過濾該審核以避免註冊插入。創建伺服器審計和伺服器審計規範文件說:

  1. 或者,在“過濾器”頁面上,向伺服器審核輸入謂詞或 WHERE 子句,以指定“正常”頁面中不可用的其他選項。將謂詞括在括號中;例如:(object_name = ‘EmployeesTable’)。

過濾器頁面可以通過 找到right click the audit > properties。如果您願意,更改審計而不註冊插入的 T-SQL 將是這樣的:

USE [master]
GO

ALTER SERVER AUDIT [Your_Audit_Name]
WHERE (NOT [statement] LIKE 'INSERT%')
GO

一些相關內容:

在 action_id / class_type 謂詞上過濾 SQL Server 審計

sys.fn_get_audit_file (Transact-SQL)

如何分析和讀取 SQL Server 審計資訊

引用自:https://dba.stackexchange.com/questions/286926