web-dev-qa-db-ja.com

SQL Server監査ファイルからテーブルにデータを読み込む方法は?

SQL Server 2008 R2で監査を有効にして、DMLおよびDDL操作を監視しました。

SQLAuditファイルをデータベースにロードする方法はありますか?または、監査の詳細をデータベースに直接自動的にロードする他の方法はありますか?

2
pradeep

次のプロセスは私たちにとってうまくいきました。

監査ファイルをファイル共有に書き込みます。これらの監査ファイルの処理専用の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
6
Scott Hodgin