変更データキャプチャ-誰が変更を行ったかを知る方法は?


10

CDCが特定した変更を誰が行ったかを追跡します。

私の日時ハックの行に沿って、cdc変更追跡テーブルのデフォルト値を持つ新しいフィールドとしてsuser_snameを追加することにより、同じアプローチを試しました。しかし、これは、cdcプロセスの所有者を返すようであり、ベーステーブルで変更を開始したユーザーを返しません。私もoriginal_loginを試しましたが、sqlサービスアカウントのログインが返されます。繰り返しますが、おそらく変更を開始したユーザーではなく、cdcプロセスに関連付けられています。

はスタックオーバーフローで同様の質問を見つけましたが、フロントエンドからの変更を追跡するか、トリガーを介する以外に回答はありませんでした。これは、cdcを使用する目的に反するようです。私は再投稿しませんが、元のものがスタックオーバーフローにあったので、特にR2または2012がより良い方法を導入している場合は、ここで試してみようと思いました。

つまり、要するに、変更データキャプチャで誰が変更を行ったかを知るにはどうすればよいのでしょうか。

回答:


7

これについてバグを報告しましたが、「仕様による」としてクローズされました。

http://connect.microsoft.com/SQLServer/feedback/details/283707/cdc-options-to-capture-more-data-username-date-time-etc

残念ながら、この情報(およびできる限りCDCデータに関連付けようとするカスタムコード)を取得するには、別の手法(SQL監査やトリガーなど)を使用する必要があります。この問題については、SQL Server MVP Deep Dives(第1巻)の「SQL Server監査、変更の追跡、および変更データのキャプチャ」の章でも説明しました。

申し訳ありませんが、これ以上の回避策はありませんが、CDCの組み込み機能が要件を満たしていません。:-(


@RThomasアイテムが閉じていても引き続き投票できます-ときどき再訪問されます。投票よりもさらに役立つのは、欠落している機能を回避するためのリファクタリングのコストなど、この情報を有用にするビジネスニーズの詳細を示すコメントを追加することです。定性的データが定量的データをどのように上回るかについて少し書きました ...
アーロンバートランド

知っておくと、閉じたということは投票も閉じたということだと思いました。私のコメントで、OracleがCDC実装でこれを提供していることを指摘しました。それはちょっと論理的です。 docs.oracle.com/cd/A91202_01/901_doc/server.901/a90237/...
RThomas

6

列を追加してテーブルにトリガーを設定し、挿入/更新/削除時にユーザーを設定すると、cdcがこれを格納します。ユーザー名は、UIからコンテキスト情報を使用してユーザー名を渡すか、実際のセッションから取得できます。

SET @CapturedBy = CAST(REPLACE(CAST(CONTEXT_INFO() AS VARCHAR(10)),CHAR(0),'''''''') AS INT)

IF(@CapturedBy) IS NULL
    BEGIN
       SELECT @CapturedBy = P.[Code]
       FROM sys.dm_exec_sessions AS S
         INNER JOIN [dbo].[Person] AS P
          ON S.[login_name] = P.[User_Name]
       WHERE S.[session_id] = @@spid
    END

0

メインテーブルにUpdatedByフィールドを追加し、それをデフォルトのSUSER_NAME()またはORIGINAL_LOGIN()に設定して、そのデータをCDCで入力できますか?あなたが探しているのと同じ情報が得られると思います。


それはあなたにcdcのsvcアカウント/所有者を与えるだけです、私はそれらを試し、結果を2月に元の質問の方法で文書化したことに
気付く

あなたのコメントは、それをChangeDataテーブルに追加したと言っています。ChangeDataテーブルの基になっている元のテーブルについて話しています。しかし、私が投稿した後、これはインサートに対してのみ機能することに気づきました
シェフ

ああ、聞き取れませんでした。私は今あなたの言っていることを理解します。
RThomas 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.