問題タブ [audit-logging]
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.
entity-framework - SaveChanges()が呼び出される前の追加されたエンティティのアクセスID
EF 4.3.1を使用していますが、コンテキストでSaveChanges()をオーバーライドして、オブジェクトとその状態のリストを取得し、監査ログテーブルにエントリを作成できるようにしました。レコードのIDを監査ログテーブルに保存して、参照できるようにする必要があります。これは、レコードが挿入されるときに問題になります。保存する前にIDにアクセスできないためです。その時点でIDを取得する方法はありますか?
entity-framework - Entity Framework の ChangeTracker で複雑なプロパティを処理する
この投稿では、できる限り説明的になるように努めます。私の問題に周辺的に関連するSOの質問を1ダース以上読んだことがありますが、これまでのところ、何が起こっているのかと一致するものはありません.
したがって、データベース トランザクション (作成、更新、削除) で監査ログを実行するために、設計では次のように IAuditable インターフェイスを使用します。
3 つのコンテキスト ID は、ドメイン モデルのレイアウト方法に関連しており、前述のように、監査対象のエンティティに応じて、それらの一部またはすべてが null になる場合があります (これらは、管理者がアプリケーションの特定の範囲の監査ログ)。CUD アクションで監査する必要があるモデルは、このインターフェースを実装するだけで済みます。
監査テーブル自体が設定される方法は、ベース DbContext とドメインのコンテキストの間にある AuditableContext を使用することです。これには監査テーブル DbSets が含まれており、次のように EF ChangeTracker を使用して SaveChanges メソッドをオーバーライドします。
「監査レコードを作成する」プロセスは、リフレクションやその他の楽しいことを使用して、監査が必要なフィールドを抽出する少し複雑なコードです (監査可能なモデルがフィールドの一部を監査から「オプトアウト」する方法があります)。そしてそのすべて。
したがって、そのロジックはすべてうまくいっています。問題は、次のような監査可能なモデルがある場合に発生します。
指摘されているように、ほとんどの場合、これらのコンテキスト監査フィールドはモデルの標準プロパティにすぎません。ただし、ここのように、仮想複合プロパティからコンテキスト ID を取得する必要がある場合もあります。
これによりNullReferenceException
、SaveChanges() メソッド内からそのプロパティを取得しようとすると、仮想 Bar プロパティが存在しないと表示されます。複雑なプロパティの遅延読み込みを可能にするために ChangeTracker がどのように構築されているかについて読んだことがありますが、それを正しく行うための構文が見つかりません。フィールドは「元の値」リストに存在せず、オブジェクト状態マネージャーにはこれらのフィールドがありません。これは、監査対象のエンティティではなくインターフェイスから取得されたためだと思います。
では、この奇妙な問題を回避する方法を知っている人はいますか? どうやら頑固な遅延読み込みの代わりに、仮想プロパティを含むオブジェクト全体の熱心な読み込みを強制することはできますか?
長い投稿で申し訳ありませんが、これは本当に具体的な問題であり、おそらく詳細が必要だと思います.
ティア!:)
sql - キーワードやワイルドカード検索で SQL Server 監査ログを検索できますか?
SQL Server 2012 を使用しています。
これどうやってするの?
ありがとうございました。
java - JPA非管理エンティティ
次のようなクエリを起動する必要があるとしましょう。
audit_log
はどのクラスにも JPA エンティティとしてマップされておらず、 number of の number of クラスを厳密に作成することはできませn
ん。n
*_audit_logs
ネイティブクエリ機能を使用して、これをジェネリッククラスにマップするにはどうすればよいですか? 新しい機能を選択しようとしていますが、よくわかりません... したがって、どんな助けも大歓迎です。
c# - ASP.NET MVC 4 ActionFilter を使用した監査ログ
Entity Frameworkを介してT-SQLデータベースによって提供されるデータストレージを使用して、ASP.NET MVC 4を使用してWebアプリを構築しています。私は監査ログを統合しており、人間が判読できるアクションの要約を提供したいと考えています。これにより、「ユーザー Bob がログインしました」、「ユーザー Alice 」などの明確なステートメントを使用してわかりやすいログ ビューを表示できます。更新記事「Foo」」など
現在、監査レコードは次のもので構成されています。
- GUID
- タイムスタンプ
- ユーザーID
- アクションカテゴリ(コントローラ名)
- action (アクションメソッド名)
- IsError (ブール値。true は、これがエラーの記録であるか、このアクションが正常に完了しなかったことを意味します)
- シリアル化された詳細の塊
現時点では、私のロギングは実装するカスタム属性を使用していますIActionFIlter
。メソッドはOnActionExecuting()
試行されたアクションをログに記録し (URL、パラメーターなどを詳細 blob にシリアル化)、OnActionExecuted()
メソッドは戻り、エラーがない場合は IsError を true に設定し、返された結果または例外をエラー メッセージやスタック トレースなどと共に追加します。詳細へ。説明文字列用に別の列を追加したいのですが、きちんとした方法がわかりません。
私が得た最も遠いのは、「User $user logged in」のような文字列を属性に渡し、ログメソッドで文字列をスキャンして $ 文字を探し、その単語をキー値が一致するパラメーター辞書の何かに置き換えることでした単語 (マイナス $ 文字)。これは少し制限されています。例えば記事をID番号で保存する場合、「ユーザー18が編集した記事37」が一番管理しやすいです。ユーザー名や記事のタイトルを取得する実際の方法はありません。コンパイル時に組み込まれているため、インスタンスデータを属性に渡すことはできません。また、ロギングメソッドがその種のデータを取得するためにあらゆる種類のデータベース呼び出しを行うことを本当に望んでいません。 (または少なくとも本当の苦痛)単一の汎用ロギング方法を持つこと。
これに代わる方法は、静的な監査ログ クラスをAuditRecord.WriteLog(foo);
用意し、さまざまな種類のアクションを記述するために使用 (または継承) できる何らかの種類の記述子クラスを使用して、あらゆる場所で何かを呼び出し、すべてのパラメーターを格納し、生成することです。必要に応じて説明文字列を追加しますが、私にはエレガントではないようです。[AuditLog]
メソッドの上にタグを付けるだけで、それが記録されることを知ることができるのが本当に気に入っています。
コントローラーとアクション名を大きな switch ステートメントで使用して正しい文字列テンプレートを選択するなど、膨大な量の条件付きロジックは避けたいと思います。ロギングメソッドで記事のタイトルなどを把握できればOKです。これを行うためのきちんとした簡単な方法はありますか?
ruby-on-rails-3 - 請求目的の監査証跡の設計
私たちは、Amazon DynamoDB と同様の料金モデル (つまり、必要なものを柔軟にプロビジョニングする) で Rails アプリに取り組んでいます。簡単にするために、次のように構成できるとしましょう。
- 利用者数
- 作成できるドキュメントの数
要件
簡単に言えば、構成内容に基づいて支払います。具体的な要件は次のとおりです。
- その月の上限に基づいて月額料金をお支払いいただきます。3 日に 1,000 ユーザーにアップグレードし、10 日に 500 ユーザーにダウングレードした場合、1,000 ユーザー分の料金を 1 か月分お支払いいただきます。
- いつでもアップグレードできます。
- 1日1回ダウングレードできます。
(これは一見不公平に聞こえるかもしれませんが、ここではかなりのリソースを割り当てています。)
あまり邪魔にならずに、私たちが望むことを行うデータモデルを設計する方法を探しています。
検討したこと
gem の監査
私が見る限り、simple_auditやpaper_trailなどの gem は使用できません。
モデルの変更をシリアル化してデータベースに保存します。これは取り消しとバージョン管理には適していますが、日付範囲内の変更を取得して MAX 値を見つけることができないため(Ruby でそのほとんどを計算せずに) 、要件 1 には適していません。
自家製のソリューション
次の自家製のソリューションを想像できます: 次のようなレコードを格納するデータベース テーブル
これにより、次のことが可能になります。
- すべての変更を 1 か所で行う
- 日付範囲内の最大値を照会する (要件 #1)
- 次の変更がいつ許可されるかを問い合わせる (要件 #3)
このテーブルは、トランザクションでラップされた ActiveRecord (推定可能after_save
) コールバックで更新されます。save
NIH Syndromeのために自家製のソリューションに懸念を抱いています。
または、おそらく、私はある側面または他のソリューション全体を見落としています. どう思いますか?
c# - c# で EventClass Audit ログイン/ログアウトを検出する
ユーザーが SQL SERVER でログオンおよびログオフするときにアプリケーションを監視する必要があります。これは、アプリケーションが予期せずログに記録することがあるためです。また、ログインとログアウトを監査したため、それを知る必要があります。SQL Server Profiler を使用すると、EventClass 列に "Audit Login" と "Audit Logout" が表示されます。これらの SQL Server Profiler イベントを C# で取得する方法はありますか?
ありがとうございます。