Oracle の監査(AUDIT)機能は、「誰が・いつ・何をしたか」をデータベースレベルで記録する仕組みです。セキュリティインシデントの調査、不正アクセスの検出、コンプライアンス対応(PCI DSS / SOX / ISMS 等)に不可欠な機能です。
Oracle には伝統的監査(AUDIT 文)と統合監査(Unified Audit / 12c 以降)の 2 つの方式があります。本記事では、両方式の違い、設定方法、監査ログの確認、FGA(ファイングレイン監査)の概要、そして実務での監査ポリシー設計例まで体系的に解説します。
この記事でわかること
・伝統的監査と統合監査(Unified Audit)の違い
・伝統的監査: 文レベル / 権限 / オブジェクト監査の設定方法
・統合監査: CREATE AUDIT POLICY によるポリシーベースの設定方法
・DBA_AUDIT_TRAIL / UNIFIED_AUDIT_TRAIL での監査ログ確認
・FGA(ファイングレイン監査)の概要
・監査ログのクリーンアップ
・コンプライアンス対応の監査ポリシー設計例
・伝統的監査と統合監査(Unified Audit)の違い
・伝統的監査: 文レベル / 権限 / オブジェクト監査の設定方法
・統合監査: CREATE AUDIT POLICY によるポリシーベースの設定方法
・DBA_AUDIT_TRAIL / UNIFIED_AUDIT_TRAIL での監査ログ確認
・FGA(ファイングレイン監査)の概要
・監査ログのクリーンアップ
・コンプライアンス対応の監査ポリシー設計例
伝統的監査と統合監査の比較
| 項目 | 伝統的監査(AUDIT 文) | 統合監査(Unified Audit) |
|---|---|---|
| 対応バージョン | 全バージョン | 12c 以降 |
| 設定方法 | AUDIT / NOAUDIT 文 | CREATE AUDIT POLICY + AUDIT POLICY |
| 監査ログの格納先 | SYS.AUD$(DB テーブル)/ OS ファイル | AUDSYS.AUD$UNIFIED(統合テーブル) |
| 確認ビュー | DBA_AUDIT_TRAIL | UNIFIED_AUDIT_TRAIL |
| FGA との統合 | 別管理 | 統合管理(同じビューで確認可能) |
| 推奨 | 11g 以前の環境 | 12c 以降は統合監査を推奨 |
12c 以降は統合監査(Unified Audit)を推奨
統合監査は伝統的監査の全機能を包含し、FGA・SYS 監査・RMAN 監査などを1 つのビューで統合管理できます。新規構築では統合監査を選択してください。既存の伝統的監査からの移行も可能です。
統合監査は伝統的監査の全機能を包含し、FGA・SYS 監査・RMAN 監査などを1 つのビューで統合管理できます。新規構築では統合監査を選択してください。既存の伝統的監査からの移行も可能です。
監査の有効化(AUDIT_TRAIL パラメータ)
SQL(伝統的監査の有効化)
-- 現在の設定を確認 SHOW PARAMETER audit_trail; -- audit_trail = NONE(デフォルト: 監査無効) -- DB テーブルに記録(最も一般的) ALTER SYSTEM SET audit_trail = DB SCOPE=SPFILE; -- DB テーブル + 拡張情報(SQL テキスト含む) ALTER SYSTEM SET audit_trail = DB,EXTENDED SCOPE=SPFILE; -- OS ファイルに記録 ALTER SYSTEM SET audit_trail = OS SCOPE=SPFILE; -- 設定変更後は DB 再起動が必要 SHUTDOWN IMMEDIATE; STARTUP;
| audit_trail 値 | 記録先 | 特徴 |
|---|---|---|
| NONE | 監査なし | デフォルト。監査は無効 |
| DB | SYS.AUD$(DB テーブル) | 最も一般的。SQL で検索可能 |
| DB,EXTENDED | SYS.AUD$ + SQL テキスト・バインド値 | 詳細な情報を記録(ストレージ注意) |
| OS | OS ファイル(audit_file_dest) | DBA でもログ改ざんが困難(セキュリティ重視) |
| XML | XML ファイル | OS + XML 形式で構造化 |
統合監査モードの確認
12c 以降では、デフォルトで「混合モード」(伝統的 + 統合の両方が動作)です。完全に統合監査に移行するには以下を実行します。
結果が TRUE なら統合監査が有効です。
12c 以降では、デフォルトで「混合モード」(伝統的 + 統合の両方が動作)です。完全に統合監査に移行するには以下を実行します。
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';結果が TRUE なら統合監査が有効です。
伝統的監査の設定(AUDIT 文)
ログオン / ログオフの監査
SQL(ログオン監査)
-- 全ユーザーのログオンを監査 AUDIT SESSION; -- 特定ユーザーのログオンのみ監査 AUDIT SESSION BY hr, scott; -- 失敗したログオンのみ記録(不正アクセス検出) AUDIT SESSION WHENEVER NOT SUCCESSFUL;
文レベルの監査(DDL / DML)
SQL(DDL / DML 監査)
-- CREATE TABLE / DROP TABLE を監査 AUDIT CREATE TABLE; AUDIT DROP TABLE; -- 全 DDL を監査 AUDIT CREATE ANY TABLE; AUDIT ALTER ANY TABLE; AUDIT DROP ANY TABLE; -- 特定ユーザーの DDL のみ AUDIT CREATE TABLE BY hr;
オブジェクトレベルの監査
SQL(特定テーブルへのアクセスを監査)
-- employees テーブルへの SELECT を監査 AUDIT SELECT ON hr.employees; -- employees テーブルへの全 DML を監査 AUDIT INSERT, UPDATE, DELETE ON hr.employees; -- 成功した操作のみ記録 AUDIT SELECT ON hr.employees WHENEVER SUCCESSFUL; -- 失敗した操作のみ記録(権限不足エラー等) AUDIT SELECT ON hr.employees WHENEVER NOT SUCCESSFUL;
監査の解除(NOAUDIT)
SQL(監査の解除)
-- ログオン監査を解除 NOAUDIT SESSION; -- 特定テーブルの監査を解除 NOAUDIT SELECT ON hr.employees; -- 全監査設定を確認 SELECT * FROM dba_stmt_audit_opts; -- 文レベル SELECT * FROM dba_obj_audit_opts; -- オブジェクトレベル
統合監査(Unified Audit)の設定(12c 以降)
統合監査はポリシーベースで設定します。ポリシーを作成してから有効化する 2 ステップです。
SQL(統合監査ポリシーの作成と有効化)
-- (1) ポリシーを作成
CREATE AUDIT POLICY pol_logon_audit
ACTIONS LOGON, LOGOFF;
-- (2) ポリシーを有効化(全ユーザー対象)
AUDIT POLICY pol_logon_audit;
-- 特定ユーザーのみ対象
AUDIT POLICY pol_logon_audit BY hr, scott;
-- 失敗のみ記録
AUDIT POLICY pol_logon_audit WHENEVER NOT SUCCESSFUL;
SQL(DML 監査ポリシー)
-- 特定テーブルへの DML を監査
CREATE AUDIT POLICY pol_emp_dml
ACTIONS INSERT ON hr.employees,
UPDATE ON hr.employees,
DELETE ON hr.employees;
AUDIT POLICY pol_emp_dml;
SQL(権限監査ポリシー)
-- DBA 権限の使用を監査
CREATE AUDIT POLICY pol_dba_actions
PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE, ALTER USER;
AUDIT POLICY pol_dba_actions;
SQL(条件付きポリシー: 12c R2 以降)
-- 特定の IP アドレスからのアクセスのみ監査
CREATE AUDIT POLICY pol_external_access
ACTIONS SELECT ON hr.employees
WHEN 'SYS_CONTEXT(''USERENV'', ''IP_ADDRESS'') NOT IN (''10.0.0.1'', ''10.0.0.2'')'
EVALUATE PER SESSION;
AUDIT POLICY pol_external_access;
ポリシーの無効化と削除
SQL
-- ポリシーを無効化 NOAUDIT POLICY pol_logon_audit; -- ポリシーを削除 DROP AUDIT POLICY pol_logon_audit; -- 現在のポリシー一覧を確認 SELECT policy_name, enabled_option, entity_name FROM audit_unified_enabled_policies ORDER BY policy_name;
監査ログの確認
伝統的監査: DBA_AUDIT_TRAIL
SQL(伝統的監査ログの確認)
-- 直近 24 時間の監査ログ
SELECT username, action_name, obj_name,
timestamp, returncode, os_username, userhost
FROM dba_audit_trail
WHERE timestamp >= SYSDATE - 1
ORDER BY timestamp DESC;
-- ログイン失敗の一覧(不正アクセス調査)
SELECT username, userhost, os_username, timestamp, returncode
FROM dba_audit_trail
WHERE action_name = 'LOGON'
AND returncode <> 0 -- 0 = 成功、それ以外 = 失敗
AND timestamp >= SYSDATE - 7
ORDER BY timestamp DESC;
統合監査: UNIFIED_AUDIT_TRAIL
SQL(統合監査ログの確認)
-- 直近 24 時間の監査ログ
SELECT dbusername, action_name, object_name, object_schema,
event_timestamp, return_code, os_username, userhost,
unified_audit_policies
FROM unified_audit_trail
WHERE event_timestamp >= SYSDATE - 1
ORDER BY event_timestamp DESC;
-- 特定ポリシーのログだけ確認
SELECT dbusername, action_name, object_name, event_timestamp
FROM unified_audit_trail
WHERE unified_audit_policies LIKE '%POL_EMP_DML%'
AND event_timestamp >= SYSDATE - 7
ORDER BY event_timestamp DESC;
| 列名(統合監査) | 内容 |
|---|---|
| DBUSERNAME | 操作を実行した DB ユーザー名 |
| ACTION_NAME | 操作の種類(LOGON / SELECT / INSERT / CREATE TABLE 等) |
| OBJECT_SCHEMA / OBJECT_NAME | 操作対象のスキーマ / オブジェクト名 |
| EVENT_TIMESTAMP | 操作の日時 |
| RETURN_CODE | 結果コード(0 = 成功、1017 = パスワード不正、942 = テーブル不在 等) |
| OS_USERNAME / USERHOST | OS ユーザー名 / 接続元ホスト |
| SQL_TEXT | 実行された SQL(DB,EXTENDED 設定時) |
| UNIFIED_AUDIT_POLICIES | 該当した監査ポリシー名 |
FGA(ファイングレイン監査)の概要
FGA(Fine-Grained Auditing)は、「特定の列が参照された」「特定の条件に合致する行がアクセスされた」など、行/列レベルの細かい監査が可能です。
SQL(FGA ポリシーの作成)
-- 給与列が参照されたときだけ監査
BEGIN
DBMS_FGA.ADD_POLICY(
object_schema => 'HR',
object_name => 'EMPLOYEES',
policy_name => 'FGA_SALARY_ACCESS',
audit_column => 'SALARY',
audit_condition => 'DEPARTMENT_ID = 10', -- 部門 10 のみ
statement_types => 'SELECT, UPDATE'
);
END;
/
-- FGA ログの確認
SELECT db_user, object_name, policy_name,
sql_text, timestamp
FROM dba_fga_audit_trail
ORDER BY timestamp DESC;
FGA の詳しい活用方法は「ファイングレイン監査(FGA)と PL/SQL の活用」を参照してください。
監査ログのクリーンアップ
SQL(伝統的監査ログの削除)
-- 90 日以前の監査ログを削除 DELETE FROM sys.aud$ WHERE ntimestamp# < SYSDATE - 90; COMMIT;
SQL(統合監査ログの削除: DBMS_AUDIT_MGMT)
-- クリーンアップの初期設定(初回のみ)
BEGIN
DBMS_AUDIT_MGMT.INIT_CLEANUP(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
default_cleanup_interval => 720 -- 時間(30 日)
);
END;
/
-- 手動クリーンアップ(90 日以前を削除)
BEGIN
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
last_archive_time => SYSDATE - 90
);
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
use_last_arch_timestamp => TRUE
);
END;
/
監査ログを放置するとテーブルが肥大化する
特に audit_trail=DB,EXTENDED では SQL テキストも記録されるため、監査ログテーブル(SYS.AUD$ / AUDSYS.AUD$UNIFIED)が急速に肥大化します。定期的なクリーンアップジョブの設定は必須です。詳細は「監査ログの保存先とローテーション」を参照。
特に audit_trail=DB,EXTENDED では SQL テキストも記録されるため、監査ログテーブル(SYS.AUD$ / AUDSYS.AUD$UNIFIED)が急速に肥大化します。定期的なクリーンアップジョブの設定は必須です。詳細は「監査ログの保存先とローテーション」を参照。
監査ポリシーの設計例
| 監査対象 | 目的 | 設定例 |
|---|---|---|
| ログオン / ログオフ | 不正アクセス検出・アクセス記録 | AUDIT SESSION / AUDIT POLICY pol_logon |
| ログイン失敗 | ブルートフォース攻撃の検出 | AUDIT SESSION WHENEVER NOT SUCCESSFUL |
| 機密テーブルの SELECT | 情報漏洩の追跡 | AUDIT SELECT ON hr.employees |
| DBA 権限の行使 | 特権ユーザーの操作記録 | AUDIT POLICY pol_dba_actions PRIVILEGES … |
| DDL(構造変更) | テーブルの誤削除の追跡 | AUDIT CREATE TABLE, DROP TABLE, ALTER TABLE |
| 特定列へのアクセス(FGA) | 給与・個人情報の参照追跡 | DBMS_FGA.ADD_POLICY(audit_column => ‘SALARY’) |
最低限設定すべき監査
(1) ログオン/ログオフ: 誰がいつ接続したかの基本記録
(2) ログイン失敗: 不正アクセスの早期検出
(3) DDL: テーブルの誤削除・構造変更の追跡
(4) 機密テーブルの DML: 個人情報や金融データへのアクセス記録
最初はこの 4 つから始め、コンプライアンス要件に応じて拡張してください。
(1) ログオン/ログオフ: 誰がいつ接続したかの基本記録
(2) ログイン失敗: 不正アクセスの早期検出
(3) DDL: テーブルの誤削除・構造変更の追跡
(4) 機密テーブルの DML: 個人情報や金融データへのアクセス記録
最初はこの 4 つから始め、コンプライアンス要件に応じて拡張してください。
実務パターン集
パターン(1): セキュリティ基本セット(統合監査)
SQL(基本的な監査ポリシーセット)
-- ログオン監査(全ユーザー + 失敗のみ別ポリシー)
CREATE AUDIT POLICY pol_logon ACTIONS LOGON;
AUDIT POLICY pol_logon;
CREATE AUDIT POLICY pol_logon_fail ACTIONS LOGON;
AUDIT POLICY pol_logon_fail WHENEVER NOT SUCCESSFUL;
-- DDL 監査
CREATE AUDIT POLICY pol_ddl
ACTIONS CREATE TABLE, ALTER TABLE, DROP TABLE,
CREATE INDEX, DROP INDEX, CREATE USER, DROP USER;
AUDIT POLICY pol_ddl;
-- 機密テーブルの DML 監査
CREATE AUDIT POLICY pol_sensitive_dml
ACTIONS SELECT ON hr.employees,
UPDATE ON hr.employees,
DELETE ON hr.employees,
SELECT ON finance.transactions;
AUDIT POLICY pol_sensitive_dml;
パターン(2): 不正アクセスの調査
SQL(ログイン失敗の分析)
-- 過去 7 日間のログイン失敗を IP 別に集計
SELECT userhost, dbusername,
COUNT(*) AS fail_count,
MIN(event_timestamp) AS first_attempt,
MAX(event_timestamp) AS last_attempt
FROM unified_audit_trail
WHERE action_name = 'LOGON'
AND return_code <> 0
AND event_timestamp >= SYSDATE - 7
GROUP BY userhost, dbusername
ORDER BY fail_count DESC;
パターン(3): 特定ユーザーの操作履歴
SQL(ユーザーの全操作を時系列で確認)
-- 特定ユーザーの直近 24 時間の操作
SELECT event_timestamp, action_name,
object_schema || '.' || object_name AS object,
sql_text, return_code
FROM unified_audit_trail
WHERE dbusername = 'HR'
AND event_timestamp >= SYSDATE - 1
ORDER BY event_timestamp;
よくある質問
Q監査を有効にするとパフォーマンスに影響しますか?
A監査はログの書き込みが発生するため、わずかなオーバーヘッドがあります。ただし統合監査はキュー方式で書き込むため影響は最小限です。全 SQL を audit_trail=DB,EXTENDED で記録すると影響が大きくなるため、必要な対象だけを監査するのがベストプラクティスです。
Q伝統的監査と統合監査はどちらを使うべきですか?
AOracle 12c 以降であれば統合監査(Unified Audit)を推奨します。ポリシーベースで管理しやすく、FGA / SYS 監査 / RMAN 監査を統合管理できます。11g 以前では伝統的監査(AUDIT 文)が唯一の選択肢です。
QSYS ユーザーの操作も監査できますか?
A伝統的監査では
audit_sys_operations = TRUE に設定するとSYS / SYSDBA の操作が OS ファイルに記録されます。統合監査では SYS の操作もデフォルトで UNIFIED_AUDIT_TRAIL に記録されます。Q監査ログはどのくらい保持すべきですか?
Aコンプライアンス要件によりますが、一般的には 90 日〜1 年 が目安です。PCI DSS では 1 年間の保持(直近 3 か月はすぐ参照可能)が要求されます。古いログはアーカイブして削除し、テーブルの肥大化を防いでください。
QWHENEVER SUCCESSFUL と WHENEVER NOT SUCCESSFUL の違いは?
A
省略(デフォルト): 成功・失敗の両方を記録
不正アクセス検出にはログイン失敗(NOT SUCCESSFUL)の監査が特に重要です。
WHENEVER SUCCESSFUL: 操作が成功した場合のみ記録WHENEVER NOT SUCCESSFUL: 操作が失敗した場合のみ記録(権限エラー等)省略(デフォルト): 成功・失敗の両方を記録
不正アクセス検出にはログイン失敗(NOT SUCCESSFUL)の監査が特に重要です。
QFGA と通常の監査の違いは?
A通常の監査は「テーブルへの SELECT があった」というレベルで記録しますが、FGA は「特定の列にアクセスした」「特定の条件の行にアクセスした」という行/列レベルの細かい監査が可能です。機密情報(給与、個人情報等)の列アクセスを追跡する場合に使います。
まとめ
Oracle 監査機能の要点をまとめます。
| やりたいこと | 方法 |
|---|---|
| ログオンを監査 | 伝統的: AUDIT SESSION / 統合: CREATE AUDIT POLICY … ACTIONS LOGON |
| 特定テーブルの DML を監査 | 伝統的: AUDIT SELECT ON table / 統合: CREATE AUDIT POLICY … ACTIONS SELECT ON table |
| DDL を監査 | 伝統的: AUDIT CREATE TABLE / 統合: ACTIONS CREATE TABLE |
| 権限の使用を監査 | 統合: PRIVILEGES CREATE ANY TABLE, … |
| 列レベルの監査 | FGA: DBMS_FGA.ADD_POLICY(audit_column => …) |
| 監査ログの確認 | 伝統的: DBA_AUDIT_TRAIL / 統合: UNIFIED_AUDIT_TRAIL |
| 監査ログのクリーンアップ | DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL |
| 監査ポリシーの一覧 | AUDIT_UNIFIED_ENABLED_POLICIES |
監査ログの保存先とローテーションは「監査ログの保存先とローテーションの設定方法」、FGA の詳細は「ファイングレイン監査と PL/SQL の活用」も併せて参照してください。

