問題タブ [audit]
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.
java - Hibernate と AOP を使用した監査スキーマ マッピング
ユーザーが実行した結果、対応するテーブルが変更されたアクションを監査しようとしています。たとえば、ユーザーが 2 つのアカウント間で送金を行う場合、次の一連のイベントが生成されます。
- 送金テーブルに送金金額を挿入する
- 口座 1 の残高表の残高から送金金額を差し引きます。
- アカウント 2 のバランス テーブルの残高に送金金額を追加します。
すべてのテーブルの親監査メッセージは次のようになります。
これは、次のスキーマで実現されます 。
代替テキスト http://img48.imageshack.us/img48/7460/auditloggingiv6.png
問題は、休止状態でこれをどのように表現するかです。
私は以下を作成しました:
In Balance and Transfer のマッピング ファイル
Transfer クラスと Balance クラスは、メソッドを持つ IAuditable を実装します。
AuditRecord のマッピング ファイルには次のものがあります。
次に、AOP と Hibernate Interceptors を使用する Logging クラスで、次のことを行います。
次に、サービス クラスで、次のメソッドをトランザクションに含めて呼び出します。
parentAuditRecord は AOP を使用してスレッド セーフ スタックで作成され、AuditRecordType_id はメソッドの注釈を使用して設定されます。
転送テーブルの「合格」列を省略しました。以前は、save(transfer) を呼び出して、転送金額を Transfer テーブルに挿入し、passed を false に設定していました。(このアクションも監査されます)。
私の要件は、上記の例よりも少し複雑です:P
したがって、上記の一連のイベントは次のようになります。
- 転送テーブルの更新
- AuditRecord (親) に挿入
- AuditRecord に挿入 (子)
- TransferAuditRecord への挿入
- バランス表に挿入
- AuditRecord に挿入 (子)
- BalanceAuditRecord に挿入
- バランス表に挿入
- AuditRecord に挿入 (子)
- BalanceAuditRecord に挿入
ただし、上記で定義したカスケード オプションは update ステートメントで失敗します。Hibernate は多対多テーブルへのレコードの挿入を拒否します (AuditRecord マッピングで unsaved-value="any" であっても)。私は常に多対多テーブルに行を挿入したいので、1 回の転送で以前のイベントをマークする多くの監査レコードが存在する可能性があります。ただし、最新のイベントによって、ユーザーが見たいメッセージが決まります。Hibernate は、多対多テーブルと以前の AuditRecord エントリを更新しようとするか、単に AuditRecord と TransferAuditRecord への挿入を拒否して、TransientObjectException をスローします。
監査メッセージは次のように取得されます。
メッセージは次のようになります。「Username set transfer to pass at 11-Oct-2008」
編集多対多テーブルを明示的にマッピングし(関連付けられたインターフェースを使用)、afterTransactionCompletionで、親監査レコードで保存を呼び出し(保存を子監査レコードにカスケードします)、インターフェースを明示的に保存することにしましたすべての子マッピング テーブル。これは真の監査履歴ではなく、ユーザー アクションを記録する非侵襲的な方法です。後でより完全な監査履歴が必要な場合は、Envers を調べます。
database - 監査証跡と SOX/HIPAA/etc の実装、機密データのベスト プラクティス
私は、アプリケーションの設計に関しては比較的熟練していると考えていますが、機密データを扱う必要があったことは一度もありません。私は、監査証跡のベスト プラクティスとは何か、そしてそれらをどのように実装する必要があるのかについて疑問に思っていました。今はしなくてもいいのですが、医療機関から何か仕事を頼まれたら、安心して相談できるといいですね。
「教師」、「クラス」、「学生」がすべて多対多の「成績」テーブルで正規化された「学校」データベースがあるとします。何を記録しますか?「成績表」のすべての挿入/更新? 更新のみ (たとえば、子供が侵入して成績を変更したい場合、これは危険信号を送信する必要があります)? これは、どれだけ偏執的になりたいかによって完全に異なりますか? ベストプラクティスはありますか?
これはデータベースで行うべきことですか? (各クエリをログに記録する「監査」テーブルに行を挿入する、機密性の高い SELECT ごとのトリガー?) 何をログに記録する必要がありますか? Oracle/DB2 に自動的に組み込まれている機能はありますか? これはアプリケーション側のロジックである必要がありますか?
機密データの処理方法に関する正式なドキュメント/本を誰かが持っている場合 (DoD の「Trusted Computing」仕様ではありませんが、その線に沿ったものです:P)、私はそれを感謝します。この質問が非常に漠然としていて申し訳ありません。これはアプリケーションごとに異なることを認識しています。機密データの取り扱いに関する詳細な経験をお聞きしたいだけです.
sql-server - SQL Server:監査目的で「アプリケーション名」プロパティを変更する
アプリケーションのユーザーをSQLサーバーのユーザーとして実装しないため、アプリケーションサーバーがデータベースに接続するとき、各アプリケーションは常に同じクレデンシャルを使用して各データベースに接続します。
これには監査の問題があります。トリガーを使用して、すべての更新を保存し、挿入と削除を行い、それぞれを特定のユーザーに関連付けます。考えられる解決策の1つは、「ユーザーによって更新」列をすべてのテーブルに追加し、これを毎回更新することです。これは、すべてのテーブルに新しい列があり、すべてのストアドプロシージャに新しいパラメータがあることを意味します。また、ソフト削除しか実行できないことも意味します。
これの代わりに、接続文字列のApplication Nameプロパティを使用し、トリガー内のApp_Name()プロパティでこれを読み取ることを提案します。簡単なアプリでこれをテストしましたが、機能しているようです(形式は、App = MyApp | User = 100のようになります)。
皆さんへの質問は、これは悪い考えですか、そしてあなたはより良い考えを持っていますか?
c# - C#でオブジェクトの監査証跡を実装しますか?
現在のプロジェクトでは、C#でオブジェクトの監査証跡を実装する方法についてのアイデアを探しています。基本的に次のことを行う必要があります。
1.指定されたオブジェクトの古い値と新しい値を保存します。2.新しいオブジェクトの作成を記録します。3.古いオブジェクトの削除。
C#Genericsを使用するなど、これを行う一般的な方法はありますか?作成時、削除時などのベースオブジェクトのイベント(ORMオブジェクト)のコードを記述する必要がありません。使用している場合に監査証跡を挿入する方法。誰もが経験や従う方法を持っています。アスペクト指向(AOP)の方法でこれを行う方法。
あなたのアイデアなどを共有してください。
sql-server - SQL Server 2005 の変更の監査
SQL Server 2005 には、特にストアド プロシージャの削除などを監査する組み込みの方法はありますか? 照会できる履歴テーブルはありますか? 現在、数回姿を消した謎の sproc があります。
svn - Subversion Path Based Authorization を正しい方法で構成したことをテストするにはどうすればよいですか?
問題は、Apache Web サーバーを介して提供される Subversion リポジトリのセキュリティ設定に関するものです。
パスベース認証を使用して、一部の会社情報を外部の共同作業者から保護しています。必要な人に承認が与えられていることをテストする何かが必要です。つまり、構成に誤りがないことを確認する必要があります。
これをテストする簡単な方法があります。ユーザーのユーザー名とパスワードを使用して、リソースへのアクセスをシミュレートします。ただし、この方法ではユーザーのパスワードを知る必要があります。
たとえば、次の BASH スクリプトは、指定されたパス ($url) で各ユーザーの承認をテストします。注: users-files.txt には、ユーザーのユーザー名とパスワードが "username:password" の形式で含まれています。
ユーザーのパスワードを知らずに、ユーザー名だけでこのチェックを行う方法はありますか? 私は、HTTPD と Subversion が実行されているマシンのルートです。HTTPD は何らかの監査ツールを提供していますか?
認証は次のように構成されます。
asp.net - コードを監査するためのツールは、運用 Web サーバーに移行しますか?
私のチームは最近、外部監査の結果を受け取りました。1 つの項目を修正する必要があります。
彼らは、コードを本番環境に移行する方法を変更することを望んでいます。現在、すべてのコード変更や移動リクエストなどに対して、ソース管理とチケット システムを使用しています。
問題は、コードが本番 Web サーバーにプッシュされる方法にあります。Araxis Merge または diff ツールを使用する代わりに。彼らは、移動されたファイルの完全な監査を可能にするツールを使用することを望んでいます。監査担当者は後日、そのツールのログを調べて、承認されたコードのみが本番環境に移行されたことを確認します。
これを行うツールを使用している人はいますか?
sql-server - 複数のテーブルに分割されたエンティティの監査ログを維持する
5 つの異なるテーブルに分割されたエンティティがあります。これらのテーブルのうち 3 つのレコードは必須です。他の 2 つのテーブルのレコードはオプションです (エンティティのサブタイプに基づきます)。
テーブルの 1 つがエンティティ マスターに指定されます。他の 4 つのテーブルのレコードは、マスターからの一意の ID をキーとしています。
更新/削除トリガーが各テーブルに存在し、レコードの変更後、(トリガー内の削除されたテーブルから) 履歴が関連する履歴テーブルに保存されます。各履歴テーブルには、関連するエンティティ フィールドとタイムスタンプが含まれています。
したがって、ライブ レコードは常にライブ テーブルにあり、履歴/変更は履歴テーブルにあります。履歴レコードは、タイムスタンプ列に基づいて並べ替えることができます。明らかに、タイムスタンプ列は履歴テーブル間で関連付けられていません。
さて、より難しい部分です。
- レコードは、最初は 1 つのトランザクションで挿入されます。1 回のトランザクションで 3 つまたは 5 つのレコードが書き込まれます。
- 個々の更新は、5 つのテーブルのいずれかまたはすべてに対して発生する可能性があります。
- すべてのレコードは、単一のトランザクションの一部として更新されます。ここでも、1 回のトランザクションで 3 つまたは 5 つのレコードが更新されます。
- 番号 2 は複数回繰り返すことができます。
- 番号 3 は複数回繰り返すことができます。
アプリケーションは、単一のトランザクションとしてのみ書き込まれたレコードに基づいて、ある時点の履歴エントリのリストを表示することになっています (ポイント 1、3、および 5 のみ)。
現在、タイムスタンプ データのみに基づいて履歴レコードを取得するアルゴリズムに問題があります。
トランザクションに関する追加情報を保持する HISTORYMASTER テーブルを追加すると、問題が部分的に解決されるようです。すべてのトランザクションの前に、新しいレコードが HISTORYMASTER に追加されます。新しい HISTORYMASTER.ID は、トランザクション中に各エンティティ テーブルに保存されます。特定の HISTORYMASTER.ID (タイムスタンプ順) の最初のレコードを選択することで、特定の時点の履歴を取得できます。
複数のテーブルにまたがるエンティティの AFTER (UPDATE, DELETE) TRIGGER に基づいて監査テーブルを管理する最適な方法はありますか?
svn - svnで利用できるレポートは何ですか?
現在、SVNへの移行を進めています。
残念ながら、私たちは定期的に監査を受けており、監査人は次のような情報を必要としています。
ファイルへの変更の履歴
SVNへのアクセスの履歴
新しいファイル追加
されたファイルの変更
私たち(またはこれらのいくつか)のためにこれらのレポートを作成できるツールはありますか?
nhibernate - 監査ログ戦略
アプリケーション内での監査ログの最適な方法を決定しようとしています。ログの主な理由は、一連のイベント (変更) を報告することです。
オブジェクトの階層があり、後でその階層のいずれかの部分で何かが変更されたときにレポートを作成する必要があります。
次の 3 つのオプションがあると思います。
- テーブルごとにログがあるため、オブジェクトの階層を照合してから、レポートのビューを作成します。
- 階層をフラット化し、テーブルを非正規化して、レポート作成を容易にします - シンプルな select ステートメント。
- ログ テーブルを 1 つ用意し、各変更のレコードを作成して、レポート作成を困難にしますが、変更に対する柔軟性を高めます。
私は現在、オプション1に傾いています。