問題タブ [audit-tables]
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.
database-design - これは、大量のレコードを含む監査テーブルに適した設計ですか?
個々の部品ごとに在庫データを追跡するテーブルがあります。これはテーブルの簡略化されたバージョンです (一部の非キー フィールドは除外されています)。
特定のピースに何かが起こるたびに、新しい監査レコードが作成されます。たとえば、私の製品 ABC が初めて在庫に追加されたとき、次のようなレコードが得られます。
ABC シリアル番号 555 のコストが変更された場合、新しいレコードが取得されます。
作品が売れた場合、さらに別の記録が得られます。
ABC の新しい作品が持ち込まれた場合、次の記録が得られます。
任意の時点での特定の製品セットの手持在庫値をできるだけ早く取得できるようにする必要があります。
上記の例を使用して、2009 年 1 月 2 日現在の製品 ABC の在庫値を取得したい場合、一意の製品/シリアル番号の組み合わせごとに、01/03/より前の最新のレコードを 1 つ選択する必要があります。 2009 を "OnHand" の状態にしてから、コストを合計します。(現時点では、この select ステートメントがどのようになるかは 100% わかりませんが、少し実験してみます)。
私の質問:これは、私が説明しているタイプの監査テーブルにとって適切な構造ですか? つまり、適切に索引付けされていれば、高速なクエリに適していますか? (このテーブルが数百万行に増えたらどうなるか想像しようとしています。)
過去のレコードを別のテーブルに分割し、「アクティブな」テーブルの ProductID/SerialNumber の組み合わせごとに最新のレコードのみを残す必要がありますか?
フィードバック/提案/コメント/リンクは大歓迎です。
ありがとう!
mysql - 変更された列の値を監査テーブルにのみ挿入するトリガーを取得する
トリガーを使用して監査テーブルに変更を保存していますが、変更された列の値のみを保存したいと考えています。
現時点では、変更されていない値が監査テーブルにも格納されていますが、これは望ましくありません。
変更された列のみを監査テーブルに保存する最良の方法は何ですか?
sql-server - MS SQL Serverの追加専用テーブルのロックを最小限に抑えるためのアドバイスはありますか?
(エラーがスローされたときや開発中だけでなく)本番環境で実行されるロギング/監査コードを書いています。Coding Horrorのデッドロックとロギングの経験を読んだ後、私はアドバイスを求めるべきだと決めました。(「ログに記録しない」というJeffのソリューションは私には機能しません。これは、法的に義務付けられているセキュリティ監査です)
競合とデッドロックを最小限に抑えるための適切な分離レベルはありますか?挿入ステートメントまたはストアドプロシージャに追加できるクエリヒントはありますか?
私は、監査テーブルを除くすべてのトランザクションの整合性に深く関心を持っています。非常に多くのログが記録されるため、いくつかのエントリが失敗しても問題はありません。ロギングが他のトランザクションを停止した場合、それは悪いことです。
データベースまたはファイルにログを記録できますが、ファイルへのログ記録は、結果を何らかの方法で表示できる必要があるため、あまり魅力的ではありません。ただし、ファイルにログを記録すると、ログが他のコードに干渉しないことが(ほぼ)保証されます。
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 か所にあります。
すべてをここに挙げたわけではありませんが、それぞれのアプローチには長所と短所があります。
.net - Web アプリケーションの監査
アプリケーションがシステム アカウントとしてデータベースに接続している場合、Web アプリケーション、特にデータベースの変更を監査するにはどうすればよいですか?
簡単なデータベース トリガーを使用して監査テーブルに書き込みたいのですが、実際に作業を行っているアカウントではなく、ログオンしているユーザーを追加する方法がわかりません。
ID フローに関する記事をいくつか読みましたが、その概念を完全には理解していません。
hibernate - 監査テーブルからエントリを削除するには?
現在、Hibernate Envers を使用しています。
削除したいエンティティに関連する監査テーブルのエントリを削除するにはどうすればよいですか? 私のエンティティは他のエンティティと関係がありません。
onPostDelete
カスタムリスナーのメソッドでそれを行う必要があることがわかりました:
ドキュメント、フォーラム、多くのことを読みましたが、理解できません。多分それは不可能です、私にはわかりません。
誰かがこれをやったことがありますか?
database-design - 監査テーブル DB の設計 : 結合テーブルの監査テーブルを作成することは理にかなっていますか
PostgreSQL 8.4 でトリガーを使用して監査が必要なエンティティ テーブル用に個別の監査テーブルを作成しています。
結合テーブルがいくつかあります。例: Family_Contact は結合テーブルです。
家族には 1 つ以上の連絡先があります。各連絡先にはアドレスがあります。したがって、次のテーブル構造があります。
ファミリを監査するには、上記のテーブルの複製である次のテーブルが必要です。
Family_Contact_audit は AUDIT 結合テーブルです。
質問: 結合テーブル用に別の AUDIT テーブルを作成することは理にかなっていますか? 代替手段はありますか?レポート目的で監査テーブルを使用します。
ありがとうございました、
sql - 2行のデータ間で値を比較し、異なる列のみを表示する
以前のアプリケーションバージョンでは、主キーに特定のフィールドを使用していましたが、フィールドはさまざまなシステム間で異なるIDを表す可能性があるため、重要ではないフィールド(つまり、主キーまたは複合主キーの一部ではない)にしました。別のシステムはありませんが、ユーザーは引き続きそのフィールドを主要な識別方法として使用します。
問題は監査にあります...以前は、単一のテーブルを使用してデータベースのすべての監査を実行し、浮動している汎用トリガーを使用してnewvalueoldvalueスキーマでデータをダンプしていました。これは、1つのことを除いて、引き続き正常に機能する可能性があります。連絡先情報を、元のテーブルの新しい主キーに関連付けられている別のテーブルに移動しました。したがって、変更が加えられると、今では重要ではないforeignSystemIDの代わりに、見慣れない未使用の主キーが監査ログに表示されます...
1対1の監査方法に移行し、テーブルへの変更が別のスキーマのミラーイメージに書き込まれるようにしました。問題は、ユーザーに変更を表示することです。彼らは、特定の医師の変更された値のみを示すレポートを見るのに慣れています...
私の質問は、SQLクエリとCrystalレポートを使用することですが、監査テーブルの行間で変更された列値のみを表示するにはどうすればよいですか。ピボットコマンドを見てきましたが、それが本当に役立つとは思いません。また、スクリプト内のコードを調べて、列を比較し、それらが異なるかどうかを判断して、テーブルに書き込みました。
私は本当にここの砂の中で回転しています、そしてこれは私が解決するための重要な問題です。助けてくれてありがとう...
必要に応じて変更追跡方法を変更できるように、本番環境は十分に早い段階にありますが、すぐに変更する必要があります。ありがとう
編集:
私の上司と私はこれに少し取り組んできました、そしてこれは私たちが始めたものです...私はさらなる意見とオプションを得たいです...同様に...ありがとう..
oracle - 「セッションごとにセッションを作成する監査」と「アクセスごとにセッションを作成する監査」?
次の方法で作成セッションの監査を有効にした場合:
次に、次のクエリを実行します。
結果は次のとおりです。
ただし、次の方法で作成セッションの監査を有効にすると、次のようになります。
次に、次のクエリを実行します。
結果は同じです:
なんで?何か考えはありますか?
sql-server-2008 - TransactionScope + 監査テーブル + ストアド プロシージャでのトランザクションのコミット
私の会社では SQL Server 2008 を使用しています。監査テーブルでトランザクションの問題が発生しています。
ストアドプロシージャがあります。
VB.net コードのブロックがあります
ただし、AUDIT_TABLE に挿入されるレコードはありません。MSDN http://msdn.microsoft.com/en-us/library/ms189336.aspxで理由を見つけました
私の質問は、ストアド プロシージャを使用してレコード AUDIT_TABLE を挿入する方法です。
ありがとう!