使用SQLServerAudit記錄資料庫變更
最近工作中有一個需求就是某一個比較重要的業務表經常被莫名其妙的變更。在SQL Server中這類工作如果不事前捕獲記錄的話無法做到。對於捕獲變更來說可以考慮的選擇包括TraceCDC。但Trace的成本比較大對於負載量較高的系統並不合適而CDC需要影響業務庫因此SQL Server Audit就是一個比較好的選擇。
在SQL Server中如果只是希望獲得表的更新時間只需要看錶的聚集索引的最後更新時間即可程式碼如下
SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( `DateBaseName`)
AND OBJECT_ID=OBJECT_ID(`TableName`)
但這種方式並不能看到由某人在某個時間修改了某個表在此使用Server Audit。Server Audit底層採用的是擴充套件事件且儲存結構可以以單獨檔案獨立於使用者庫因此不僅效能較好也不會對使用者庫產生影響。
下面是啟用稽核的T-SQL程式碼
USE master
CREATE SERVER AUDIT audit1 TO FILE (FILEPATH=`D:SQLAudit`)
USE AdventureWorks2012
CREATE DATABASE AUDIT SPECIFICATION SerialPic FOR SERVER AUDIT audit1
ADD(UPDATE,INSERT,DELETE ON Person.Address by dbo)
USE master
CREATE SERVER AUDIT audit1 TO FILE (FILEPATH=`D:SQLAudit`)
USE AdventureWorks2012
CREATE DATABASE AUDIT SPECIFICATION SerialPic FOR SERVER AUDIT audit1
ADD(UPDATE,INSERT,DELETE ON Person.Address by dbo)
上述程式碼首先建立伺服器級別的稽核並存入DSQLAudit中然後對應建立資料庫級別的稽核。在資料庫級別的稽核中跟蹤Person.Address表的UpdateInsertDelete操作。
接下來嘗試修改資料庫Person.Address在安全-稽核下檢視稽核日誌如圖1所示。
image
圖1.檢視稽核日誌
結果如圖2所示。
image
圖2.資料庫稽核記錄
這樣就可以看到誰在什麼時間曾經對該表做過哪些修改。當然除了UI方式也可以通過T-SQL方式檢視稽核記錄。
SELECT * FROM
fn_get_audit_file(`D:SQLAuditaudit1_B8A7821A-D735-446D-B6FA-DF582AB80375_0_130648999540780000.sqlaudit`, default, default)
分類: SQL Server安全
本文轉自CareySon部落格園部落格原文連結http://www.cnblogs.com/CareySon/p/4204027.html如需轉載請自行聯絡原作者
相關文章
- 幾千萬記錄,資料庫表結構如何平滑變更?資料庫
- LiquiBase 管理資料庫變更實踐UI資料庫
- MAKT 物料組 變更記錄表
- Android Q 新特性及變更記錄Android
- Spring Boot 2 實戰:使用 Flyway 管理你資料庫的版本變更Spring Boot資料庫
- 資料庫系列:高併發下的資料欄位變更資料庫
- 資料庫mysql學習筆記記錄資料庫MySql筆記
- 變更OS時間對資料庫的影響資料庫
- DBus資料庫表結構變更處理方案資料庫
- 【SQL】Oracle資料庫變更後sql效能對比SQLOracle資料庫
- 由於目錄變更引起的資料服務無法啟動的問題處理記錄
- 為VNPY增加資料庫記錄交易資料功能資料庫
- SQL Server 資料庫基本記錄(一)SQLServer資料庫
- 向量資料庫Chroma學習記錄資料庫
- cmdb 查詢資料庫操作記錄資料庫
- WindowsServer 2012資料庫遷移記錄WindowsServer資料庫
- SQL Server 資料庫基本記錄(二)SQLServer資料庫
- SQL Server 資料庫基本記錄(三)SQLServer資料庫
- 向量資料庫之Lancedb學習記錄資料庫
- 常見資料庫最佳化記錄資料庫
- thinkphp6多資料庫配置記錄PHP資料庫
- 使用Java 14的新記錄型別連線資料庫表 - MinborgJava型別資料庫
- IndexedDB 建立資料庫時使用自增的Key 更新資料庫遇到的問題的一點記錄Index資料庫
- 不同資料庫限制取前N條記錄資料庫
- 「前端 BUG 錄」變更 UI 庫主題引發的問題前端UI
- 亞馬遜雲科技:對Amazon Aurora進行資料庫變更管理亞馬遜資料庫
- [Kogel.Subscribe.Mssql]SQL Server增量訂閱,資料庫變更監聽SQLServer資料庫
- golang常用庫:日誌記錄庫-logrus使用Golang
- MYSQL資料庫表記錄刪除解決方案MySql資料庫
- 面試問題記錄 二 (資料庫、Linux、Redis)面試資料庫LinuxRedis
- SQL Server 變更資料捕獲(CDC)SQLServer
- 資料庫物件資訊記錄表|全方位認識 mysql 系統庫資料庫物件MySql
- 通過觸發器記錄資料庫連線資訊觸發器資料庫
- RAC資料庫心跳更換方案資料庫
- MongoDB資料庫再闖禍? Dalil使用者資訊和通話記錄全曝光MongoDB資料庫
- 達夢資料庫資料型別的變更無效錯誤,如此解決妙啊資料庫資料型別
- [我是傻X] 記錄一次 Git 更換倉庫更換金鑰Git
- Vue 使用History記錄上一頁面的資料Vue
- C#獲取變更過的DataTable記錄的實現方法C#