sql >> データベース >  >> RDS >> Oracle

Oracleでの監査

    10gのエンタープライズエディションをお持ちの場合は、OracleのFine-GrainedAuditingをご覧ください。自分で転がすよりも間違いなく優れています。

    ただし、バージョンが少ない場合、または何らかの理由でFGAが気に入らない場合は、次の方法で実行できます。重要なことは次のとおりです。アプリケーションテーブルごとに個別の監査テーブルを作成する

    上で概説したテーブル構造と一致しないため、これは聞きたいことではないことを私は知っています。ただし、更新の影響を受ける各列のOLD値とNEW値を含む行を格納することは、非常に悪い考えです。

    1. スケーリングされません(10列に触れる1回の更新で、10個の挿入が生成されます)
    2. レコードを挿入するときはどうですか?
    3. いつでもレコードの状態を組み立てるのは完全な苦痛です

    したがって、同じ構造のアプリケーションテーブルごとに監査テーブルを用意します。これは、アプリケーションテーブルにCHANGED_TIMESTAMPとCHANGED_USERを含めることを意味しますが、それは悪いことではありません。

    最後に、これがどこをリードしているのかがわかっているので、各テーブルにトリガーを設定して、:NEW値のみを含むレコード全体を監査テーブルに挿入します。トリガーは、INSERTおよびUPDATEで起動する必要があります。これにより完全な履歴が得られ、レコードの2つのバージョンを比較するのは簡単です。 DELETEの場合、主キーのみが入力され、他のすべての列が空の監査レコードを挿入します。

    反対意見は、これらすべてのオブジェクトを実装するにはテーブルと列が多すぎることです。ただし、テーブルを生成し、データディクショナリ(user_tables、user_tab_columns)からDDLステートメントをトリガーするのは簡単です。



    1. MSSQLまたは最適化ですぐに不足しているインデックス

    2. IRIWorkbenchでのMicrosoftAccessへの接続

    3. Oracleで2番目に大きい最小値を選択します

    4. SQLServerで実際の1対1の関係を作成する方法