問題タブ [auditing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2374 参照

sql-server-2005 - 監査トリガー: INSERTED または DELETED システム テーブルを使用する

最近、テーブルを監査する方法のトピックが私たちの議論で浮上しました...これにアプローチする最良の方法についてのあなたの意見が好きです. 以前の各 DBA が正しいと信じていたことを実行したため、データベースには両方のアプローチが混在しています (これは良くありません)。したがって、いずれかのモデルに従うように変更する必要があります。

アプローチ 1:監査テーブルに、メイン テーブルから置き換え/削除されたレコードのみを格納します (システム テーブル DELETED を使用)。したがって、メイン テーブルの各 UPDATE および DELETE について、置き換えられるレコードは、'U' ( UPDATE の場合) または 'D' (DELETE の場合) として 'Audit_Type' 列を使用して監査テーブルに挿入されます。

INSERT は監査されません。レコードの現在のバージョンについては、常にメイン テーブルをクエリします。履歴については、監査テーブルにクエリを実行します。

長所: 以前のバージョンのレコードを保存するのは直感的です 短所: 特定のレコードの履歴を知る必要がある場合は、監査テーブルをメイン テーブルと結合する必要があります。

アプローチ 2:メイン テーブルに入るすべてのレコードを監査テーブルに格納します (システム テーブル INSERTED を使用)。

メインテーブルに INSERTED/UPDATED/DELETED された各レコードは、監査テーブルにも格納されます。したがって、新しいレコードを挿入すると、監査テーブルにも挿入されます。更新されると、(INSERTED からの) 新しいバージョンのテーブルが Audit テーブルに格納されます。削除すると、古いバージョン (DELETED から) のテーブルが監査テーブルに格納されます。

長所: 特定のレコードの履歴を知る必要がある場合、すべてが 1 か所にあります。

すべてをここに挙げたわけではありませんが、それぞれのアプローチには長所と短所があります。

0 投票する
1 に答える
1058 参照

c# - NHibernate で一般的なフィールドおよびコンポーネント レベルの変更追跡を行うにはどうすればよいですか?

私のアプリケーションでは、フィールド レベルの変更追跡を行う必要があるいくつかの異なる種類のエンティティがあります。私はこれをグーグルで検索しましたが、すでに永続化されているエンティティのフィールドを変更するだけで、単純な「挿入日」および「更新日」監査追跡を行う例しか思いつきません。次の理由により、私の要件はより複雑です。

  1. 保存されているエンティティのフィールドを変更するだけでなく、変更を表す新しいエンティティを作成する必要があります (私が見つけた挿入日、更新日の例のように)
  2. 追跡されたエンティティを更新する同じトランザクションで、これらの新しいエンティティを DB に保存する必要があります
  3. 追跡対象のエンティティに添付された ValueObjects のコレクションへの変更を追跡する必要があります
  4. 追跡対象のエンティティごとに個別のログ コードを記述する必要はありません。

コード例:

Account オブジェクトまたは Computer オブジェクトのいずれかの値が変更されるか、Computer オブジェクトに関連付けられた IPAddresses のリストが変更されるたびに、次のエンティティ変更レコードを作成して保存する必要があります。

追跡対象の各エンティティは ITrackChanges マーカー インターフェイスを実装し、各値オブジェクトは ValueObject 基本クラスから継承します。値オブジェクトは、NHibernate のコンポーネントとしてマップされます。

最終結果として取得しようとしているものの例として、Computer オブジェクトを ID 1 で更新し、AssetTag を "ABC123" から "ABC124" に変更し、IP アドレスのリストを { "1.2.3.4" から変更するとします。 " } を { "1.2.3.4" , "1.2.3.5" } に変更すると、2 つの EntityChange レコードを取得する必要があります。

これを実装するための最良の方法に関するアイデアはありますか? ドキュメントを読んだところ、インターセプターやイベントリスナーを作成する必要があるように見えますが、更新中のエンティティを変更するだけの例を見つけることができませんでした。サンプルコードは、どんな回答でも大歓迎です。

これが NHibernate でサポートされているものであると仮定するのは間違っていますか? ORM として LLBLGen を使用する以前のアプリケーションでこれを実装できましたが、NHibernate を使用するアプリケーションでこれを実装しなければならなかったのはこれが初めてです。

0 投票する
3 に答える
2916 参照

sql - SQL Server ユーザー名関数

次の T-SQL を検討してください。

これらのアカウントWITHOUT LOGINを監査目的で使用することを検討しています。基本的に、「データベース接続を取得する」コードは、EXECUTE AS USER...WITH NO REVERT既に実行されている接続を返します。

問題は、これらのユーザー名関数のいずれからも一貫した結果が得られないことです。出力の 2 行は次のとおりです。

関数はの後にUSER正しい出力を生成します'EXECUTE AS'が、事前にユーザー名ではなく dbo を表示していますSUSER関数は正反対です-最初は正しいですが、偽装後に何らかの ID を表示しています

SUSER_SNAMEの MSDN ドキュメントには、これが機能するはずの例が明示的に示されています。

更新:私が探しているのは、最初のケースで「original_user」を生成し、2 番目のケースで「my_test_user」を生成する関数です。

0 投票する
1 に答える
406 参照

ruby-on-rails - インスタンスとその関連付けの監査とモデルライフサイクル管理?

訴訟のリクエストを追跡するアプリケーションを作成しようとしています。主なモデルはCaseであり、has_manySubject、Keywords、Notes、およびEvidences(has_manyCustodyLogs)です。アプリケーションは法律に関連しているため、通常とは異なる要件がいくつかあります。

  • CRUD操作は、操作が何であったか、アクターが誰であったか、操作がいつ発生したかなど、ログに記録する必要があります
  • データを検証するための何らかの方法が必要です(つまり、レコードのMD5チェックサムを記録する)
  • 一部のデータはライトワンスである必要があります(つまり、アプリは監査ログエントリを作成できますが、そのログはその後アプリケーション内から編集または削除できません)
  • 関連するオブジェクトへの変更は、おそらくネスト全体でログに記録する必要があります。たとえば、CustodyLogをエビデンスに追加するには、それ自体のログ、そのエビデンスのログ、および親ケースのログが必要です。これは、Caseモデルデータ自体が最後に変更されたときだけでなく、Caseの最終更新タイムスタンプが実際の最後の更新を正確に反映するようにするためです。

私はこれを少しは機能させていますが、問題が発生しています。認証は外部のWebシングルサインオンサービスによって処理されているため、ログインしているユーザーのIDに対する唯一の可視性はリクエスト変数にあります。たとえば、コールバックを介してモデルに監査ログを設定すると、すべてのデータ変更がログに記録されることはほぼ確実ですが、モデルには要求変数が表示されないため、ユーザーIDをログに記録できません。これにより、ステートマシンへの変更(現在はstate_machineプラグインを使用)がログに記録されます。

一方、監査ログをアプリケーションコントローラーに配置すると、すべてのCRUD操作がログに記録されることを確認できなくなります(たとえば、Subject.createを呼び出すCaseモデルのコードはログに記録されません)。 。また、状態の変化も失われると思います。

ログインしたユーザーのユーザーIDが記録されるように、すべてのCRUD操作がアソシエーションツリー全体にログに記録されるようにする方法はありますか?

0 投票する
1 に答える
766 参照

sql-server - SQLServer2008-インスタンス間のServiceBrokerの構成

このWebサイトのスクリプトを使用して、ServiceBrokerベースの監査を構成しています。最初の段階-同じインスタンス上のデータベース間にSBを設定すると正常に機能します。

しかし、その後、インスタンス間でService Brokerを適用しようとすると、悲しみにぶつかります。

コマンドラインツールssbdiagnoseを使用して、構成エラーを見つけます。

報告している

内部例外が発生しました:入力文字列が正しい形式ではありませんでした。

今、これは設定をチェックしているだけで、メッセージを送信するところまで到達していないので、「入力文字列」は設定の一部である必要がありますが、エラーメッセージにはエラーが発生した場所が示されていませんssbdiagnoseエラーの診断についてオンラインで何も見つかりません。

ssbdiagnoseの経験がある人は、エラーがどこにあるのか、そしてそれを修正するために何をする必要があるのか​​を理解するのに役立ちますか?

クリス

0 投票する
1 に答える
326 参照

asp.net - ドメインコンテキストでインターセプターを休止状態にする

Hibernate 2.1 で監査インターセプターを作成し、それにドメイン コンテキストを渡すことは (クリーンな方法で) 可能ですか?

私が達成したいのは、日時を設定することです(簡単に行うことができます-簡単なグーグルの後に記事をロードします)が、アイテムを作成したユーザー、またはまだ何も見つけていないエンティティを変更したユーザーなどのオブジェクトを設定しますこれはこれをカバーします。

アプリケーションのリクエスト/起動時 (nhibernate インターセプターを登録する必要がある場所) でオブジェクトがわからないため、適切な回避策を知っている人はいますか?

前もってありがとう、マークH

0 投票する
8 に答える
29058 参照

c# - 2つのC#オブジェクト間のプロパティの違いを見つける

私が取り組んでいるプロジェクトでは、ユーザーが電子メールや請求先住所などを変更した場合の簡単な監査ログが必要です。作業しているオブジェクトは、WCFサービスとWebサービスのさまざまなソースからのものです。

リフレクションを使用して次のメソッドを実装し、2つの異なるオブジェクトのプロパティへの変更を見つけました。これにより、古い値と新しい値とともに違いがあるプロパティのリストが生成されます。

「すべての数値タイプ(Int32やDoubleなど)は、String、Char、DateTimeと同様に、IComparableを実装している」ため、System.IComparableを探しています。これは、カスタムクラスではないプロパティを見つけるための最良の方法のように思われました。

WCFまたはWebサービスプロキシコードによって生成されたPropertyChangedイベントを利用することは良さそうに聞こえましたが、監査ログ(古い値と新しい値)に十分な情報が得られません。

これを行うためのより良い方法があるかどうかについての入力を探しています、ありがとう!

@Aaronaught、オブジェクトの実行に基づいて正の一致を生成しているサンプルコードを次に示します。

「[アドレス]StateProvinceが「MyAccountService.StateProvince」から「MyAccountService.StateProvince」に変更されました」

これはStateProvinceクラスの2つの異なるインスタンスですが、プロパティの値は同じです(この場合はすべてnullです)。equalsメソッドをオーバーライドしていません。

0 投票する
1 に答える
492 参照

.net - Web アプリケーションの監査

アプリケーションがシステム アカウントとしてデータベースに接続している場合、Web アプリケーション、特にデータベースの変更を監査するにはどうすればよいですか?

簡単なデータベース トリガーを使用して監査テーブルに書き込みたいのですが、実際に作業を行っているアカウントではなく、ログオンしているユーザーを追加する方法がわかりません。

ID フローに関する記事をいくつか読みましたが、その概念を完全には理解していません。

0 投票する
1 に答える
147 参照

nhibernate - NHibernateおよびSetSessionAuth監査列

トリガーによって設定された監査列があります。私の在職期間よりも前のセキュリティ上の理由から、一般的なユーザーでログインし、「セッション認証の設定」を実行して、ユーザーをログインしているユーザーのデータベースユーザーに変更します。

NHibernateに変換すると、まったく新しいセッションが作成され、set session authを実行しようとするとすべてがジャックアップされるため、setsessionauthをオフにしました...

現在、NHibernateにセッションをリサイクルせずに「セッション認証の設定」を実行させる方法を見つけようとしています。これにより、既存のトリガーベースの監査列をレガシーアプリと新しいNHibernateアプリの両方で使用できます。

それは理想的な解決策ではなく、それを行うための最良の方法でもありませんが、それは可能ですか?

この種のアクセスを可能にする代替インターフェースがあることを望んでいました。

誰かがそれを行う方法を知っていますか、またはあなたは私に向けて良いヒントを教えてもらえますか?

ありがとう、

エリック-