Sql-Server

我正在尋找“SQL Server 審計”嗎?

  • January 27, 2020

伙計……這感覺像是一個廣泛的問題,所以提前道歉。“審計”這個詞在 DBA 世界中似乎有一定的深度,當我 google 時,我可能沒有問正確的問題。

我試圖弄清楚如何在 SQL Server 中進行一些簡單的“審計”。我有一部分要跟踪更改的使用者表(INSERTS、UPDATES 和 DELETES)。我想知道進行了更改,何時進行了更改,以及之前和之後的結果是什麼(在 UPDATES 的情況下)。

過去,我使用將寫入“審計”表的觸發器來完成此操作,這為我提供了一種基本但直覺的方式,可以快速將數據庫中的任何相關更改歸零。

出於某些許可和支持原因,在我目前的情況下,建構觸發器來擷取此資訊將不起作用。我正在研究其他選項(SQL Server 功能和商業應用程序)。我在 AWS RDS 上執行 SQL Server,看起來支持 SQL Server 審計。*SQL Server Audit 的輸出是否適合快速輕鬆地使用?*比如,我可以輕鬆地查詢表 ABC,最後一次更改某個 ROW 的時間/誰/什麼?或者,我所描述的更符合商業產品(如 Apex SQL)?

由於您使用的是 SQL Server 2016,因此您可以使用時態表。似乎您需要結合各種事物來解決您的目標。就插入/更新和刪除方面的跟踪變化而言,這可以通過使用臨時表來解決。這也將解決您的第二個問題,即之前的價值是什麼。目前值無論如何都儲存在主題表中。

就您的第一個問題而言,我認為您需要在主題表上啟用審計以跟踪誰做了提到的操作,即插入/刪除/更新。

讓我們在這裡稍微了解一下臨時表:

臨時表 - 不要與臨時表混淆 - 作為 SQL Server 2016 中的一項新功能引入。臨時表,也稱為系統版本表,允許 SQL Server 自動保留表中數據的歷史記錄。

系統版本表允許您查詢更新和刪除的數據,而普通表只能返回目前數據。例如,如果將列值從 5 更新為 10,則只能在普通表中檢索值 10。臨時表還允許您檢索舊值 5。這是通過保留歷史表來完成的。此歷史表將舊數據與開始和結束數據一起儲存,以指示記錄何時處於活動狀態。

這些是時態表最常見的案例:

  • 審計 –> 使用時態表,您可以找出特定實體在其整個生命週期中具有的值。
  • 緩慢變化的維度 –> 系統版本化表的行為與具有類型 2 的所有列的變化行為的維度完全相同。
  • 修復記錄級損壞 –> 將其視為單個表上的一種備份機制。不小心刪除了一條記錄?從歷史表中檢索它並將其插入回主表中。

您可以在下面的連結中閱讀有關時態表的更多資訊以及範例:

您可以在數據庫級別啟用審計以擷取插入/更新和刪除操作。這將擷取誰執行了上述操作以及其他一些基本細節,例如何時完成。

這種審計有幾個缺點:

  • SQL Server 審計使用被審計的 SQL Server 本身的資源,這會降低性能
  • 難以全面管理多個實例並整合審計數據。
  • 管理、分析和歸檔審計數據(無論是在文件中還是日誌中)都涉及大量繁重的工作,並且需要手動操作來導入、歸檔和報告。
  • 在 SQL Server 版本 2016 之前,此功能在 SQL Server 的標準版本中不可用。

在您的情況下,如果您將這兩個概念結合起來,這應該可以達到您的目的。

以上希望有所幫助。

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