【ITニュース解説】Reducing Unified Audit Trail Size in Oracle 23ai
2025年09月17日に「Dev.to」が公開したITニュース「Reducing Unified Audit Trail Size in Oracle 23ai」について初心者にもわかりやすく解説しています。
ITニュース概要
Oracle 23aiは、統合監査証跡のサイズ管理を効率化する新パラメータを導入した。`UNIFIED_AUDIT_TRAIL_EXCLUDE_COLUMNS`を使うと、SQL文やバインド変数など特定のカラムを監査記録から除外できる。これにより、ストレージ消費と処理負担が軽減される。
ITニュース解説
Oracleデータベースは、企業や組織の重要なデータを管理する基盤であり、そのセキュリティと運用状況の透明性は非常に重要である。特に、誰が、いつ、どのような操作をデータベースに対して行ったのかを記録する「監査」の機能は、不正アクセスやデータ改ざんの追跡、コンプライアンス要件の順守に不可欠な役割を果たす。Oracleデータベースでは、この監査機能の中心となるのが「Unified Auditing(統合監査)」である。
Unified Auditingは、データベース内のさまざまな監査情報を一元的に収集し、管理する仕組みである。従来の監査機能が分散していたのに対し、Unified Auditingはすべての監査レコードを「AUD$UNIFIED」という一つの表に集約する。これにより、データベース管理者(DBA)は監査情報をより簡単に、かつ整合性のある形で分析できるようになる。しかし、この統合監査には一つの課題があった。それは、監査証跡(監査によって記録されるデータ)のサイズが非常に大きくなる可能性がある、という点である。
データベースへの操作は頻繁に行われ、その一つ一つが詳細に記録されるため、AUD$UNIFIED表に蓄積されるデータ量は膨大になりがちである。特に、SQL文のテキストやバインド変数(SQL文で使われる実際の値)など、詳細な情報まで含めて記録されると、ストレージ容量を圧迫し、監査証跡の管理に手間がかかることがあった。ストレージ容量の確保だけでなく、監査証跡への書き込み処理自体がデータベースのパフォーマンスにわずかながら影響を与える可能性もある。
このような課題に対応するため、Oracle Database 23ai(具体的には23.7バージョン)では、新しい初期化パラメータ「UNIFIED_AUDIT_TRAIL_EXCLUDE_COLUMNS」が導入された。このパラメータは、データベース管理者が統合監査証跡から特定のカラム(列)の情報を除外できるようにすることで、監査証跡のサイズを削減し、不要な詳細情報の取得に伴うオーバーヘッド(余分な処理負荷)を軽減することを目的としている。
このパラメータは、データベースが起動している最中でも設定を変更できる。現在の設定値は、「SHOW PARAMETER unified_audit_trail_exclude_columns;」というSQLコマンドで確認できる。デフォルトでは「NONE」という値が設定されており、これは監査証跡から何も除外されないことを意味する。もしこのパラメータに無効な値を設定しようとすると、Oracleデータベースはエラーを返し、有効な値のリストを提示する。
有効な値は以下の通りである。
NONE: デフォルト値であり、監査証跡から何もカラムを除外しない。
SQL_TEXT: SQLステートメントのテキスト、つまりデータベースに実行されたSQL文そのものを監査証跡から除外する。例えば「SELECT * FROM employees WHERE id = 101;」といった具体的なSQL文の内容は記録されなくなる。
SQL_BINDS: SQL文で使用されたバインド変数の値、つまりSQL_TEXTに含まれる「:v_id」のようなプレースホルダーに実際に入った値(例として「1」という数値)を監査証跡から除外する。これにより、機密性の高いデータ値が監査証跡に残るのを防ぐことができる。
DP_CLOB_PARAMETERS1: Oracleのデータ移行ツールであるData Pumpに関連する特定のパラメータ情報を監査証跡から除外する。Data Pumpはデータベースのデータのエクスポートやインポートを行う際に使われるツールであり、その操作に関する詳細なパラメータが大量に記録されることがあるため、これを除外することで監査証跡のサイズを抑えることが可能になる。
RLS_INFO: 行レベルセキュリティ(Row-Level Security: RLS)、仮想プライベートデータベース(Virtual Private Database: VPD)、またはファイングレインアクセス制御(Fine-Grained Access Control: FGAC)といった、データへのアクセスを細かく制御するセキュリティ機能に関するコンテキスト情報を監査証跡から除外する。これらの機能は、ユーザーがアクセスできるデータの行を特定の条件に基づいて制限するために使用されるため、その詳細情報も膨大になりがちである。
実際にこのパラメータを設定する手順を見てみよう。例えば、「SQL_TEXT」を監査証跡から除外したい場合、「ALTER SYSTEM SET unified_audit_trail_exclude_columns=sql_text;」というSQLコマンドを実行する。この変更を適用した後、データベースに対する操作を行い、その監査証跡を確認すると、以前は記録されていたSQL文のテキストが空欄になっていることがわかる。
具体的な例として、まず「pol_select_tb」という名前の監査ポリシーを作成し、ユーザー「vahid」が「tb」表に対してSELECT文を実行することを監査対象とする。このポリシーを有効にした後、SELECT * FROM vahid.tb WHERE id=:v_id;というSQL文を実行すると、デフォルト設定では、監査証跡には「VAHID」ユーザーが「SELECT」アクションで「TB」表を操作し、その際に使用されたバインド変数「#1(1):1」とSQL文のテキスト「select * from vahid.tb where id=:V_ID」が記録される。
次に、このパラメータを「sql_text」に設定し、監査証跡を一度クリーンアップ(過去の監査情報を削除)してから同じSQL文を実行してみる。すると、監査証跡には依然としてユーザー名、アクション名、オブジェクト名、バインド変数の値は記録されているが、SQL_TEXTカラムは空欄になり、SQL文のテキストが除外されたことが確認できる。これはストレージの節約に直結する。
同様に、「SQL_BINDS」を除外するようにパラメータを設定した場合、SQL_TEXTは記録されたままだが、バインド変数の値が監査証跡から除外される。これにより、特定のパラメータ値を監査証跡に含めたくない場合に役立つ。
Data Pumpの例では、まず「comp_policy」という監査ポリシーを作成し、Data Pumpのエクスポート操作を監査対象とする。デフォルト設定でData Pumpのエクスポートを実行し、監査証跡を確認すると、「{"parameter":"CLIENT_COMMAND","value":"vahid/********@...}」のようなData Pumpに関する詳細なパラメータ情報が「dp_clob_parameters1」カラムに記録されていることがわかる。しかし、このパラメータを「dp_clob_parameters1」に設定して再度Data Pumpのエクスポートを行うと、同じカラムは空欄となり、この情報が除外されたことが確認できる。
最後に、「RLS_INFO」を除外する設定も可能である。これは、行レベルセキュリティが適用されている環境で、その詳細なコンテキスト情報が監査証跡に記録されるのを防ぐものである。この設定により、監査証跡のサイズをさらに削減できる。
このように、「UNIFIED_AUDIT_TRAIL_EXCLUDE_COLUMNS」パラメータは、データベース管理者にとって、Oracleデータベースの統合監査をより柔軟かつ効率的に運用するための強力なツールとなる。監査証跡の肥大化によるストレージコストの増加やパフォーマンスへの潜在的な影響を軽減しつつ、コンプライアンスやセキュリティ要件を満たすために必要な監査情報を適切に管理することが可能になるのである。これにより、ストレージ資源の有効活用とデータベース運用の最適化が期待できる。