Sql-Server

如何從 SQL Server 審計文件將數據載入到表中?

  • July 20, 2017

我在 SQL Server 2008 R2 中啟用了審計來監控 DML 和 DDL 操作。

有沒有辦法將 SQLAudit 文件載入到數據庫中?或者任何其他自動將審計細節直接載入到數據庫的方法?

以下過程對我們來說效果很好。

我們將審計文件寫入文件共享。我有一個專門用於處理這些審計文件的 Sql Server 實例。在這個 SQLAudit 實例上,我有一個每分鐘執行一次並執行儲存過程的作業。

儲存過程:

  • 使用 Powershell任何審計文件(目前未寫入)移動到暫存文件共享。powershell 命令使用 -ErrorAction SilentlyContinue 參數,該參數允許命令在復製到暫存文件共享時“跳過”目前正在寫入的文件。最終,“鎖定”的文件將可以在未來的時間間隔內複製。
  • 現在我有可用的 SQLAudit 文件可以從暫存文件共享中讀取,我們可以sys.fn_get_audit_file使用萬用字元來處理暫存文件共享中的所有 SQLAudit 文件。
  • 使用暫存文件共享中的文件後,我使用 Powershell 從暫存文件共享中刪除文件。

這是儲存過程。

CREATE PROCEDURE [dbo].[SqlAuditCaptureAuditLogs]
AS
BEGIN
   SET XACT_ABORT ON

   EXEC xp_cmdshell 'powershell.exe "Move-Item \\FBPISILON01.sfbcic.com\SQLAuditLogs-SC\*.sqlaudit \\FBPISILON01.sfbcic.com\SQLAuditLogs-SC\SQLAuditLogs_Staging -ErrorAction SilentlyContinue"'
       ,no_output

   INSERT INTO SQLAUDIT.[dbo].[SQLAUDIT_HISTORY] (
       event_time
       ,sequence_number
       ,action_id
       ,server_principal_name
       ,server_instance_name
       ,database_name
       ,schema_name
       ,object_name
       ,statement
       )
   SELECT event_time
       ,sequence_number
       ,action_id
       ,server_principal_name
       ,server_instance_name
       ,database_name
       ,schema_name
       ,object_name
       ,statement
   FROM sys.fn_get_audit_file('\\FBPISILON01.sfbcic.com\SQLAuditLogs-SC\SQLAuditLogs_Staging\*.*', DEFAULT, DEFAULT)
   WHERE server_principal_name NOT IN (
           ,'mfoperational'
           ,'mfreader'
           ,'aperioapplication'
           ,'aperioreader'
           ,'aperiosync'
           ,'aperiobuild'
           ,'DataFix'
           ,'mapinfo'
           ,'GeoSpatialUpdater'
           ,'sa'
           ,'ussql1'
           ,'usweb'
           ,'uswebs'
           ,'vmview'
           ,'dba-admin'
           )

   EXEC xp_cmdshell 'powershell.exe "Remove-Item \\FBPISILON01.sfbcic.com\SQLAuditLogs-SC\SQLAuditLogs_Staging\*.* -ErrorAction SilentlyContinue"'
       ,no_output
END

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