問題タブ [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.
c# - LINQ監査とWebアプリケーションを使用する現在のユーザー
バックグラウンド:
挿入/削除/更新(および場合によっては読み取り)のデータベース監査を実行する必要があるWebアプリケーションがあります。ORMとしてLINQを使用しています。Webで見つけたいくつかのアイデアを使用して、属性を使用して、監査テーブルが関連付けられているエンティティを装飾する方法を考え出しました。監査テーブル自体には、現在のユーザーのIDと名前、変更タイプ、変更時間、および操作が成功したかどうかのフィールドに加えて、元のテーブルと同じタイプの同じ列を含める必要があります。監査はSubmitChanges中に行われます。データコンテキストは抽象的であり、具体的な実装でSubmitChangesを継承してオーバーライドします。抽象データコンテキストは、実際には、DataContextを拡張し、現在のユーザーIDと名前のプレースホルダーを持つCurrentUserプロパティを追加するAbstractAuditableDataContextから派生します。デフォルトでは、これらは0であり、ログインしているユーザーがいない場合は「システム」です。たとえば、登録中またはログイン中、ユーザーテーブルの特定のフィールドが更新される可能性があります。アプリケーションは、ASP.NET MVCを使用してC#で記述されています。
問題:
派生データコンテキストの現在のユーザープロパティを設定するための最良の方法は何ですか?CurrentUserが設定されているかどうかを確認し、設定されていない場合は入力するAuditUtilityに挿入されるユーティリティクラスを作成する必要があります。テストではこれをモックアウトしますが、ライブアプリケーションではおそらく遅延を使用します-セッションでロードして取得/設定します。または、この機能を実行するために(すべてのコントローラーで使用される)データコンテキストファクトリを変更する必要があります。私はユニットテスト中にすでにモックファクトリを使用しているので、これには新しいクラスの作成は含まれません。または、ファクトリの外部で派生を実行し、コンテキストの作成中に現在のユーザーを注入する必要があります。これにより、「代理」監査を行うことができます。
これは主観的なものだと思いますが、ご意見・ご感想をお寄せいただければ幸いです。
ありがとう。
ejb-3.0 - JBoss Seam (EJB3+JSF) による監査ログ
JBoss Seam で書かれた Web アプリケーションの監査ログを実装する必要があります。EntityListeners は良い候補のように思えますが、EntityListeners をアプリケーション セッション コンテキストに接続して、ログイン済みの使用済みプリンシパルを監査レコードに含める方法がわかりません。
この「接続」を行う方法があるかどうか、またはこのプログラミング環境に監査ログを実装するためのより快適でエレガントで効果的な方法があるかどうか疑問に思います。
前もって感謝します。
ラファ。
編集:
Damoの回答に感謝します!ID コンポーネントの注入を試みましたが、うまくいきませんでした。ただし、Component.getInstance() への提案された呼び出しは、EntityListener 内のユーザーの ID への望ましい参照を提供しました。
asp.net-mvc - アタッチシナリオのlinq datacontext GetModifiedMembers
asp.net MVC アプリケーションに楽観的ロックを実装し、監査追跡を提供しようとしています。
監査フレームワークは、SubmitChanges 中に DataContext.GetModifiedMembers を呼び出せることに依存していますが、これは理にかなっていると思います。
楽観的ロックでは、ROWVERSION タイムスタンプが使用され、base64 にシリアル化され、ビューの非表示フィールドに配置されます。
私の編集アクションは次のようになります。
これを行うと、DataContext.GetModifiedMembers は、データベースと提供された値の間で変更されたものだけでなく、MyType のすべてのプロパティを常に返すため、監査が中断されます。具体的には、すべてのプロパティが新しい値から新しい値に変更されたものとして返されるため、リストに対して巧妙なことを行うことはできません。
アタッチする前に最初にオブジェクトをロードしようとしましたが、これにより重複キーの例外が発生します。
次に、UpdateModel を使用してみました。
これは監査で機能しますが、楽観的ロックは失敗します。ChangeConflictException ではなく、InvalidOperationException を取得します。これは、UpdateModel が concurrentTS フィールド (明らかに読み取り専用) を変更しているためです。
私は何を間違っていますか?
sql - SQL Server 2008 変更データ キャプチャ、変更を行ったのは誰ですか?
SQL データの変更の監査について、1 週間ほど前に SOF で質問しました。トリガーの使用に関する通常の話題が出てきましたが、SQL Server 2008 の CDC についての言及もありました。
私は今日それを試してみましたが、これまでのところとても良いです.1つだけサポートしているとは思えませんが、実際に誰が変更を行ったかを追跡しています. 誰がその声明を実行しましたか?
誰かが監査に CDC を使用したことがあるかどうか、また誰が変更を行ったかをどのように追跡したか知りたいです。
security - 基幹業務アプリケーションの1つの監査でどのようなセキュリティイベントが発生しますか?
私はすでに承認の成功、失敗、ログアウトを監査しています。
すべてのメソッド呼び出しを監査(ログ記録)し、変更されたすべての行と列のバージョンを保持することを検討しましたが、これらのオプションはどちらも監査の複雑さを大幅に増大させます。ランダムなサブセットを監査すると、ランダムすぎるように見えます。
法的仕様(FISMA、C&A)は、何かを監査する必要があると言っているだけです。
私が忘れている他の非ドメイン固有の監査戦略はありますか?
nhibernate - 複雑な NHibernate 監査
私はIPostUpdateEventListener
インターフェイスを使用して監査ログを更新し、古い値と新しい値を取得してから、更新された各フィールドを「監査」テーブルに格納し、そのすべてをジャイブします。うまく機能しますが、満たすのに苦労している最後の要件が 2 つあります。
- 更新の対象となった従業員を表示します。
- 更新されたフィールドの「わかりやすい」名前を表示します。
#1については、私の最初の本能は、リフレクションを使用して、特定のエンティティの「従業員」プロパティを探して取得し、それがどの従業員向けであるかを見つけることでしたが、グラフの奥深くにいくつかのオブジェクトがあると、すぐに崩壊します指定された Employee オブジェクトに自動的に戻る方法はありません。
#1を解決するためのアイデアは、すべてのオブジェクトに「親」プロパティを必要とすることから、従業員タイプを探してグラフをトラバースできるようにすること(私にとって、単純な永続性の問題のためにドメインを汚染しすぎてしまう)から、別のSQLを使用することまでに及びました。外部キーをトラバースし、事後に従業員 ID を入力するジョブ (これまでのところすべてがコードベースであるため、別の SQL ジョブを維持したくありません。その SQL ジョブは非常に厄介なものになります)。
2 番目の要件については、問題なく変更された実際のプロパティ名を取得できます。フィールドの 80% から 90% では、(適切にフォーマットされた) プロパティ名が表示されるので、Pascal の大文字と小文字に基づいて名前の間隔を空けることができます。ただし、残りのフィールドはさまざまな理由で一致しません。MvcContrib の ASP.NET MVC および Fluent HTML ビルダーを使用していますが、ビュー モデルに、フィールド名がどうあるべきかをオーバーライドする属性を持つように設定を変更したとしても (したがって、ビューのみ)、これらの属性をビュー モデルから保存されているドメイン オブジェクトに一致させる実際の方法はありません。
両方の問題に対する最終的な実用的な解決策は、別のサービスで各更新操作の後に監査ログ サービスを呼び出し、必要に応じてフィールド名と従業員情報を渡すことですが、まあ、私は明らかにそこに行きたくありません。理由。
どちらの問題のアイデアも大歓迎です。2、3 日間頭を悩ませた結果、何の役にも立ちませんでした。ほとんどの人は、古い/新しい vale の単純な録音や、レコード自体の「作成/更新」のタイムスタンプだけにとどまっているようです。
sql - PostgreSQL トリガーを使用して変更 (SQL ステートメントと行の変更) を保存するにはどうすればよいですか?
PostgreSQL トリガーを使用すると、INSERT または UPDATE SQL ステートメントによってテーブルに発生した変更を記録し、後で実行するためにそれらをファイルに記録できますか。
これは一時的にのみ使用されるため、手早く汚れたもので十分です。
database-design - データベース内のユーザーからのアクティビティを記録する最良の方法は?
特定の日にユーザーをチェックするアプリケーションを構築しています。特定のユーザーに対してこれらのチェックが実行された回数を追跡する必要があります。
私の最初の考えは、基本的に、チェックが実行されたときにインクリメントするだけのテーブルの 1 つにフィールドを持つことでした。もう 1 つの考えは、顧客がチェックされるたびに新しいレコードを挿入する「AuditUser」というテーブルを作成することでした。
これは本当に問題です...ベストプラクティスのアプローチは何ですか?
他の誰かがより良い解決策を持っている場合は、提案してください。
前もって感謝します。
asp.net-mvc - asp.net mvc (nhibernate) のオブジェクトの変更を追跡するにはどうすればよいですか?
オブジェクトに加えられたすべての変更を追跡する良い方法を探しています。
私たちはカスタム フレームワークを構築しており、誰がいつ、どのオブジェクトを変更したか、またおそらく何を変更したかについての履歴 (種類) を保持する必要があります。
この場合の良い習慣は何ですか?
「ログ」を書き込むために保存/更新メソッドを拡張しますか? log4net または種類のロギング拡張機能を試す必要がありますか?
保存/更新/ルーチンを拡張する際のオーバーヘッドが心配です。
編集: はい、少なくとも 1 か月間は変更を確認する必要があります。顧客は、データが失われたことについて不満を言うことがあり、データを削除したことを「忘れる」ことがあります...
Edit2(理解を深めるために、コメントで質問します):履歴はデータベース(ms sql)に保存する必要があり、すべてのクラスのすべてのアクションにログを追加するのは好きではありません。すべてのクラスは、保存、ロード、更新、削除などを提供する私のベースクラスから継承されます...さらに回答/コメントをありがとう:)