Navicatブログ

トリガーを使用した監査証跡ログの実装 2023年4月28日 Robert Gravelle

データベース監査の背後にある考え方は、データベーステーブルに誰がいつアクセスしたか、テーブルにどのような変更が加えられたかを把握することです。これは、エンタープライズレベルのアプリケーションの標準的な最小要件とみなされているだけでなく、銀行業務やサイバーセキュリティなどの多くの分野の法的要件でもあります。データベース監査証跡は、不正アクセス、問題のある設定変更など、アプリケーションのあらゆる種類の問題を調査するために不可欠です。

今日のブログでは、rentalテーブルを監査するために、MySQL Sakilaサンプルデータベース にログを追加します。データベースはDVDレンタルストアのビジネスプロセスを表すため、これはキーテーブルです。

監査証跡データを保存するテーブルの作成

理想的には、監査対象のテーブルごとに監査テーブルを用意するのが最善です。rentalテーブルの監査証跡テーブルを作成するDDLステートメントは次のとおりです:

create table rental_audit_log( id int NOT NULL AUTO_INCREMENT, rental_id int NOT NULL, old_values varchar(255), new_values varchar(255), done_by varchar(255) NOT NULL, done_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) );

また、Navicatでは、DDLステートメントを記述せずに、テーブルデザイナーを使用して全てのフィールドと属性を指定できます。

rental_audit_trail_table_design (53K)

監査ログトリガーの作成

rental_audit_logテーブルにレコードを挿入するためには、rentalテーブルで実行されるDMLステートメントの種類(INSERT、UPDATE、DELETE)ごとに1つずつ、3つのデータベーストリガーを作成する必要があります。

AFTER INSERTトリガー

rentalテーブルのINSERTステートメントは、rental_insert_audit_triggerによって阻止されます。挿入操作の後にこれを起動し、全ての新しいデータをJSON_OBJECTとして提供します。Navicatでは、これらの詳細は全てテーブルデザイナーのトリガータブで指定できます:

AFTER_INSERT_Trigger (62K)

新しい行をrentalテーブルに追加すると、rental_audit_logにも新しいレコードが表示されます:

rental_audit_log_entry (50K)

AFTER UPDATEトリガー

rentalテーブルに対するUPDATEステートメントは、次のrental_update_audit_triggerによってキャプチャされます:

AFTER_UPDATE_Trigger (84K)

これで、レンタルレコードが更新される度に、rental_update_audit_triggerが実行され、変更されたレコードの古い状態と新しい状態の両方をキャプチャするためのrental_audit_log行が作成されます。この場合、ユーザー robgがrental_dateを“2005-05-25 17:17:04”から“2005-05-31 19:47:04”に変更したことがわかります。

rental_audit_log_update_entry (52K)

AFTER DELETEトリガー

レンタルテーブルのDELETEステートメントを追跡するためには、次のrental_delete_audit_triggerを作成します:

AFTER_DELETE_Trigger (69K)

この場合、新しいレコード状態がないため、old_values列のみが設定されます。したがって、生成されたrental_audit_log行の空のnew_values列は次のようになります:

rental_audit_log_delete_entry (46K)

ここでは、ユーザー fsmithが2023-03-22 08:46:07にrentalテーブルからレコード 1114を削除したことがわかります。

トリガーを使用した監査証跡ログに関する最終的な考え方

今日のブログでは、rentalテーブルを監査するために、MySQL Sakilaサンプルデータベースにログを追加しました。ログを追加したテーブルには、最も一般的な監査フィールドがいくつか含まれていました。組織によっては、DML操作タイプなどの他のタイプが含まれる場合もありますが、変更されたフィールドのみが含まれる場合もあります。それは組織にとって最も効果的なものです。

ブログのアーカイブ
シェア