Sql-Server

SQL Server 登錄審核和報告數據庫表中的數據

  • March 18, 2022

是否可以配置 SQL Server 數據庫將登錄(成功和失敗)的審核資訊寫入可查詢的數據庫表中?

要求是能夠生成包含以下內容的月度報告:

日期/時間

登錄名

使用者名

源主機名(即連接來自的設備)

源使用者名(連接來自的設備上的使用者名)

理想情況下,我們可以擷取該數據,將其保存在某個表中,並每月查詢它以獲取報告。

SQL Server Audit 似乎不允許我在表中擷取它——它似乎是一個文件、安全日誌或應用程序日誌,而我的 Google Fu 還不夠強大,無法找到任何滿足要求的東西。

缺少登錄觸發器來詢問會話並將連接嘗試記錄在可以稍後查詢的表中,是否還有其他可用選項?

登錄審核通過 SSMS 工作室或 T-SQL 提供的選項進行設置。您可以記錄成功或失敗或兩者兼而有之。推薦的目的地是可以使用 PowerShell 查詢或導出的 Windows 事件日誌。

這會快速填滿您的事件日誌,因為許多服務帳戶每分鐘連接多次。

可以創建更具選擇性的審計策略。從這裡

  • 通過 SQL Server Management Studio 連接 SQL Server 實例。
  • 導航到安全→右鍵點擊“審核”並選擇“新審核”→
  • 輸入審計名稱並選擇儲存 SQL Server 審計日誌的位置 → 點擊“確定” →
  • 右鍵點擊新創建的審計並選擇“啟用審計”。
  • 右鍵點擊“伺服器審計規範”並選擇“新建伺服器審計規範”→
  • 輸入適當的名稱 → 從審計下拉菜單中選擇新審計 →
  • 在“審核動作類型”欄中,選擇“登錄失敗組”和“登錄成功組”→點擊“確定”→
  • 右鍵點擊新創建的伺服器審計規範並選擇“啟用伺服器審計規範”。
  • 要查看 SQL Server 審核登錄跟踪,請導航到安全 | 審計→右鍵點擊新創建的審計並選擇“查看審計日誌”

你也可以做一個系統觸發器,但是當審計策略可以完成這項工作時,為什麼還要麻煩呢?

如果您正在談論與數據庫的連接,您可以使用擴展事件(或跟踪)並執行將從其創建的文件中讀取的作業以將數據儲存到表中。(與此類似: https ://www.brentozar.com/archive/2015/01/query-extended-events-target-xml/

如果您正在談論登錄到實例,並且您已經將成功和失敗的登錄擷取到 SQL 錯誤日誌中,則可以改為從錯誤日誌中讀取 (sp_readerrorlog) 並將其保存到表中。

這兩個選項都可以編寫腳本並在 SQL 作業中執行,以便您不斷更新表。

像這樣的東西可以作為腳本的基礎:

–create table LogAudit (LogDate datetime, processInfo varchar(30), Text varchar(max));

/*只創建一次 */

創建表 #LogReader (LogDate datetime, processInfo varchar(30), Text varchar(max));

插入#LogReader

exec sp_readerrorlog 0, 1, ’login';

插入 LogAudit

select *

from #LogReader where LogDate > (select isnull(max(logDate),‘1900-01-01’) from LogAudit)

drop table #LogReader

當日誌表中有大量數據時,不要忘記添加一些索引以使其快速執行。

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