Sql-Server
INSERT 語句觸發 SQL Server 審計以將其寫在日誌中,儘管 INSERT 未列為審計操作
背景: 我試圖記錄使用者在數據庫中查詢的內容。我發現的一個選項是創建伺服器和數據庫審計規範。我不想包含 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
您可以過濾該審核以避免註冊插入。創建伺服器審計和伺服器審計規範文件說:
- 或者,在“過濾器”頁面上,向伺服器審核輸入謂詞或 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 審計