ファイングレイン監査 Oracle 9i

ファイングレイン監査(FGA 監査:Fine-Grained Auditing) Oracle 9i Enterprise からの行レベルの監査機能
監査(操作履歴)の単位を行の条件レベルの精度で行うことができる。Oracle 10g
DML( INSERT / UPDATE / DELETE ) はもちろん SELECT も監視対象にでき、SQL_TEXT も記録されている。Oracle 10g
イベントハンドラ関数の登録も行うことが可能であるが、そのハンドラ内でエラーが発生すると DML 本体が無効になるので 設置には注意を要する。
AUDIT_TRAIL 初期化パラメータを設定しないで利用できる。 AUDIT_TRAIL = { DB| DB_EXTEND } の監査同様、システムテーブルの増加に注意し、適宜バックアップ後に削除する。
(※ バックアップデータも実データと同じ機密性で管理しなければ意味がないので取り扱い注意)

Oracle 10g の FGA 監査の設置例

監査用のオブジェクトの作成とテスト用 DML の投入

 CREATE TABLE SAMPLE_TABLE
 (
	ID                             NUMBER(10,0) NOT NULL,
	NAME                           VARCHAR2(250)
 )
 /
 BEGIN
	DBMS_FGA.ADD_POLICY(
		OBJECT_NAME => 'SAMPLE_TABLE',
		POLICY_NAME => 'CHECK_DANGER',
		AUDIT_COLUMN => 'NAME',
		AUDIT_CONDITION => 'NAME = ''ADMIN'' ',     -- ADMIN を監査
		STATEMENT_TYPES => 'INSERT,UPDATE,DELETE'
	);
 END;
 /
 TRUNCATE TABLE SAMPLE_TABLE;
 INSERT INTO SAMPLE_TABLE (ID, NAME) VALUES (1,'SCOTT');
 INSERT INTO SAMPLE_TABLE (ID, NAME) VALUES (2,'TIGER');
 --  Check 
 INSERT INTO SAMPLE_TABLE (ID, NAME) VALUES (3,'ADMIN');
 INSERT INTO SAMPLE_TABLE (ID, NAME) VALUES (4,'ADMINISTRATOR');
 
 UPDATE SAMPLE_TABLE SET ID=10 WHERE NAME='ADMINISTRATOR';
 -- ↓ ※※※ Not Check ※※※ ↓
 UPDATE SAMPLE_TABLE SET ID=11 WHERE ID=3;
 --  Check 
 UPDATE SAMPLE_TABLE SET NAME='GUEST' WHERE NAME='ADMIN';
 --  Check 
 UPDATE SAMPLE_TABLE SET NAME='ADMIN' WHERE NAME='SCOTT';
 UPDATE SAMPLE_TABLE SET NAME='SCOTT' WHERE NAME='GUEST';
 
 --  Check 
 DELETE FROM SAMPLE_TABLE WHERE NAME='ADMIN';

FGA 監査結果の確認

監査テーブル DBA_FGA_AUDIT_TRAIL の結果の確認

UPDATE SAMPLE_TABLE SET ID=11 WHERE ID=3; が 監査にかかっていない点に注意が必要。
適切な監査ポリシを生成しなければ、情報のセキュリティホールが発生する。

 SELECT DB_USER || ':' || SQL_TEXT FGA_LOG  FROM DBA_FGA_AUDIT_TRAIL
 WHERE TIMESTAMP >= SYSDATE - INTERVAL '1' MINUTE;
 
 /* 結果 */
 FGA_LOG                                                                         
 --------------------------------------------------------------------------------
 TEST:INSERT INTO SAMPLE_TABLE (ID, NAME) VALUES (3,'ADMIN')                     
 TEST:UPDATE SAMPLE_TABLE SET NAME='GUEST' WHERE NAME='ADMIN'                    
 TEST:UPDATE SAMPLE_TABLE SET NAME='ADMIN' WHERE NAME='SCOTT'                    
 TEST:DELETE FROM SAMPLE_TABLE WHERE NAME='ADMIN'
  • ポリシーの削除用 SQL

不要な監査ポリシは削除

 /* ポリシの削除 */
 BEGIN
	DBMS_FGA.DROP_POLICY(
		OBJECT_NAME => 'SAMPLE_TABLE',
		POLICY_NAME => 'CHECK_DANGER'
	);
 END;
 


ライセンス

ファイングレイン監査には、Enterprise Edition が必要

サイト統合にともない代替情報の URL は不明

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)