none
監査ログにおけるフィルタ設定について RRS feed

  • 質問

  • 環境:SQL Server 2005 Enterprise Edition (64-bit) SP2
    
    あるテーブルに関する監査を
    
    http://download.microsoft.com/download/a/5/8/a58af361-d829-4eb6-b248-d552696ad81d/LOGAudit_SQL_Profiler.pdf
    
    を参考に設定しました。(トレースファイルに出すまでとします)
    
    例)
    select * from ::fn_trace_getinfo(default)
    traceid	property	value
    ---------------------------------------------------------------------
    3	5	1
    
    
    select * from fn_trace_getfilterinfo(3) ;
    columnid	logical_operater	comparison_operator	value
    ---------------------------------------------------------------------
    1	0	6	%テーブル名%
    34	1	6	テーブル名
    
    のように設定されています。
    
    作られたトレースファイルをプロファイラで覗いて見ると、フィルタが全く適用されていないのですが、他にまだ何か設定が必要なのでしょうか?
    プロパティを見ると、絞ったイベントだけ表示されているのでプロシージャの中身は反映されているようですが、
    設定した列にはフィルタが適用されていませんでした。
    
    
    以上、宜しくお願いいたします。
    
    
    2009年5月20日 2:39

回答

  • スクリプトにてトレースを実施する際、 sp_trace_setfilter の最初のフィルタの @logical_operator 条件を And(0) にしなければ、フィルターが正常に機能しないという現象を経験したことがございます。

    [サーバースクリプト内容]

    -- Create a Queue
    declare @rc int
    declare @TraceID int
    declare @maxfilesize bigint
    :
    :

    -- Set the Filters
    declare @intfilter int
    declare @bigintfilter bigint

    set @intfilter = 2
    exec sp_trace_setfilter @TraceID, 32, 0, 0, @intfilter

    set @intfilter = 11
    exec sp_trace_setfilter @TraceID, 57, 0, 0, @intfilter

    最初のsp_trace_setfilterの@logical_operatorを"0" に変更します。

    sp_trace_setfilter (Transact-SQL)
    http://msdn.microsoft.com/ja-jp/library/ms174404(SQL.90).aspx

    • 回答としてマーク 2009年5月21日 14:41
    2009年5月20日 6:52

すべての返信

  • スクリプトにてトレースを実施する際、 sp_trace_setfilter の最初のフィルタの @logical_operator 条件を And(0) にしなければ、フィルターが正常に機能しないという現象を経験したことがございます。

    [サーバースクリプト内容]

    -- Create a Queue
    declare @rc int
    declare @TraceID int
    declare @maxfilesize bigint
    :
    :

    -- Set the Filters
    declare @intfilter int
    declare @bigintfilter bigint

    set @intfilter = 2
    exec sp_trace_setfilter @TraceID, 32, 0, 0, @intfilter

    set @intfilter = 11
    exec sp_trace_setfilter @TraceID, 57, 0, 0, @intfilter

    最初のsp_trace_setfilterの@logical_operatorを"0" に変更します。

    sp_trace_setfilter (Transact-SQL)
    http://msdn.microsoft.com/ja-jp/library/ms174404(SQL.90).aspx

    • 回答としてマーク 2009年5月21日 14:41
    2009年5月20日 6:52
  • >NOBTA様

    ご回答ありがとうございます。

    ご指摘通りでした、とりあえず全て0にしてみたら、フィルタが適用されるようになりました。
    何故か、エクスポートしたファイルを見ると、確かに@logical_operatorの値は1になっていました。
    (ただ、上記SQL結果で、片方0で、片方1になっているのが良く分からないのですが・・・)

    ここの、AND、ORの意味は、例えば、フィルタ適用を同じ列に2つ指定した場合など?(テーブル名A and テーブル名B)
    と認識してるのですが、違うのでしょうか・・・
    1つのテーブルで、ORだと(テーブル名A or 全て)みたいな意図になってしまうのでしょうかね。
    だとしても、そもそもエクスポートを信じていたので気づきにくかったです。

    とりあえず、今回の事象につきましては、解決いたしました。
    ありがとうございました!
    2009年5月21日 14:41