統合監査を使用すると、データベースでのユーザーの行動を監査するポリシーを様々な方法で作成できます。
OE.CUSTOMERS
表に対するSELECT
文を監視する統合監査ポリシーを作成します。 監査とは、選択したユーザー・データベース・アクションの監視および記録です。
監査を行うには、適切なシステム権限が付与されている必要があります。職務分掌を推進するために、次の2つのデフォルト・ロールが用意されています。
AUDIT_ADMIN
ロール。監査の構成、および統合監査ポリシーとファイングレイン監査ポリシーの両方の管理を行えます。監査データの表示と分析も行えます。通常、セキュリティ管理者にこのロールが付与されます。
AUDIT_VIEWER
ロール。監査データの表示と分析のみ行えます。通常、外部監査者にこのロールが付与されます。
この項では、次の場所から監査レコードを取得する統合監査の概要を示します。
統合監査ポリシーおよびAUDIT
設定による監査レコード(SYS
監査レコードを含む)
DBMS_FGA
PL/SQLパッケージによるファイングレイン監査レコード
Oracle Real Application Security監査レコード
Oracle Recovery Manager監査レコード
Oracle Database Vault監査レコード
Oracle Label Security監査レコード
Oracle Databaseによって、これらのレコードが1つの場所に1つの形式で統合されます。単一データベース・インスタンスの場合はUNIFIED_AUDIT_TRAIL
ビューから、Oracle Real Application Clusters環境の場合はGV$UNIFIED_AUDIT_TRAIL
から参照できます。
データベースを現在のリリースにアップグレードする場合、統合監査を使用するには手動で移行する必要があります。アップグレードしたデータベースでの移行の完了後も、以前のリリースの監査レコードは使用可能です。これらの古い監査証跡のアーカイブおよびパージを行います。その後、新規監査レコードは統合監査証跡に書き込まれます。
新たに作成するデータベースの場合、Oracle Databaseで混合モードに対応した監査が提供され、新旧両方の監査機能を同時に実行できます。
統合監査ポリシーを作成し、有効にすると、このポリシーでただちに監査レコードの収集が開始されます。以前のリリースでは必要だった初期化パラメータを設定しなくても、監査全体が有効になります。ポリシーは、1ユーザーのアクティビティの監査のような単純なものにすることも、条件を使用した複雑な監査ポリシーを作成することもできます。1つのデータベースで同時に複数の監査ポリシーを有効にできます。監査ポリシーには、システム全体の監査オプションとオブジェクト固有の監査オプションの両方を含めることができます。一般的なアクティビティに対する監査の大半(標準監査を含む)に、監査ポリシーを使用する必要があります。
監査の別タイプとして、ファイングレイン監査もあります。ファイングレイン監査では、統合監査の監査機能のほとんどと次の機能が提供されます。
特定の列の監査。給与や社会保障番号など、機密情報が格納されている特定の関連する列を監査できます。
イベント・ハンドラの使用。たとえば、夜中に変更されないようにする必要がある監査対象の列が更新された場合に、セキュリティ管理者に電子メール・アラートを送信する関数を作成できます。
Oracleには、よく使用されるセキュリティ関連の監査設定を対象とする、あらかじめ定義された監査ポリシーが3つあります。これらのポリシーは、強力な内部統制を実施して、コンプライアンス要件を満たすための効果的な方法となるように設計されています。
関連項目:
統合監査への移行および混合モード監査の詳細は、『Oracle Databaseアップグレード・ガイド』を参照してください。
監査証跡のアーカイブとパージの詳細は、Oracle Databaseセキュリティ・ガイドを参照してください。
ファイングレイン監査の詳細は、Oracle Databaseセキュリティ・ガイドを参照してください。
事前定義された監査ポリシーの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
監査を使用すると、ユーザー・アカウンタビリティの有効化、不適切なユーザー・アクションの抑止、不審なアクティビティの調査などの業務を実行できます。
監査を使用する理由は、次のとおりです。
アクションに対するアカウンタビリティの有効化。特定のスキーマ、表または行に対して実行されるアクション、あるいは特定の内容に影響を与えるアクションなどがあります。
アカウンタビリティに基づいて不審なユーザーによる不適切なアクションを阻止します。
不審なアクティビティを調査します。たとえば、ユーザーが表からデータを削除しようとした場合、セキュリティ管理者は、そのデータベースへのすべての接続と、そのデータベースにあるすべての表からの行の削除(成功および失敗)をすべて監査できます。
認可されていないユーザーによるアクションを監査人に通知します。たとえば、認可されていないユーザーがデータを変更または削除を実行できるなど、予期した以上の権限を持っている場合に、ユーザー認可を再評価できます。
認可またはアクセス制御の実装に関する問題の検出。たとえば、データは他の方法で保護されているため、監査レコードは生成されないと予測される監査ポリシーを作成できます。しかし、これらのポリシーで監査レコードが生成された場合は、他のセキュリティ制御が正しく実装されていないことがわかります。
コンプライアンスのための監査要件への対処。次のような法規に、監査に関連する一般的な要件が含まれています。
米国企業改革法(Sarbanes-Oxley Act)
米国の医療保険の相互運用性と説明責任に関する法律(Health Insurance Portability and Accountability Act、HIPAA)
自己資本の測定と基準に関する国際的統一化: 改訂された枠組(バーゼルII)(International Convergence of Capital Measurement and Capital Standards: a Revised Framework、Basel II)
日本の個人情報保護法
欧州連合のプライバシと電子通信に関する指令(European Union Directive on Privacy and Electronic Communications)
特定のデータベース・アクティビティに関するデータの監視と収集。たとえば、データベース管理者は、更新された表、実行された論理I/O操作の回数、ピーク時に接続していた同時実行ユーザーの数などに関する統計を収集できます。
このチュートリアルでは、OE.CUSTOMERS
表に対するSELECT
文を監視する統合監査ポリシーを作成します。
sec_admin
ユーザーにAUDIT_ADMIN
ロールを付与する準備ができました。これによって、SEC_ADMIN
は監査ポリシーを作成できるようになります。 sec_admin
として、OE.CUSTOMERS
表でのSELECT
文に対する統合監査ポリシーを作成できます。 sec_admin
管理者アカウントが不要になった場合は、このアカウントを削除する必要があります。この手順では、統合監査が有効かどうかをチェックし、有効でない場合は有効にします。
統合監査を有効にするには、次のようにします。
SYSDBA
管理権限を使用してユーザーSYS
としてSQL*Plusにログインします。
sqlplus sys as sysdba
Enter password: password
次の問合せを実行して、データベースが統合監査を使用するよう移行されているかどうかを確認します。次に示す大/小文字でUnified Auditing
と入力します。
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
VALUE
列の出力がFALSE
の場合、この項の残りのステップを実行して統合監査に移行します。出力がTRUE
の場合は、統合監査が有効化されています。「手順2: SEC_ADMINユーザーへのAUDIT_ADMINロールの付与」に進んでください。
データベースを停止します。
単一インスタンスのインストールの場合、SQL*Plusから次のコマンドを入力します。
SHUTDOWN IMMEDIATE EXIT
Windowsシステムでは、Oracleサービスを停止します。
net stop OracleService%ORACLE_SID%
Oracle Real Application Clusters (Oracle RAC)インストールの場合、次のようにして各データベース・インスタンスを停止します。
srvctl stop database -db db_name
リスナーを停止します。(Oracle RACおよびGrid Infrastructureリスナーでは、リスナーを停止する必要はありません。)
lsnrctl stop listener_name
リスナー名は、lsnrctl status
コマンドを実行すると確認できます。この名前は、Alias
設定によって示されます。
$ORACLE_HOME/rdbms/lib
ディレクトリに移動します。
統合監査実行可能ファイルを有効にします。
UNIX: 次のコマンドを実行します。
make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME
Windows: %ORACLE_HOME%/bin/orauniaud12.dll.option
ファイルの名前を%ORACLE_HOME%/bin/orauniaud12.dll
に変更します。
リスナーを再起動します。
lsnrctl start listener_name
データベースを再起動します。SQL*Plusにログインしてから、次のように、STARTUP
コマンドを入力します。
sqlplus sys as sysoper
Enter password: password
SQL> STARTUP
Windowsシステムでは、Oracleサービスを再度起動します。
net start OracleService%ORACLE_SID%
Oracle RACインストールの場合は、コマンドラインから次のようにしてデータベースを再起動します。
srvctl setenv database -db orcl
sec_admin
ユーザーにAUDIT_ADMIN
ロールを付与する準備ができました。これによって、SEC_ADMIN
は監査ポリシーを作成できるようになります。
SEC_ADMINユーザーにAUDIT_ADMINロールを付与するには、次のようにします。
ターゲット・データベースのデータベース・ホームページに、SYSDBA
管理権限を使用してユーザーSYS
としてアクセスします。
詳細は、Oracle Database 2日でデータベース管理者を参照してください。
「スキーマ」メニューから、「ユーザー」を選択します。
SEC_ADMINアカウントを選択し、「編集」をクリックします。
sec_adminユーザー・アカウントが存在しない場合は、「手順2: セキュリティ管理者アカウントを作成する」でsec_admin
セキュリティ管理者アカウントの作成方法について確認してください。
ユーザーの編集: SEC_ADMINページで「ロール」タブを選択します。
「リストの編集」ボタンを選択します。
ロールの変更ページで、「使用可能なロール」リストからAUDIT_ADMINを選択し、「選択したロール」リストに移動します。「OK」をクリックします。
ユーザーの編集: SEC_ADMINページで「オブジェクト権限」タブを選択します。
ユーザーの編集: SEC_ADMINページで「オブジェクト・タイプ」リストから「パッケージ」を選択し、「追加」をクリックします。
「パッケージオブジェクト権限の追加」ページで、次の手順を実行します。
パッケージ・オブジェクトの選択フィールドにSYS.DBMS_AUDIT_MGMT
と入力します。
「使用可能なパッケージ」で「EXECUTE」を選択し、「移動」をクリックして「選択した権限」リストに送ります。
「OK」をクリックします。
ユーザーの編集: SEC_ADMINページで「適用」をクリックします。
Enterprise Managerでユーザーsec_admin
として、OE.CUSTOMERS
表でのSELECT
文に対する統合監査ポリシーを作成できます。
統合監査ポリシーを作成するには、次のようにします。
Enterprise Managerからログアウトし、ユーザーsec_admin
としてログインしなおします。
「セキュリティ」メニューから「監査設定」を選択します。
監査設定ページで「作成」をクリックします。
監査ポリシーの作成: 権限およびロールページで次の設定を入力します。
名前: ポリシー名として select_cust_pol
と入力します。
コメント: Audit policy for SELECT statements on OE.CUSTOMERS
と入力します。
「次」ボタンをクリックします。
監査ポリシーの作成: コンポーネント・アクションページで「次へ」をクリックします。
監査ポリシーの作成: オブジェクト・アクションページで「オブジェクトの追加」をクリックします。
「オブジェクトの追加」ダイアログ・ボックスで次の設定を入力します。
スキーマ: OE
タイプ: TABLE
オブジェクト: CUSTOMERS
アクション: SELECT
「OK」をクリックします。
次のように「監査ポリシーの作成 : オブジェクト・アクション」ページが表示されます。
監査ポリシーの作成: オブジェクト・アクションウィンドウで「次へ」をクリックします。
監査ポリシーの作成: 条件ウィンドウで「次へ」をクリックします。監査ポリシーの作成: 確認ページで「送信」をクリックします。
「監査設定」ページが表示され、ポリシーのリストにSELECT_CUST_POLが含まれています。
「SELECT_CUST_POL」を選択して「有効化」ボタンをクリックします。
「監査ポリシーの有効化」ダイアログ・ボックスで、「ユーザーが少ない」チェック・ボックスを選択します。
「監査ポリシーの有効化」ダイアログ・ボックスを拡張して特定のユーザーを追加できます。
「ユーザーの追加」ボタンをクリックします。
「ユーザーの追加」ダイアログ・ボックスでOE
を検索および入力(「Oracle提供の表示」
チェック・ボックスを選択)し、「成功時に監査」および「失敗時に監査」チェック・ボックスが選択されていることを確認します。
「OK」をクリックします。
この手順を繰り返して、HRをリストに追加します。
Enterprise Managerを終了しないでください。
監査を有効にすると、監査設定をテストする準備ができます。
OE.CUSTOMERS
表に対して実行されるSELECT
文は、統合監査証跡に書き込まれます。監査レコードを検索するには、UNIFIED_AUDIT_TRAIL
動的ビューを問い合せる必要があります。
統合監査ポリシーは、監査中のユーザーに対する次のユーザー・セッションで有効となります。したがって、監査記録を取得する前に、ユーザーはポリシーが作成されてからデータベースに接続する必要があります。
監査設定をテストするには、次のようにします。
SQL*Plusで、ユーザーOE
として接続し、OE.CUSTOMERS
表に問い合せ、監査証跡用のレコードを生成します。
connect OE
Enter password: password
SELECT COUNT(*) FROM CUSTOMERS;
COUNT(*)
--------
319
ユーザーHR
として接続し、次の問合せを実行します。
connect HR
Enter password: password
SELECT COUNT(*) FROM OE.CUSTOMERS;
ERROR at line 1:
ORA-00942: table or view does not exist
この時点で、監査証跡には2つのレコードが含まれています。1つは、ユーザーOE
による成功した問合せに関するもので、もう1つは、ユーザーHR
による失敗した問合せに関するものです。
ユーザーSH
として接続し、同じ問合せを実行します。
connect SH
Enter password: password
SELECT COUNT(*) FROM OE.CUSTOMERS;
ERROR at line 1:
ORA-00942: table or view does not exist
このユーザーは監査の対象ではないため、このアクションに対する監査レコードはありません。
ユーザーsec_admin
として接続します。
connect sec_admin
Enter password: password
次のプロシージャを実行します。
EXEC SYS.DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL;
監査証跡モードがQUEUED
の場合、インメモリー・キューが一杯になるまで、監査レコードはディスクに書き込まれません。このコマンドによってキューをディスクに書き出すよう明示的に指示され、UNIFIED_AUDIT_TRAIL
ビューで監査証跡レコードを確認できます。
次の文を入力して、UNIFIED_AUDIT_TRAIL
ビューに問い合せます。
col dbusername format a12 col sql_text format a30 col event_timestamp format a38 SELECT DBUSERNAME, SQL_TEXT, EVENT_TIMESTAMP FROM UNIFIED_AUDIT_TRAIL WHERE SQL_TEXT LIKE 'SELECT %';
このSELECT
文では、ユーザーOE
、HR
およびSH
としてSELECT
文を入力したときと同じ大/小文字を使用して、SQL_TEXT
列のテキスト('SELECT %'
)を入力します。つまり、SELECT
文を小文字で入力した場合は、'SELECT %'
ではなく、'select %'
と入力してDBA_AUDIT_TRAIL
ビューを問い合せます。
次のような出力が表示されます。
DBUSERNAME SQL_TEXT EVENT_TIMESTAMP ---------- --------------------------------- -------------------------------- OE SELECT COUNT(*) FROM CUSTOMERS 04-JAN-13 03.39.02.468963 PM HR SELECT COUNT(*) FROM OE.CUSTOMERS 04-JAN-13 03.38.05.974127 PM
監査ポリシーはユーザーOE
およびHR
のみに適用されているため、ユーザーSH
のアクションに関するレコードはありません。
不要になった場合は、このチュートリアルのコンポーネントを削除できます。
このチュートリアルで使用した監査設定を削除するには、次のようにします。
Enterprise Managerで、sec_adminユーザーとしてログインしていることを確認します。
「管理」を選択し、「セキュリティ」、「監査設定」の順に選択して監査設定ページを表示します。
SELECT_CUST_POLポリシーを選択して「無効化」をクリックし、「確認」ダイアログ・ボックスで「はい」を選択します。
SELECT_CUST_POLポリシーを再度選択して「削除」をクリックし、「確認」ダイアログ・ボックスで「はい」を選択します。「はい」を再度クリックします。
Enterprise Managerからログアウトし、SYSDBA
管理権限を使用してユーザーSYS
として再度ログインします。
「スキーマ」メニューから、「ユーザー」を選択します。
SEC_ADMINユーザーを選択し、「編集」をクリックします。
ユーザーの編集: SEC_ADMINページで「ロール」を選択します。
「リストの編集」ボタンを選択します。
ロールの変更ページで、AUDIT_ADMINロールを「使用可能なロール」リストに移動し、「OK」をクリックします。
ユーザーの編集: SEC_ADMINページで「オブジェクト権限」タブを選択します。
DBMS_AUDIT_MGMTパッケージのEXECUTE権限を選択し、「削除」をクリックします。
「適用」をクリックします。