Database Support Blog

  • Oracle Database
2025.03.27

【Oracle Database 23ai 検証】統合監査のキホンと拡張機能について

アシストでは、日本オラクル社の協力を得てOracle Database 23aiの検証プログラムを行っています。

第3回目の本記事では監査に焦点を当て、機能をご紹介します。

1)従来型監査、統合監査おさらい
2)統合監査の新機能「列レベル監査」
3)最後に

組織にとって重要なデータを守るため、そして法令遵守のための証憑としても、データベースの操作履歴を辿る監査設定は非常に重要です。

Oracle Databaseでは9i以降、従来型監査と呼ばれる監査設定がサポートされていましたが、23aiからは統合監査のみがサポートされるようになりました。

従来型監査の利用者にとっては、23aiへのバージョンアップ時に統合監査に切り替える必要があります。しかし切り替えにかかる工数を考慮しても、統合監査に切り替えるメリットの方が大きいでしょう。

統合監査では様々な監査ログを1つのビューから効率よく確認することができます。また従来型監査と比較し、監査の全体的なパフォーマンスに優れています。

本記事では、従来型監査と統合監査の違いをおさらいし、23aiにおける統合監査の機能拡張について詳しく解説します。


従来型監査、統合監査おさらい

従来型監査と統合監査では多くの違いがあります。

ここでは、特に大きな差分を3点ピックアップしてご紹介します。

監査ログの出力と参照

従来型監査では、監査ログをDB内に保管する方法とOSファイルとして出力する方法があります。DB内の監査ログはDBA_AUDIT_TRAILなどのビューから参照できます。

統合監査では、すべての監査ログがDB内に集積され、UNIFIED_AUDIT_TRAILビューから参照できます。

従来型監査 統合監査
監査ログの出力先
audit_trail設定により変動
OS → OSファイルへの出力
XML → XML形式でOS上に出力
DB → SYS.AUD$表へ出力
AUDSYSスキーマの内部表へ出力
監査ログの参照
audit_trailがOS/XML
→ OSファイルを参照

audit_trailがDB
→ DBA_AUDIT_XXXビューを参照
UNIFIED_AUDIT_TRAIL ビューを参照

監査の設定方法

従来型監査では、1つ1つのアクションに対してauditコマンドを実行して監査設定を行います。

統合監査ではアクションごとに監査設定するのではなく、複数のアクションをまとめた監査ポリシーを作成し、それを有効化します。

監査ポリシーという単位で複数の監査設定を管理できるため、管理性に優れています。

従来型監査 統合監査
監査の設定方法:
例)TEST1表のUPDATEとTET2表のDELETEを監査
特定のアクションに対して1つずつAUDIT文で監査設定を行う。

例)
SQL> AUDIT update ON test1;
SQL> AUDIT delete ON test2;
監査ポリシーを作成、有効化する。

例)
– 監査ポリシーの作成
SQL> CREATE AUDIT POLICY test_policy – ポリシー名
ACTIONS update on test1, delete on test2; – 監査対象のアクション

– 監査ポリシーの有効化
SQL> AUDIT POLICY test_policy;

監査ログの削除

従来型監査では 、初期化パラメータaudit_trail の値がDBに設定されている場合には、SYS.AUD$表に監査ログが保管されます。
この監査ログは、”DELETE FROM SYS.AUD$ ~”や”TRUNCATE TABLE SYS.AUD$;”のようにAUD$表を直接指定して削除できます。

一方、統合監査では監査ログは内部表に保管されます。削除時はDELETEやTRUNCATEコマンドではなく、プロシージャを使う必要があります。

従来型監査 統合監査
監査ログの削除:
例)2025年1月1日以前の監査ログを削除する
SYS.AUD$ に対してDELETE/TRUNCATEが可能

例)
SQL> DELETE FROM sys.aud$
WHERE ntimestamp# < to_timestamp('20250101','YYYYMMDD');
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL プロシージャを利用して削除

例)
– 統合監査ログの削除範囲を指定
SQL> BEGIN
dbms_audit_mgmt.set_last_archive_timestamp(
audit_trail_type => dbms_audit_mgmt.audit_trail_unified,
last_archive_time => sys_extract_UTC(timestamp '2025-01-01 00:00:00.00'));
END;
/

– 統合監査ログを削除
SQL> BEGIN
dbms_audit_mgmt.clean_audit_trail(
audit_trail_type => dbms_audit_mgmt.audit_trail_unified,
use_last_arch_timestamp => true);
END;

なお、12cから19cまではデフォルトで混合監査が有効であるため、従来型監査と統合監査を併用できます。

現在有効な統合監査ポリシーは、AUDIT_UNIFIED_ENABLED_POLICIESより確認できます。

23ai新機能「表およびビューの列レベルでのオブジェクト・アクションの監査」

企業データの完全性を保つためには、監査設定を行い、いつ誰がデータを更新したかを確実に把握することが重要です。

ただし表データのすべての更新に対して監査を行うと、大量の監査ログが出力されてしまい、ディスク容量が圧迫されるなど、監査ログ自体の管理工数がかかってしまう場合もあります。

23aiでは、表全体ではなく列の単位で監査設定をすることで、より重要なデータに絞り込んで監査ができるようになりました。

この「表およびビューの列レベルでのオブジェクト・アクションの監査」(列レベル監査)について、具体例を使ってご紹介します。

列レベル監査による商品表の監査

今回は商品の価格と在庫を管理する商品表を監査します。

PRODUCTNAME   PRICE     STOCK  
ProductA 1000 100
ProductB 1500 100
ProductC 3000 100

これまでの従来型監査や統合監査では、表レベルでの監査設定のみ可能でした。
そのため商品表の監査を行うには、商品表に対して変更処理があった場合にすべて監査ログを残します。

在庫数が増減しただけでも監査ログが出力されるため、大量の監査ログが出力されてしまいます。

一方で、23aiでは列レベルの監査が可能なため、重要な列の情報に変更があった場合に絞り込んで監査ログを収集できます。

– PRICE列の UPDATE を監査するポリシーを作成
SQL> CREATE AUDIT POLICY PriceColumnAudit
2 ACTIONS UPDATE (price) ★ price 列の更新のみ監査
3 ON test.products;
– 監査ポリシーの有効化
SQL> AUDIT POLICY PriceColumnAudit;

この設定により、価格に変更があった場合のみ監査ログを残せます。

--PRICE列をUPDATE
SQL> UPDATE test.products
2 SET price = 1500 ★価格を変更
3 WHERE productname = 'ProductB';
1行が更新されました。
--PRICE列以外をUPDATE
SQL> UPDATE test.products
2 SET stock = stock - 1 ★在庫数を変更
3 WHERE productname = 'ProductB';
1行が更新されました。
-- 監査ログの確認
SQL> SELECT OBJECT_NAME, ACTION_NAME, SQL_TEXT
2 FROM UNIFIED_AUDIT_TRAIL
3 WHERE OBJECT_NAME = 'PRODUCTS';
OBJECT_NAME  ACTION_NAME  SQL_TEXT
----------------------- ---------------------- --------------------------------------------
PRODUCTS UPDATE update products set price=1500 where productname='ProductB’
★ price 列の更新のみ監査ログが生成される

補足)ファイングレイン監査について

23ai以前でもEnterprise Editionであればファイングレイン監査を使うことで、条件を絞り込んで監査設定ができます。

ファイングレイン監査では、例えば「在庫が10未満」に更新されたときだけ監査するといったように、列レベルよりも更に詳細に条件を指定できます。

– 監査設定
SQL> BEGIN
2 DBMS_FGA.ADD_POLICY(
3 object_schema => 'TEST',
4 object_name => 'PRODUCTS',
5 policy_name => 'StockLessThan10Audit',
6 audit_condition => 'STOCK < 10', ★条件:在庫が10未満
7 statement_types => 'UPDATE',
8 audit_column => 'STOCK' ★在庫列に関する監査
9 );
10 END;
11 /
– ProductCの在庫を8に更新
SQL> UPDATE products
2 SET stock = 8
3 WHERE PRODUCTNAME='ProductC';
– 監査ログを確認
SQL> SELECT OBJECT_NAME, ACTION_NAME, SQL_TEXT
2 FROM UNIFIED_AUDIT_TRAIL
3 WHERE OBJECT_NAME = 'PRODUCTS';
OBJECT_NAME  ACTION_NAME SQL_TEXT
------------ ------------ --------------------------------------------------------------------------------
PRODUCTS UPDATE UPDATE products SET stock = 8 WHERE PRODUCTNAME='ProductC'

監査対象の詳細な絞り込みが必要な環境では、ファイングレイン監査の活用もご検討ください。

最後に

今回はデータベースの監査機能についてご紹介しました。

現在、従来型監査/混合監査をご使用のお客様は23aiへのバージョンアップ時に統合監査への切り替えが必要です。

データベース監査は、企業のデータセキュリティを強化し、様々な法令遵守を確実にします。 不正アクティビティの早期検出、データ侵害の調査支援などにも役立ちます。

23aiでは統合監査の機能拡張により、重要な監査ログを絞り込んで収集しやすくなりました。すでに統合監査をご利用のお客様もぜひ、最新情報をご確認いただければと思います。

アシストでは引き続き、23aiの様々な機能についてご紹介します。次回連載もお楽しみにお待ちください!



この記事で知りたい情報は得られましたか?

本記事に関連して、他にもOracle Database 23aiの新機能や機能拡張についてご紹介している記事もございます。あわせてご活用ください。


執筆者情報

すずき かほ プロフィール画像

2019年に新卒入社。Oracle Databaseの技術部門に配属後、サポートやフィールドエンジニアとして活動。 Oracle Databaseの教育講師も兼任しており、SQLやPL/SQLなど言語系の講義を担当する。



■本記事の内容について
 本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。

■商標に関して
 ・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
 ・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
  文中の社名、商品名等は各社の商標または登録商標である場合があります。

関連している記事

  • Oracle Cloud
  • Oracle Database
2025.04.18

Oracle Cloud VMware SolutionでのVMware HCX環境構築手順(後編)

前回の記事でOCVS)でHCXを利用するための前提となる手順の前半をお伝えしました。本記事では後続の手順であるサービスメッシュ作成・L2延伸手順を記載し、仮想マシンを移行できる状態、つまりHCX環境の構築完了までを説明します。

  • Oracle Database
2025.04.11

【Oracle Database 23ai 検証】読取り専用モードの機能拡張

23aiで読取り専用モードの機能が拡張されました。ユーザー/セッション単位で読み書き可能/読取り専用モードの使い分けができるようになり、今まで以上にメンテナンス操作やアプリケーションからの接続の権限管理が柔軟にできるようになっています。

  • Oracle Database
2025.04.08

【Oracle Database 23ai 検証】ロックフリー予約で効率的なデータ更新を実現しよう!

Oracle Database 23aiの新機能であるロックフリー予約により、トランザクション同士がブロックすることなく、効率的なデータ更新を実現できます。本記事では、ロックフリー予約の使い方をご紹介します。

ページの先頭へ戻る