Oracle® Database

2日でセキュリティ・ガイド

11g リリース2(11.2)

B56296-05(原本部品番号:E10575-09)

2013年11月

Oracle Database 2日でセキュリティ・ガイド, 11g リリース2(11.2)

B56296-05

Copyright © 2006, 2013, Oracle and/or its affiliates. All rights reserved.

原本著者:  Patricia Huey

原本協力者: Naveen Gopal、Rahil Mir、Gopal Mulagund、Nina Lewis、Paul Needham、Deborah Owens、Sachin Sonawane、Ashwini Surpur、Kamal Tbeileh、Mark Townsend、Peter Wahl、Xiaofang Wang、Peter M.Wong

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007).Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

表一覧

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

1 Oracle Databaseセキュリティの概要

- このガイドについて

- このマニュアルを使用する前に

- このマニュアルの対象および対象外

- 一般的なデータベース・セキュリティ・タスク

- データベースを保護するためのツール

- データベースの保護: ロードマップ

2 データベースのインストール環境と構成の保護

- データベースのインストール環境と構成の保護について

- デフォルトのセキュリティ設定の使用

- Oracleデータ・ディクショナリの保護

- Oracleデータ・ディクショナリについて

- データ・ディクショナリ保護の有効化

- Oracle Databaseへのオペレーティング・システム・アクセスの保護のガイドライン

- ランタイム機能への権限付与のガイドライン

- インストール環境と構成のセキュリティに使用される初期化パラメータ

- 初期化パラメータ値の変更

3 Oracle Databaseユーザー・アカウントの保護

- Oracle Databaseユーザー・アカウントの保護について

- Oracle Databaseから提供される事前定義されるユーザー・アカウント

- 事前定義された管理アカウント

- 事前定義された非管理ユーザー・アカウント

- 事前定義されたサンプル・スキーマ・ユーザー・アカウント

- データベース・アカウントの期限切れおよびロック

- パスワードの作成要件

- デフォルト・パスワードの検索および変更

- デフォルト管理ユーザー・パスワードの処理のガイドライン

- パスワード管理の強制のガイドライン

- ユーザー・アカウントの保護に使用されるパラメータ

4 ユーザー権限の管理

- 権限管理について

- 権限付与のガイドライン

- ユーザーへのロール付与のガイドライン

- PUBLICロールの権限処理のガイドライン

- セキュア・アプリケーション・ロールによるアプリケーション・アクセスの制御

- セキュア・アプリケーション・ロールについて

- チュートリアル: セキュア・アプリケーション・ロールの作成

- 手順1: セキュリティ管理者アカウントを作成する

- 手順2: このチュートリアルで使用するユーザー・アカウントを作成する

- 手順3: セキュア・アプリケーション・ロールを作成する

- 手順4: 参照ビューを作成する

- 手順5: PL/SQLプロシージャを作成してセキュア・アプリケーション・ロールを設定する

- 手順6: MatthewとWinstonのプロシージャにEXECUTE権限を付与する

- 手順7: EMPLOYEE_ROLEセキュア・アプリケーション・ロールをテストする

- 手順8: このチュートリアルで使用したコンポーネントを削除する(オプション)

- 権限セキュリティに使用される初期化パラメータ

5 ネットワークの保護

- ネットワークの保護について

- ネットワーク上のクライアント接続の保護

- クライアント接続保護のガイドライン

- ネットワーク接続の保護のガイドライン

- ネットワーク暗号化を使用したネットワーク上のデータの保護

- ネットワーク暗号化について

- ネットワーク暗号化の設定

- ネットワーク・セキュリティに使用される初期化パラメータ

6 データの保護

- データの保護について

- 透過的なデータ暗号化によるデータの透過的な暗号化

- 機密データの暗号化について

- データを暗号化するタイミング

- 透過的データ暗号化の動作

- 透過的データ暗号化を使用するためのデータの構成

- 手順1: ウォレットの場所を設定する

- 手順2: ウォレットを作成する

- 手順3: ウォレットを開く(または閉じる)

- 手順4: データを暗号化(または復号化)する

- 既存の暗号化データのチェック

- ウォレットが開いているか閉じているかのチェック

- 個々の表の暗号化されている列のチェック

- 現行のデータベース・インスタンスで暗号化されているすべての表列のチェック

- 現行のデータベース・インスタンスで暗号化されている表領域のチェック

- Oracle Virtual Private DatabaseとOracle Label Security間の選択

- Oracle Virtual Private Databaseによるデータ・アクセスの制御

- Oracle Virtual Private Databaseについて

- チュートリアル: Oracle Virtual Private Databaseポリシーの作成

- 手順1: 必要に応じてセキュリティ管理者アカウントを作成する

- 手順2: セキュリティ管理者アカウントを更新する

- 手順3: このチュートリアルで使用するユーザー・アカウントを作成する

- 手順4: F_POLICY_ORDERSポリシーのファンクションを作成する

- 手順5: ACCESSCONTROL_ORDERS仮想プライベート・データベース・ポリシーを作成する

- 手順6: ACCESSCONTROL_ORDERS仮想プライベート・データベース・ポリシーをテストする

- 手順7: このチュートリアルで使用したコンポーネントを削除する(オプション)

- Oracle Label Securityによる行レベルのセキュリティの強制

- Oracle Label Securityについて

- Oracle Label Securityのポリシー計画のガイドライン

- チュートリアル: HR.LOCATIONS表へのセキュリティ・ラベルの適用

- 手順1: Oracle Label Securityを登録し、LBACSYSアカウントを有効にする

- 手順2: Oracle Label Securityのチュートリアルで使用する1つのロールおよび3人のユーザーを作成する

- 手順3: Oracle Label SecurityのACCESS_LOCATIONSポリシーを作成する

- 手順4: ACCESS_LOCATIONSポリシーのレベル・コンポーネントを定義する

- 手順5: ACCESS_LOCATIONSポリシーのデータ・ラベルを作成する

- 手順6: ACCESS_LOCATIONSポリシーのユーザー認可を作成する

- 手順7: HR.LOCATIONS表にACCESS_LOCATIONSポリシーを適用する

- 手順8: HR.LOCATIONSデータにACCESS_LOCATIONSラベルを追加する

- 手順9: ACCESS_LOCATIONSポリシーをテストする

- 手順10: このチュートリアルで使用したコンポーネントを削除する(オプション)

- Oracle Database Vaultを使用した管理者のアクセスの制御

- Oracle Database Vaultについて

- チュートリアル: OEスキーマへの管理者のアクセスの制御

- 手順1: Oracle Database Vaultを有効にする

- 手順2: OE.CUSTOMERS表に対するSELECT権限をユーザーSCOTTに付与する

- 手順3: ユーザーSYSおよびSCOTTとしてOE.CUSTOMERS表から選択を行う

- 手順4: OE.CUSTOMERS表を保護するためにレルムを作成する

- 手順5: OE Protectionsレルムをテストする

- 手順6: このチュートリアルで使用したコンポーネントを削除する(オプション)

7 データベース・アクティビティの監査

- 監査の概要

- 監査の使用目的

- 標準監査アクティビティが記録される場所

- 標準監査による一般的なアクティビティの監査

- 標準監査について

- 標準監査証跡の有効化または無効化

- セキュリティ関連のSQL文および権限に対するデフォルト監査の使用

- 個々のSQL文の監査

- 個々の権限の監査

- 多層環境でのSQL文および権限の監査でのプロキシの使用

- 個々のスキーマ・オブジェクトの監査

- ネットワーク・アクティビティの監査

- チュートリアル: 標準監査証跡の作成

- 手順1: ログインして標準監査を有効にする

- 手順2: OE.CUSTOMERS表のSELECT文に対する監査を有効にする

- 手順3: 監査設定をテストする

- 手順4: このチュートリアルで使用したコンポーネントを削除する(オプション)

- 手順5: SEC_ADMINセキュリティ管理者アカウントを削除する

- 監査のガイドライン

- SQL文および権限のデフォルト監査の使用のガイドライン

- 監査済情報の管理のガイドライン

- 通常のデータベース・アクティビティの監査のガイドライン

- 疑わしいデータベース・アクティビティの監査のガイドライン

- 監査に使用される初期化パラメータ

索引

表一覧

- 2-1 初期化パラメータとプロファイル・パラメータのデフォルトのセキュリティ設定

- 2-2 インストール環境と構成のセキュリティに使用される初期化パラメータ

- 3-1 事前定義されたOracle Databaseの管理ユーザー・アカウント

- 3-2 事前定義されたOracle Databaseの非管理ユーザー・アカウント

- 3-3 デフォルトのサンプル・スキーマ・ユーザー・アカウント

- 3-4 ユーザー・アカウント・セキュリティに使用される初期化パラメータおよびプロファイル・パラメータ

- 4-1 権限セキュリティに使用される初期化パラメータ

- 5-1 ネットワーク・セキュリティに使用される初期化パラメータ

- 6-1 暗号化されている表領域のデータ・ディクショナリ・ビュー

- 6-2 Oracle Virtual Private DatabaseとOracle Label Securityの比較

- 7-1 監査に使用される初期化パラメータ

はじめに

『Oracle Database 2日でセキュリティ・ガイド』へようこそ。このマニュアルは、Oracle Databaseを使用して日常的なセキュリティ・タスクを実行するユーザーを対象としています。

この章の内容は次のとおりです。

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

対象読者

『Oracle Database 2日でセキュリティ・ガイド』では、Oracle Databaseのセキュリティを管理するために『Oracle Database 2日でデータベース管理者』で習得したセキュリティの知識についてさらに詳しく説明します。このマニュアルの内容はすべてのプラットフォームに適用されます。プラットフォーム固有の情報については、ご使用のプラットフォームのインストレーション・ガイド、構成ガイドおよびプラットフォーム・ガイドを参照してください。

このマニュアルは次のユーザーを対象としています。

- データベース・セキュリティ管理者のスキルを習得する必要があるOracle Database管理者

- セキュリティ管理に関する知識はあるが、Oracle Databaseの使用は初めてのデータベース管理者

このマニュアルでは、セキュリティに関して包括的には説明しません。セキュリティの詳細は、Oracle Databaseセキュリティに関するドキュメント・セットを参照してください。このマニュアルでは、Oracle E-Business Suiteアプリケーションのセキュリティについては説明しません。Oracle E-Business Suiteアプリケーションのセキュリティについては、Oracle E-Business Suite製品のドキュメントを参照してください。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

Oracleサポート・サービスでは、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。

関連ドキュメント

詳細は、次のリソースを参照してください。

Oracle Databaseのドキュメント

セキュリティ関連の情報については、Oracle Databaseのドキュメント・セットの次のマニュアルを参照してください。

- 『Oracle Database 2日でデータベース管理者』

- 『Oracle Database管理者ガイド』

- 『Oracle Databaseセキュリティ・ガイド』

- 『Oracle Database概要』

- 『Oracle Databaseリファレンス』

- 『Oracle Database Vault管理者ガイド』

このマニュアルの多くの例では、Oracleをインストールするときにデフォルトでインストールされるシード・データベースのサンプル・スキーマを使用しています。これらのスキーマの作成方法および使用方法については、『Oracle Databaseサンプル・スキーマ』を参照してください。

Oracle Technology Network (OTN)

リリース・ノート、インストール関連ドキュメント、ホワイト・ペーパーまたはその他の関連ドキュメントは、OTN(Oracle Technology Network)から、無償でダウンロードできます。次のWebサイトを参照してください。

http://www.oracle.com/technetwork/index.html

セキュリティ固有の情報は、OTNを参照してください。

http://www.oracle.com/technetwork/topics/security/whatsnew/index.html

このマニュアルを含むOracleマニュアルの最新バージョンは、次のWebサイトを参照してください。

http://www.oracle.com/technetwork/documentation/index.html

Oracleドキュメントの検索エンジン

データベース・マニュアルの検索エンジンに直接アクセスするには、次のWebサイトを参照してください。

http://tahiti.oracle.com/

My Oracle Support(以前のOracleMetaLink)

セキュリティ・パッチ、動作保証およびサポート・ナレッジ・ベースについては、次のURLのMy Oracle Supportを参照してください。

https://support.oracle.com

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ドキュメントのタイトル、強調またはユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 Oracle Databaseセキュリティの概要

この章の内容は次のとおりです。

- このガイドについて

- 一般的なデータベース・セキュリティ・タスク

- データベースを保護するためのツール

- データベースの保護: ロードマップ

このマニュアルについて

このマニュアルでは、日常的なデータベース・セキュリティ・タスクの実行方法について説明します。これは、Oracle Databaseセキュリティの基礎となる概念を理解しやすくすることを目的としています。データベースの保護に必要な、一般的なセキュリティ・タスクの実行方法について学びます。このマニュアルで説明するタスクの完了時に得られる知識は、データの保護、および米国企業改革法(Sarbanes-Oxley Act)などの一般的なコンプライアンス要件の準拠に役立ちます。

このマニュアルで使用している主な管理インタフェースは、Database ConsoleモードのOracle Enterprise Managerで、Oracle Databaseで導入されたすべての自己管理機能を装備しています。

この項の内容は次のとおりです。

- このマニュアルを使用する前に

- このマニュアルの対象および対象外

このマニュアルを使用する前に

このマニュアルを使用する前に、次のことを実行する必要があります。

- 『Oracle Database 2日でデータベース管理者』をよく理解すること

- 「データベースを保護するためのツール」で説明している必要な製品およびツールを入手すること

このマニュアルの対象および対象外

『Oracle Database 2日でセキュリティ・ガイド』は、タスク指向のマニュアルです。セキュリティ・タスクを実行する理由とタイミングについて説明することがこのマニュアルの目的です。

必要に応じて、タスクの理解および実行に必要な概要および手順について説明します。このマニュアルでは、Oracle Databaseのすべての概要を包括的には説明しません。包括的な概要については、『Oracle Database概要』を参照してください。

また、必要に応じて、セキュリティ・タスクを完了するために必要なOracle Databaseの管理手順についても説明します。Oracle Databaseの基本的な管理タスクについては説明しません。基本的な管理タスクについては、『Oracle Database 2日でデータベース管理者』を参照してください。また、管理タスクの詳細は、『Oracle Database管理者ガイド』を参照してください。

また、このマニュアルでは、Oracle Databaseのすべてのセキュリティ機能について包括的に説明しておらず、このマニュアルで使用されるツールと同等のコマンドライン機能を提供する使用可能なAPIについては説明していません。これについては、『Oracle Databaseセキュリティ・ガイド』を参照してください。

一般的なデータベース・セキュリティ・タスク

Oracle Databaseのデータベース管理者は、セキュリティに関連する次のタスクを実行する必要があります。

- データベースのインストール環境と構成が保護されていることの確認

- セキュアなパスワード・ポリシーの開発、ロールの作成および割当て、当該ユーザーのみへのデータ・アクセスの制限などの、ユーザー・アカウントにおけるセキュリティ面の管理

- ネットワーク接続がセキュアであることの確認

- 機密データの暗号化

- データベースのセキュリティに脆弱性がなく、外部からの侵入を防止していることの確認

- 監査するデータベース・コンポーネントの決定と監査の粒度の決定

- セキュリティ・パッチのダウンロードとインストール

小中規模のデータベース環境では、これらのタスクのみでなく、Oracleソフトウェアのインストール、データベースの作成、パフォーマンスの監視など、データベース管理者の関連タスクも行う場合があります。大規模な企業環境では、タスクを複数のデータベース管理者で分担し、データベース・セキュリティやデータベースのチューニングなど、それぞれが専門のタスクを担当することがあります。

データベースを保護するためのツール

データベース保護という目的を達成するためには、次の製品、ツールおよびユーティリティが必要です。

- Oracle Database 11g リリース2(11.2)Enterprise Edition
Oracle Database 11g Release 2 (11.2) Enterprise Editionは、クラスタ構成およびシングルサーバー構成に企業クラスのパフォーマンス、拡張性、信頼性を提供します。このマニュアルで使用する多くのセキュリティ機能が搭載されています。

- Oracle Enterprise Manager Database Control
Oracle Enterprise Managerは、単一のデータベース・インスタンスまたはクラスタ・データベースに対して管理タスクを実行できるWebアプリケーションです。

- SQL*Plus
SQL*Plusは、SQLおよびPL/SQLコードを作成し、実行できる開発環境です。これはOracle Database 11g Release 2 (11.2)のインストールに含まれます。

- Database Configuration Assistant(DBCA)
Database Configuration Assistantを使用すると、データベースの作成、構成、削除など、データベースの一般的なタスクを実行できます。このマニュアルでは、DBCAを使用してデフォルト監査を有効にします。

- Oracle Net Manager
Oracle Net Managerを使用すると、Oracle Databaseでネットワーク関連のタスクを実行できます。このマニュアルでは、Oracle Net Managerを使用してネットワーク暗号化を設定します。

データベースの保護: ロードマップ

Oracle Databaseの保護についての基本を習得するには、次の手順を実行します。

1. Oracle Databaseのインストール環境と構成を保護します。
第2章「データベースのインストール環境と構成の保護」のタスクを完了して、Oracle Databaseのインストール環境へのアクセスを保護します。

2. サイトに対するユーザー・アカウントを保護します。
ユーザー・アカウントの作成方法を習得する『Oracle Database 2日でデータベース管理者』の内容を踏まえた第3章「Oracle Databaseユーザー・アカウントの保護」のタスクを完了します。ここでは、次の内容を習得できます。

- ユーザー・アカウントを期限切れにする、ロックする、ロックを解除する方法

- セキュアなパスワード選択のガイドライン

- パスワードの変更方法

- パスワード管理の実施方法

3. 権限の動作方法を理解します。
第4章「ユーザー権限の管理」のタスクを完了します。次について学習します。

- 権限の動作方法

- 権限付与を慎重に行う必要がある理由

- データベース・ロールの動作方法

- セキュア・アプリケーション・ロールの作成方法

4. ネットワーク間を移動するデータを保護します。
第5章「ネットワークの保護」のタスクを完了して、クライアント接続の保護方法およびネットワーク暗号化の構成方法を習得します。

5. データへのアクセスを制御します。
第6章「データの保護」のタスクを完了し、次の内容について習得します。

- データベースの表列および表領域を自動的に暗号化するための透過型データ暗号化の使用方法

- Oracle Virtual Private Databaseによるデータ・アクセスの制御方法

- Oracle Label Securityによる行レベルのセキュリティの強制方法

- Oracle Database Vaultを使用した機密データへのシステム管理アクセスの制御方法

6. 監査を設定して、データベース・アクティビティを監視します。
第7章「データベース・アクティビティの監査」のタスクを完了して、標準監査について習得します。

2 データベースのインストール環境と構成の保護

この章の内容は次のとおりです。

- データベースのインストール環境と構成の保護について

- デフォルトのセキュリティ設定の使用

- Oracleデータ・ディクショナリの保護

- Oracle Databaseへのオペレーティング・システム・アクセスの保護のガイドライン

- ランタイム機能への権限付与のガイドライン

- インストール環境と構成のセキュリティに使用される初期化パラメータ

データベースのインストール環境と構成の保護について

Oracle Databaseのインストール後、データベースのインストールおよび構成を保護する必要があります。この章のメソッドは、これを行うために一般的に使用される方法(すべてがデータベース・ファイルの特定の領域に対する権限の制限に関連)を示しています。

Oracle Databaseは、いくつかのオペレーティング・システムで使用できます。Oracle Databaseに関する詳細なプラットフォーム固有情報は、次のマニュアルを参照してください。

- 『Oracle Databaseプラットフォーム・ガイドfor Microsoft Windows』

- 『Oracle Database管理者リファレンス for Linux and UNIX-Based Operating Systems』

- 使用しているプラットフォームの『Oracle Databaseインストレーション・ガイド』

デフォルトのセキュリティ設定の使用

新しいデータベースを作成した場合、Oracle Databaseは次のデフォルトのセキュリティ設定を提供します。

- デフォルトの監査設定を有効にします。詳細は、「セキュリティ関連のSQL文および権限に対するデフォルト監査の使用」を参照してください。

- 新しいパスワードまたは変更したパスワードの厳しい制約を作成します。新しいパスワードの要件については、「パスワードの作成要件」を参照してください。

- PUBLICロールからCREATE EXTERNAL JOB権限を削除します。よりセキュリティを強化するために、CREATE EXTERNAL JOB権限をSYS、データベース管理者、およびこの権限が必要な信頼できるユーザーにのみ付与します。

- セキュリティ関連の初期化パラメータおよびプロファイル・パラメータを設定します。表2-1に、変更されたパラメータ設定を示します。

表2-1 初期化パラメータとプロファイル・パラメータのデフォルトのセキュリティ設定

設定

10g のデフォルト

11g のデフォルト

AUDIT_TRAIL

NONE

DB

O7_DICTIONARY_ACCESSIBILITY

FALSE

FALSE

PASSWORD_GRACE_TIME

UNLIMITED

7

PASSWORD_LOCK_TIME

UNLIMITED

1

FAILED_LOGIN_ATTEMPTS

10

10

PASSWORD_LIFE_TIME

UNLIMITED

180

PASSWORD_REUSE_MAX

UNLIMITED

UNLIMITED

PASSWORD_REUSE_TIME

UNLIMITED

UNLIMITED

REMOTE_OS_ROLES

FALSE

FALSE

注意:
アプリケーションがOracle Database 10g リリース2(10.2)のデフォルトのパスワード・セキュリティ設定を使用している場合、リリース11g のパスワード・セキュリティ設定を使用するようにアプリケーションを変更するまで、Oracle Database 10.2のパスワード・セキュリティ設定に戻すことができます。これには、undopwd.sqlスクリプトを実行します。
リリース 11g のパスワード・セキュリティ設定を使用するようにアプリケーションを変更した後、データベースを手動で更新してビジネスのニーズに適したパスワード・セキュリティ構成にするか、secconf.sqlスクリプトを実行してリリース11gのデフォルトのパスワード設定を適用できます。

undopwd.sqlおよびsecconf.sqlスクリプトは、$ORACLE_HOME/rdbms/adminディレクトリに格納されています。undopwd.sqlスクリプトはパスワード設定にのみ影響し、secconf.sqlスクリプトはパスワード設定と監査設定の両方に影響します。これらのスクリプトは、他のセキュリティ設定には影響しません。

Oracleデータ・ディクショナリの保護

ここでは、データ・ディクショナリを保護する方法を説明します。データ・ディクショナリは、スキーマ定義やデフォルト値など、データベースに関する情報を提供する一連のデータベース表です。

この項の内容は次のとおりです。

- Oracleデータ・ディクショナリについて

- データ・ディクショナリ保護の有効化

Oracleデータ・ディクショナリについて

Oracleデータ・ディクショナリは、データベースに関する情報を提供するデータベース表のセットです。データ・ディクショナリの内容は次のとおりです。

- Oracle Databaseユーザーの名前

- 各ユーザーに付与されている権限とロール

- データベース内のすべてのスキーマ・オブジェクトの定義(表、ビュー、索引、クラスタ、シノニム、順序、プロシージャ、ファンクション、パッケージ、トリガーなど)

- スキーマ・オブジェクトに割り当てられている容量と現在使用されている容量

- 列のデフォルト値

- 整合性制約情報

- 様々なスキーマ・オブジェクトをアクセスまたは更新した人物などの監査情報

- その他の一般的なデータベース情報

ある特定のデータベースのデータ・ディクショナリ表およびビューは、そのデータベースのSYSTEM表領域に格納されます。ある特定のデータベースのデータ・ディクショナリ表およびビューは、すべてユーザーSYSによって所有されます。SYSDBA権限を使用してデータベースに接続すると、データ・ディクショナリに対する完全なアクセス権が許可されます。SYSDBA権限へのアクセスは、パッチ適用やその他の管理操作などの必要な操作のみに限定することをお薦めします。データ・ディクショナリは、すべてのOracle Databaseの中心です。

データ・ディクショナリの内容は、データ・ディクショナリ・ビューを問い合せることで参照できます(各ビューの説明はOracle Databaseリファレンスを参照)。ただし、データ・ディクショナリのすべてのオブジェクトがユーザーに公開されるわけではありません。なお、データ・ディクショナリ・オブジェクトのサブセット(USER_%で始まるオブジェクトなど)は、読取り専用としてすべてのデータベース・ユーザーに公開されます。

例2-1に、DICTIONARYビューを問い合せることでデータ・ディクショナリに固有のデータベース・ビューのリストを検索する方法を示します。

例2-1 データ・ディクショナリに関連するビューの検索

sqlplus system
Enter password: password

SQL> SELECT TABLE_NAME FROM DICTIONARY;

データ・ディクショナリ保護の有効化

O7_DICTIONARY_ACCESSIBILITY初期化パラメータをFALSEに設定することで、データ・ディクショナリを保護できます。このパラメータにより、ANYシステム権限を持つユーザーがデータ・ディクショナリ(SYSスキーマ内のオブジェクト)に対してこれらの権限を使用することを防ぎます。

Oracle Databaseでは非常に細かく権限を設定できます。通常ANY権限と呼ばれる権限は、このような権限の1つであり、一般的にアプリケーション所有者や各データベース管理者にのみ付与されます。たとえば、アプリケーション所有者にDROP ANY TABLE権限を付与する場合があります。07_DICTIONARY_ACCESSIBILITY初期化パラメータを有効または無効に設定することで、ANY権限が偶発的または故意に使用されないように、Oracleデータ・ディクショナリを保護できます。

データ・ディクショナリ保護を有効にするには、次のようにします。

1. Oracle Enterprise Manager Database Control(Database Control)を起動します。
Database Controlを起動する手順については、『Oracle Database 2日でデータベース管理者』を参照してください。

2. SYSとしてログインし、SYSDBA権限で接続します。

- ユーザー名: 管理権限を持つユーザーの名前を入力します。この場合は、SYSと入力します。

- パスワード: SYSユーザーのパスワードを入力します。

- 接続モード: リストから「SYSDBA」を選択します。

Oracle Enterprise Managerのデータベースのホームページ(データベースのホームページ)が表示されます。

3. 「サーバー」をクリックして、「サーバー」サブページを表示します。

4. 「データベース構成」セクションで「初期化パラメータ」をクリックします。
「初期化パラメータ」ページが表示されます。

5. リストで、O7_DICTIONARY_ACCESSIBILITYを検索します。
「名前」フィールドでO7_(Oの文字)を入力し、「実行」をクリックします。パラメータ名の最初の数文字を入力できます。この場合、O7_によってO7_DICTIONARY_ACCESSIBILTYパラメータが表示されます。

パラメータによっては、「SPFile」サブページの値を変更する必要があります。「SPFile」タブをクリックし、「SPFile」サブページを表示します。

6. O7_DICTIONARY_ACCESSIBILTYの値をFALSEに設定します。

7. 「適用」をクリックします。

8. Oracle Databaseインスタンスを再起動します。

1. 「データベース・インスタンス」リンクをクリックします。

2. 「ホーム」をクリックしてDatabase Controlのホームページを表示します。

3. 「一般」で「停止」をクリックします。

4. 資格証明の起動/停止ページでは、資格証明を入力します。
詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

5. 完全に停止した後に、「起動」をクリックします。

注意:

- デフォルトのインストールでは、O7_DICTIONARY_ACCESSIBILITYパラメータはFALSEに設定されます。

- SELECT ANY DICTIONARY権限は、GRANT ALL PRIVILEGES文には含まれませんが、ロールを使用して付与できます。ロールについては、「ユーザーへのロール付与のガイドライン」および 『Oracle Database 2日でデータベース管理者』を参照してください。

Oracle Databaseへのオペレーティング・システム・アクセスの保護のガイドライン

次のガイドラインに従うことにより、オペレーティング・システム・レベルでOracle Databaseへのアクセスを保護できます。

- オペレーティング・システム・ユーザーの数を制限します。

- Oracle Databaseホスト(物理コンピュータ)上のオペレーティング・システム・アカウントの権限(管理、root権限またはDBA)を制限します。ユーザーには、そのタスクの実行に必要な、最低限の権限のみを付与します。

- Oracle Databaseホーム(インストール)・ディレクトリおよびそのコンテンツの、デフォルトのファイルおよびディレクトリの権限を変更する権限を制限します。認可されたオペレーティング・システム・ユーザーやOracle所有者でも、オラクル社からの指示がないかぎり、これらの権限を変更してはいけません。

- シンボリック・リンクを制限します。データベースへのパスやファイルを作成するときに、ファイルおよびパスのいずれの部分も、信頼できないユーザーにより変更可能ではないことを確認します。ファイルおよびパスのすべてのコンポーネントは、データベース管理者またはrootなどの信頼できるアカウントにより所有されている必要があります。
この推奨は、データ・ファイル、ログ・ファイル、トレース・ファイル、外部表、BFILEなど、すべてのタイプのファイルに適用されます。

ランタイム機能への権限付与のガイドライン

多くのOracle Database製品は、Oracle Java Virtual Machine(OJVM)などのランタイム機能を使用します。データベース・ランタイム機能には、すべての権限を割り当てないでください。かわりに、データベースの外部でファイルおよびパッケージを実行する可能性のある機能の明示的なドキュメント・ルート・ファイル・パスに特定の権限を付与します。

次に、個々のファイル(太字)を指定した脆弱なランタイム・コールの例を示します。

call dbms_java.grant_permission('wsmith',
'SYS:java.io.FilePermission','filename','read');

次に、ディレクトリ・パス(太字)を指定して、ディレクトリ内のすべてのファイルを保護する、より適切な(よりセキュアな)ランタイム・コールの例を示します。

call dbms_java.grant_permission('wsmith',
'SYS:java.io.FilePermission','directory_path','read');

インストール環境と構成のセキュリティに使用される初期化パラメータ

表2-2 に、Oracle Databaseのインストール環境と構成を保護するために設定する初期化パラメータを示します。

表2-2 インストール環境と構成のセキュリティに使用される初期化パラメータ

初期化パラメータ

デフォルト設定

説明

SEC_RETURN_SERVER_RELEASE_BANNER

FALSE

リリース番号など、クライアント接続での製品バージョン情報の表示を制御します。侵入者は、データベース・リリース番号を使用して、データベース・ソフトウェアに存在するセキュリティ脆弱性に関する情報を検索できる場合があります。このパラメータを設定することで、詳細な製品バージョンの表示を有効または無効にできます。

このパラメータおよび類似パラメータの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。このパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

O7_DICTIONARY_ACCESSIBILITY

FALSE

SYSTEM権限に対する制限を制御します。このパラメータの詳細は、「データ・ディクショナリ保護の有効化」を参照してください。Oracle Databaseリファレンスでは、このパラメータについて詳細に説明しています。

関連項目:
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

初期化パラメータ値の変更

ここでは、Database Controlを使用して初期化パラメータの値を変更する方法を説明します。使用可能な初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

初期化パラメータ値を変更するには、次のようにします。

1. Database Controlを起動します。

2. SYSDBA権限を持つユーザーSYSとしてログインします。

- ユーザー名: SYS

- パスワード: パスワードを入力します。

- 接続モード: SYSDBA

3. 「サーバー」をクリックして、「サーバー」サブページを表示します。

4. 「データベース構成」セクションで「初期化パラメータ」をクリックします。
「初期化パラメータ」ページが表示されます。

5. 「名前」フィールドに、変更するパラメータの名前を入力し、「実行」をクリックします。
たとえば、SEC_RETURN_SERVER_RELEASE_NUMBERパラメータを検索する場合は、SEC_RETURNと入力します。または、パラメータのリストを下にスクロールして、変更するパラメータを検索できます。

パラメータによっては、「SPFile」サブページの値を変更する必要があります。「SPFile」タブをクリックし、「SPFile」サブページを表示します。

6. 「値」フィールドで、新しい値を入力するか、リストが存在する場合はリストから選択します。

7. 「適用」をクリックします。

8. パラメータが静的な場合は、Oracle Databaseインスタンスを再起動します。
初期化パラメータが静的かどうかを調べるには、『Oracle Databaseリファレンス』の説明を確認してください。サマリー表の変更可能設定が「いいえ」の場合は、データベース・インスタンスを再起動する必要があります。

1. 「データベース・インスタンス」リンクをクリックします。

2. 「ホーム」をクリックしてDatabase Controlのホームページを表示します。

3. 「一般」で「停止」をクリックします。

4. 資格証明の起動/停止ページでは、資格証明を入力します。
詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

5. 完全に停止した後に、「起動」をクリックします。

3 Oracle Databaseユーザー・アカウントの保護

この章の内容は次のとおりです。

- Oracle Databaseユーザー・アカウントの保護について

- Oracle Databaseから提供される事前定義されるユーザー・アカウント

- データベース・アカウントの期限切れおよびロック

- パスワードの作成要件

- デフォルト・パスワードの検索および変更

- デフォルト管理ユーザー・パスワードの処理のガイドライン

- パスワード管理の強制のガイドライン

- ユーザー・アカウントの保護に使用されるパラメータ

関連項目:
ユーザー・アカウントの保護の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

Oracle Databaseユーザー・アカウントの保護について

多くの方法を使用してデータベース・ユーザー・アカウントを保護できます。たとえば、Oracle Databaseには、パスワードに対する一連の組込み保護があります。この章では、デフォルトのデータベース・アカウントとパスワードを保護する方法およびデータベース・アカウントの管理方法について説明します。

『Oracle Database 2日でデータベース管理者』では、ユーザー・アカウントの作成および管理の基礎(ユーザー・ロールの管理方法、管理アカウントの概要、パスワード・ポリシーの作成におけるプロファイルの使用方法など)について説明します。

ユーザー・アカウントを作成した後で、この項の手順を使用し、次の方法に従ってこれらのアカウントをより強力に保護できます。

- 事前定義データベース・アカウントの保護。Oracle Databaseのインストール時に、事前定義済のアカウントが作成されます。パスワードを変更することで、これらのアカウントをできるだけ早く保護する必要があります。同じ方法を使用して、通常のユーザー・アカウント、管理アカウント、事前定義のアカウントのいずれであるかにかかわらず、すべてのパスワードを変更できます。このマニュアルでは、最もセキュアなパスワードを作成する方法のガイドラインも示します。

- データベース・アカウントの管理。データベース・アカウントを期限切れにしたり、ロックできます。

- パスワードの管理。初期化パラメータを設定することで、パスワードを管理および保護できます。初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

関連項目:

- ユーザー・アカウントおよび認証の管理の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- Oracle Databaseのインストール時に作成される事前定義のユーザー・アカウントの詳細は、「Oracle Databaseから提供される事前定義されるユーザー・アカウント」を参照してください。

Oracle Databaseから提供される事前定義されるユーザー・アカウント

Oracle Databaseをインストールすると、インストール・プロセスにより事前定義されたアカウントのセットが作成されます。これらのアカウントは次のカテゴリにあります。

- 事前定義された管理アカウント

- 事前定義された非管理ユーザー・アカウント

- 事前定義されたサンプル・スキーマ・ユーザー・アカウント

事前定義された管理アカウント

Oracle Databaseのデフォルトのインストールで、事前定義された管理アカウントのセットが提供されます。これらのアカウントには、SYSスキーマが所有するパッケージのEXECUTE権限、CREATE ANY TABLE権限、またはALTER SESSIONのような、データベースの領域の管理に必要となる特別な権限を持ちます。管理アカウントのデフォルトの表領域は、SYSTEMかSYSAUXです。

これらのアカウントを無許可アクセスから保護するため、インストール・プロセスにより表3-1に示されたアカウントを除く、ほとんどのアカウントが期限切れにされ、ロックされます。データベース管理者は、「データベース・アカウントの期限切れおよびロック」で説明されているとおりにアカウントのロックを解除し、リセットする責任があります。

表3-1に、Oracle Databaseで提供される管理ユーザー・アカウントを示します。

表3-1 事前定義されたOracle Databaseの管理ユーザー・アカウント

ユーザー・アカウント

説明

インストール後のステータス

ANONYMOUS

Oracle XML DBへのHTTPアクセスを許可するアカウント。EPG (Embedded PL/SQL Gateway)をデータベースにインストールするときにAPEX_PUBLIC_USERアカウントのかわりに使用されます。

EPGはOracle Databaseとともに使用されるWebサーバーです。動的アプリケーションの作成に必要なインフラストラクチャを提供します。

期限切れおよびロック済

CTXSYS

Oracle Textを管理するためのアカウント。Oracle Textを使用すると、テキスト問合せアプリケーションおよびドキュメント分類アプリケーションを作成できます。Oracle Textは、テキスト用の索引付け、語とテーマの検索および表示機能を提供します。

『Oracle Textアプリケーション開発者ガイド』を参照してください。

期限切れおよびロック済

DBSNMP

データベースの監視および管理を行うためにOracle Enterprise ManagerのManagement Agentのコンポーネントによって使用されるアカウント。

『Oracle Enterprise Manager Grid Controlインストレーションおよび基本構成』を参照してください。

オープン

パスワードはインストール時またはデータベースの作成時に作成されます。

EXFSYS

Rules Manager機能およびExpression Filter機能と関連付けられるEXFSYSスキーマにアクセスするために内部で使用されるアカウント。この機能により複雑なPL/SQLのルールおよび表現を構築できます。EXFSYSにはRules ManagerやExpression FilterのDDL、DML、および関連するメタデータが含まれています。

『Oracle Database Rules ManagerおよびExpression Filter開発者ガイド』を参照してください。

期限切れおよびロック済

LBACSYS

Oracle Label Security (OLS)を管理するためのアカウント。Label Securityオプションをインストールするときのみ作成されます。

「Oracle Label Securityによる行レベルのセキュリティの強制」および『Oracle Label Security管理者ガイド』を参照してください。

期限切れおよびロック済

MDSYS

Oracle SpatialおよびOracle Multimedia Locator管理者アカウント。

『Oracle Spatial開発者ガイド』を参照してください。

期限切れおよびロック済

MGMT_VIEW

Oracle Enterprise Manager Database Controlで使用されるアカウント。

オープン

パスワードはインストール時またはデータベースの作成時にランダムに生成されます。ユーザーがこのパスワードを知る必要はありません。

OLAPSYS

OLAPカタログ(CWMLite)を所有するアカウント。このアカウントは、非推奨となりましたが、下位互換性のために保持されています。

期限切れおよびロック済

ORDDATA

このアカウントにはOracle Multimedia DICOMのデータ・モデルが含まれています。詳細はOracle Multimedia DICOM開発者ガイドを参照してください。

期限切れおよびロック済

OWBSYS

Oracle Warehouse Builderのリポジトリを管理するためのアカウント。

インストール中にこのアカウントにアクセスし、リポジトリのベース言語を定義し、Warehouse Builderの作業領域とユーザーを定義します。データ・ウェアハウスは問合せおよび分析のために設計されたリレーショナル・データベースまたは多次元データベースです。

『Oracle Warehouse Builderインストレーションおよび管理ガイド』を参照してください。

期限切れおよびロック済

ORDPLUGINS

Oracle Multimediaユーザー。Oracleおよびサード・パーティにより提供されたプラグイン(フォーマット・プラグイン)はこのスキーマにインストールされています。

Oracle MultimediaによりOracle Databaseで画像、音声、動画、DICOMフォーマットの医療用画像などのオブジェクトや、その他の企業情報と統合された異機種間のメディア・データを格納、管理および取得できます。

『Oracle Multimediaユーザーズ・ガイド』および『Oracle Multimediaリファレンス』を参照してください。

期限切れおよびロック済

ORDSYS

Oracle Multimedia管理者アカウント。

『Oracle Multimediaユーザーズ・ガイド』、『Oracle Multimediaリファレンス』および『Oracle Multimedia DICOM開発者ガイド』を参照してください。

期限切れおよびロック済

OUTLN

プラン・スタビリティをサポートするアカウント。プラン・スタビリティにより、ストアド・アウトラインに実行プランが保存され、特定のデータベースの環境の変更がアプリケーションのパフォーマンス特性に影響するのを防ぎます。OUTLNは、ストアド・アウトラインに関連付けられたメタデータを集中管理するロールを実行します。

『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

期限切れおよびロック済

SI_INFORMTN_SCHEMA

SQL/MM Still Image Standard向けの情報ビューを保存しているアカウント。

『Oracle Multimediaユーザーズ・ガイド』および『Oracle Multimediaリファレンス』を参照してください。

期限切れおよびロック済

SYS

データベース管理タスクの実行に使用されるアカウント。

『Oracle Database 2日でデータベース管理者』を参照してください。

オープン

パスワードはインストール時またはデータベースの作成時に作成されます。

SYSMAN

Oracle Enterprise Managerデータベースの管理タスクの実行に使用するアカウント。SYSおよびSYSTEMのアカウントでもこれらのタスクを実行できます。

『Oracle Enterprise Manager Grid Controlインストレーションおよび基本構成』を参照してください。

オープン

パスワードはインストール時またはデータベースの作成時に作成されます。

SYSTEM

Oracle Databaseのデフォルトの汎用データベース管理者アカウント。

本番システムでは、データベース管理操作用に汎用SYSTEMアカウントを使用せずに、個々のデータベース管理者アカウントを作成することをお薦めします。

『Oracle Database 2日でデータベース管理者』を参照してください。

オープン

パスワードはインストール時またはデータベースの作成時に作成されます。

WK_TEST

デフォルトのインスタンス(WK_INST)のインスタンス管理者。このアカウントのロックを解除し、このユーザーにパスワードを割り当ててから、管理ツールの「インスタンスの編集」ページを使用して、キャッシュ済のスキーマ・パスワードを更新する必要があります。

Ultra Searchは、Oracle Database、その他のODBC準拠のデータベース、IMAPメール・サーバー、Webサーバーで管理されるHTMLドキュメント、ディスク上のファイルなどの複数のリポジトリに対する統一された検索機能および位置特定機能を提供します。

『Oracle Ultra Search管理者ガイド』を参照してください。

期限切れおよびロック済

WKSYS

Ultra Searchデータベースのスーパーユーザー。WKSYSはスーパーユーザー権限をWK_TESTなどの他のユーザーに付与できます。すべてのOracle Ultra Searchデータベース・オブジェクトは、WKSYSスキーマにインストールされます。

『Oracle Ultra Search管理者ガイド』を参照してください。

期限切れおよびロック済

WKPROXY

Oracle9i Application Server Ultra Searchの管理アカウント。

『Oracle Ultra Search管理者ガイド』を参照してください。

期限切れおよびロック済

WMSYS

Oracle Workspace Managerのメタデータ情報の格納に使用されるアカウント。

『Oracle Database Workspace Manager開発者ガイド』を参照してください。

期限切れおよびロック済

XDB

Oracle XML DBデータおよびメタデータの保存に使用されるアカウント。

Oracle XML DBはOracle Databaseのデータに対し、パフォーマンスの高いXMLの格納および取得を提供します。

『Oracle XML DB開発者ガイド』を参照してください。

期限切れおよびロック済

注意:
Oracle Automatic Storage Management (Oracle ASM)インスタンスを作成すると、ASMSNMPアカウントが作成されます。Oracle Enterprise Managerはこのアカウントを使用して、ASMインスタンスを監視し、ASM関連のデータ・ディクショナリ・ビューからデータを取得します。ASMSNMPアカウントのステータスはアカウントの作成時にOPENに設定され、SYSDBA権限が付与されます。詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

事前定義された非管理ユーザー・アカウント

表3-2には、Oracle Databaseをインストールするときに作成されるデフォルトの非管理ユーザー・アカウントがリストされています。非管理ユーザー・アカウントはジョブの実行に最低限必要な権限のみ所有します。デフォルトの表領域はUSERSです。

これらのアカウントを無許可アクセスから保護するため、インストール・プロセスにより表3-2に示されたアカウントを除く、ほとんどのアカウントがインストール後すぐにロックされ、期限切れになります。データベース管理者は、「データベース・アカウントの期限切れおよびロック」で説明されているとおりにアカウントのロックを解除し、リセットする責任があります。

表3-2 事前定義されたOracle Databaseの非管理ユーザー・アカウント

ユーザー・アカウント

説明

インストール後のステータス

APEX_PUBLIC_USER

Oracle Database Application Expressのアカウント。このアカウントはデータベース・アクセス記述子(DAD)でデータベースに接続するために使用するOracleのスキーマの指定に使用します。

Oracle Application ExpressはOracle Database用の迅速なWebアプリケーション開発ツールです。

『Oracle Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド』を参照してください。

期限切れおよびロック済

DIP

Oracle Label SecurityとともにインストールされるOracle Directory Integration and Provisioning(DIP)のアカウント。このプロファイルはOracle Internet Directoryが有効なOracle Label Securityのインストール・プロセスの一部として自動的に作成されます。

『Oracle Label Security管理者ガイド』を参照してください。

期限切れおよびロック済

FLOWS_040100

Oracle Database Application Expressのインストール中に作成されるほとんどのデータベース・オブジェクトを所有するアカウント。オブジェクトには、表、ビュー、トリガー、索引、パッケージなどが含まれます。

『Oracle Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド』を参照してください。

期限切れおよびロック済

FLOWS_FILES

ファイルのアップロードやダウンロードなどmodplsqlのドキュメント転送に関連するOracle Database Applicationのインストール中に作成されるデータベース・オブジェクトを所有するアカウント。オブジェクトには、表、ビュー、トリガー、索引、パッケージなどが含まれます。

『Oracle Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド』を参照してください。

期限切れおよびロック済

MDDATA

格納されるジオコーダおよびルーターのデータ用にOracle Spatialに使用されるスキーマ。

Oracle SpatialはSQLスキーマおよびファンクションを提供し、これによりOracle DatabaseのSpatial機能の格納、取得、更新、問合せができます。

『Oracle Spatial開発者ガイド』を参照してください。

期限切れおよびロック済

ORACLE_OCM

Oracle Configuration Managerと使用するアカウント。この機能により現在のOracle Databaseインスタンスの構成情報をMy Oracle Supportと関連付けることができます。サービス・リクエストを記録すると、データベース・インスタンスの構成情報と関連付けられます。

使用しているプラットフォームの『Oracle Databaseインストレーション・ガイド』を参照してください。

期限切れおよびロック済

SPATIAL_CSW_ADMIN_USR

Catalog Services for the Web(CSW)のアカウントです。このアカウントはOracle Spatial CSW Cache Managerにより、データベースからすべてのレコード・タイプのメタデータとレコード・インスタンスを、キャッシュされたレコード・タイプのメイン・メモリーにロードするために使用されます。

『Oracle Spatial開発者ガイド』を参照してください。

期限切れおよびロック済

SPATIAL_WFS_ADMIN_USR

Web Feature Service(WFS)のアカウントです。このアカウントはOracle Spatial WFS Cache Managerにより、データベースからすべての機能タイプのメタデータと機能インスタンスを、キャッシュされた機能タイプのメイン・メモリーにロードするために使用されます。

『Oracle Spatial開発者ガイド』を参照してください。

期限切れおよびロック済

XS$NULL

セッション内にユーザーが存在しないことを表す内部アカウント。XS$NULLは、ユーザーではないため、Oracle Databaseインスタンスによってのみアクセスできます。XS$NULLには権限がなく、XS$NULLとして認証したり、XS$NULLに認証資格証明を割り当てることはできません。

期限切れおよびロック済

事前定義されたサンプル・スキーマ・ユーザー・アカウント

このガイドの例を完了するために必要となるサンプル・スキーマをインストールすると、Oracle Databaseはサンプル・ユーザー・アカウントのセットを作成します。サンプル・スキーマ・ユーザー・アカウントはすべて非管理アカウントで、表領域は USERS です。

これらのアカウントを無許可アクセスから保護するため、インストール・プロセスによりこれらのアカウントがインストール直後にロックされ、期限切れになります。データベース管理者は、「データベース・アカウントの期限切れおよびロック」で説明されているとおりにアカウントのロックを解除し、リセットする責任があります。サンプル・スキーマ・アカウントの詳細は『Oracle Databaseサンプル・スキーマ』を参照してください。

表3-3には様々な製品を製造している架空の企業の個別の部門を表すサンプル・スキーマ・ユーザー・アカウントがリストされています。

表3-3 デフォルトのサンプル・スキーマ・ユーザー・アカウント

ユーザー・アカウント

説明

インストール後のステータス

BI

Oracleサンプル・スキーマに含まれているBI(Business Intelligence)スキーマを所有するアカウント。

関連項目: 『Oracle Warehouse Builderソースおよびターゲット・ガイド』

期限切れおよびロック済

HR

HR(Human Resources)スキーマを管理するためのアカウント。このスキーマには企業の従業員および施設に関する情報が格納されます。

期限切れおよびロック済

OE

OE(Order Entry)スキーマを管理するためのアカウント。このスキーマには製品のインベントリや、様々なチャネルによる製品の売上が格納されます。

期限切れおよびロック済

PM

PM(Product Media)スキーマを管理するためのアカウント。このスキーマには企業が販売した各製品の説明と詳細情報が含まれます。

期限切れおよびロック済

IX

IX(Information Exchange)スキーマを管理するためのアカウント。このスキーマによりB2B(Business-to-Business)アプリケーションを介した発送が管理されます。

期限切れおよびロック済

SH

SH(Sales)スキーマを管理するためのアカウント。このスキーマにはビジネス上の決断を容易にするビジネス戦略が格納されます。

期限切れおよびロック済

サンプル・スキーマ・アカウントに加えて、Oracle Databaseでは別のサンプル・スキーマ・アカウント(SCOTT)が提供されます。SCOTTスキーマには、表EMP、DEPT、SALGRADEおよびBONUSが含まれています。SCOTTアカウントはOracle Databaseのドキュメント・セット全体の例で使用されます。Oracle Databaseをインストールすると、SCOTTアカウントはロックされ、期限が切れます。

データベース・アカウントの期限切れおよびロック

ユーザーのパスワードを期限切れにすると、パスワードは存在しなくなります。パスワードを期限切れにしない場合は、そのアカウントのパスワードを変更します。アカウントをロックすると、他のアカウント情報と同じようにユーザー・パスワードも保持されますが、そのアカウントを使用してデータベースにログインするユーザーに対してアカウントが使用不可になります。ロックを解除すると、アカウントは再度使用可能になります。

Database Controlを使用してデータベース・アカウントのロックを解除する方法については、『Oracle Database 2日でデータベース管理者』を参照してください。また、Database Controlを使用して、データベース・アカウントを期限切れにしたり、ロックすることもできます。

データベース・アカウントの期限切れおよびロックを実行するには、次のようにします。

1. Database Controlを起動します。
Database Controlを起動する手順については、『Oracle Database 2日でデータベース管理者』を参照してください。

2. 管理者権限を使用してログインします。
次に例を示します。

データベースのホームページが表示されます。

3. 「サーバー」をクリックして、「サーバー」サブページを表示します。

4. 「セキュリティ」セクションで「ユーザー」をクリックします。
「ユーザー」ページに、現行のデータベース・インスタンスで作成されたユーザー・アカウントが表示されます。「アカウント・ステータス」列は、アカウントが期限切れか、ロックされているか、オープンかを表します。

5. 「選択」列で期限切れにするアカウントを選択し、「編集」をクリックします。
「ユーザーの編集」ページが表示されます。

6. 次のいずれかの操作を行います。

- パスワードを期限切れにするには、「期限切れパスワード」をクリックします。
パスワードが期限切れにならないようにするには、「パスワードの入力」および「パスワードの確認」フィールドに新しいパスワードを入力します。パスワードの要件については、「パスワードの作成要件」を参照してください。

- アカウントをロックするには、「ロック」を選択します。

7. 「適用」をクリックします。

パスワードの作成要件

ユーザー・アカウントを作成すると、Oracle Databaseによって、そのユーザーのデフォルトのパスワード・ポリシーが割り当てられます。パスワード・ポリシーは、最低文字数や有効期限など、パスワードの作成方法に関するルールを定義します。パスワード・ポリシーを使用してパスワードを強化できます。

セキュリティを考慮して、パスワードを作成する際は、次のガイドラインに従います。

- パスワードは12から30文字の英数字で指定します。

- パスワードには、大/小文字と特殊文字を混在させて使用します。(詳細は、Oracle Databaseセキュリティ・ガイドを参照)。

- パスワードの文字には、データベースのキャラクタ・セットを使用します。これには、アンダースコア(_)、ドル記号($)およびシャープ記号(#)の文字を含めることができます。

- 実在する単語をパスワードに使用しないでください。

パスワードをさらにセキュアなものにする方法については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

関連項目:

- ユーザー・パスワードの変更の詳細は、「デフォルト・パスワードの検索および変更」を参照してください。

- アカウントのロックおよびパスワードの期限切れの詳細は、「データベース・アカウントの期限切れおよびロック」を参照してください。

- Oracle Databaseのインストール時に作成される事前定義のユーザー・アカウントの詳細は、「Oracle Databaseから提供される事前定義されるユーザー・アカウント」を参照してください。

- パスワード・ポリシーの概要は、『Oracle Database 2日でデータベース管理者』を参照してください。

- パスワードの管理の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

デフォルト・パスワードの検索および変更

Oracle Databaseをインストールする場合、管理アカウントを含むデフォルトのデータベース・ユーザー・アカウントがデフォルトのパスワードなしで作成されます。インストール中にパスワードを作成した管理者アカウント(ユーザーSYSなど)を除き、デフォルトのユーザー・アカウントはパスワードが期限切れになっており、ロックされています。以前のリリースのOracle Databaseからアップグレードした場合は、デフォルトのパスワードを持つデータベース・アカウントが存在する可能性があります。これらは、データベースの作成時に作成されるデフォルトのアカウント(HR、OE、SCOTTなど)です。

セキュリティは、デフォルトのデータベース・ユーザー・アカウントがインストール後もデフォルト・パスワードを使用していると、最も容易に危険にさらされます。ユーザー・アカウントSCOTTはよく知られているアカウントで侵入されやすい可能性があるため、これが特に当てはまります。デフォルト・パスワードが使用されているアカウントを検索してから、そのパスワードを変更します。

デフォルト・パスワードを検索して変更するには、次のようにします。

1. 管理者権限を使用してSQL*Plusにログインします。

sqlplus system
Enter password: password

2. DBA_USERS_WITH_DEFPWDデータ・ディクショナリ・ビューから選択します。

SELECT * FROM DBA_USERS_WITH_DEFPWD;

DBA_USERS_WITH_DEFPWDには、ユーザー・デフォルト・パスワードを持つアカウントが表示されます。次に例を示します。

USERNAME
------------
SCOTT

3. DBA_USERS_WITH_DEFPWDデータ・ディクショナリ・ビューに表示されたアカウントのパスワードを変更します。
たとえば、ユーザーSCOTTのパスワードを変更するには、次のように入力します。

PASSWORD SCOTT
Changing password for SCOTT
New password: password
Retype new password: password
Password changed

「パスワードの作成要件」に示されているガイドラインに従って、passwordをセキュアなパスワードに置き換えます。セキュリティを考慮して、以前のリリースのOracle Databaseで使用していたパスワードと同じパスワードは再利用しないでください。

また、パスワードは、ALTER USER SQL文を使用して変更することもできます。

ALTER USER SCOTT IDENTIFIED BY password;

管理権限がある場合は、Database Controlを使用して、(デフォルトのユーザー・アカウントのパスワードのみでなく)ユーザー・アカウントのパスワードを変更できます。個々のユーザーがDatabase Controlを使用して自分のパスワードを変更することもできます。

Database Controlを使用してデータベース・アカウントのパスワードを変更するには、次のようにします。

1. Database Controlを起動します。
Database Controlを起動する手順については、『Oracle Database 2日でデータベース管理者』を参照してください。

2. 管理者のユーザー名とパスワード(SYSTEMなど)を入力し、「ログイン」をクリックします。

3. 「サーバー」をクリックして、「サーバー」サブページを表示します。

4. 「セキュリティ」セクションで「ユーザー」をクリックします。
「ユーザー」ページに、現行のデータベース・インスタンスで作成されたユーザー・アカウントが表示されます。「アカウント・ステータス」列は、アカウントが期限切れか、ロックされているか、オープンかを表します。

5. 「選択」列で変更するアカウントを選択し、「編集」をクリックします。
「ユーザーの編集」ページが表示されます。

6. 「パスワードの入力」および「パスワードの確認」フィールドに新しいパスワードを入力します。

7. 「適用」をクリックします。

関連項目:

- パスワード保護を設定する他の方法については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- 「Oracle Databaseから提供される事前定義されるユーザー・アカウント」

デフォルト管理ユーザー・パスワードの処理のガイドライン

SYS、SYSTEM、SYSMAN、DBSNMP管理アカウントでは、同じパスワードを使用することも異なるパスワードを使用することもできます。それぞれに対して異なるパスワードを使用することをお薦めします。どのようなOracle Database環境(本番環境もしくはテスト環境)でも、これらの管理者アカウントには強力でセキュアな固有のパスワードを割り当ててください。Database Configuration Assistantを使用して新規データベースを作成する場合は、SYSアカウントおよびSYSTEMアカウントに対してパスワードを作成する必要があります。

SYSMANおよびDBSNMPを含むすべての管理者アカウントでデフォルト・パスワードは使用しないでください。Oracle Database 11g リリース2(11.2)以上では、デフォルト・パスワードを持つこれらのアカウントはインストールされませんが、以前のリリースのOracle Databaseからアップグレードした場合、デフォルト・パスワードを使用するアカウントが存在している可能性があります。これらのアカウントは、「デフォルト・パスワードの検索および変更」の手順を使用して検索および変更する必要があります。

データベース作成の最後に、Database Configuration Assistantにより、SYSおよびSYSTEMユーザー・アカウントの新しいパスワードの入力および確認を要求するページが表示されます。

管理ユーザー・パスワードは、インストール後にDatabase Controlを使用して変更できます。パスワード変更の詳細は、「デフォルト・パスワードの検索および変更」を参照してください。

パスワード管理の強制のガイドライン

すべてのユーザー・パスワードに基本的なパスワード管理ルール(パスワードの長さ、履歴、複雑度など)を適用します。Oracle Databaseでは、デフォルト・プロファイルでパスワード・ポリシーが有効になります。パスワード・ポリシーを作成するためのガイドラインについては、「パスワードの作成要件」を参照してください。パスワードの管理を実行するために設定する初期化パラメータについては、表3-4を参照してください。

DBA_USERSビューを問い合せることで、ユーザー・アカウントに関する情報を検索できます。DBA_USERSビューでは、ユーザー・アカウント・ステータス、アカウントがロックされているかどうか、パスワードのバージョンなど、有用な情報が提供されます。DBA_USERSは次のように問い合せることができます。

sqlplus system
Enter password: password

SQL> SELECT * FROM DBA_USERS;

また、可能な場合は、ネットワーク認証サービス(Kerberosなど)、トークン・カード、スマート・カードあるいはX.509証明書とともに、Oracle Advanced Security(Oracle Database Enterprise Editionのオプション)を使用することをお薦めします。これらのサービスはユーザーの厳密な認証を可能にし、Oracle Databaseへの無許可アクセスに対してより強力な保護を実現します。

関連項目:

- パスワードの管理の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- ユーザーおよびプロファイルに関する情報を検索するために問い合せることができる追加のビューについては、『Oracle Databaseセキュリティ・ガイド』を参照してください。

ユーザー・アカウントの保護に使用されるパラメータ

表3-4に、ユーザー・アカウントを保護するために設定する初期化パラメータおよびプロファイル・パラメータを示します。

表3-4 ユーザー・アカウント・セキュリティに使用される初期化パラメータおよびプロファイル・パラメータ

パラメータ

デフォルト設定

説明

SEC_CASE_SENSITIVE_LOGON

TRUE

パスワードの大文字と小文字の区別を管理します。TRUEで大文字と小文字の区別が有効になります。FALSEで区別が無効になります。

SEC_MAX_FAILED_LOGIN_ATTEMPTS

デフォルト設定なし

Oracle Call Interface(OCI)アプリケーションへの接続時にユーザーが失敗できる最大の回数を設定します。

FAILED_LOGIN_ATTEMPTS

10

ユーザー・ログインが何度も失敗した場合に、アカウントがロックされるまでの最大の回数を設定します。

注意: SEC_MAX_FAILED_LOGIN_ATTEMPTS初期化パラメータを使用して、権限のないユーザー(おそらく侵入者)がOracle Call Interfaceアプリケーションへのログインを試行する最大回数の制限も設定できます。

PASSWORD_GRACE_TIME

7

パスワードが期限切れになる前に、パスワードを変更する猶予期間の日数を設定します。

PASSWORD_LIFE_TIME

180

現行のパスワードを使用できる日数を設定します。

PASSWORD_LOCK_TIME

1

ログインが指定回数以上失敗した場合にユーザー・アカウントをロックする日数を設定します。

PASSWORD_REUSE_MAX

UNLIMITED

現行のパスワードの再使用が許可されるまでに必要なパスワードの変更回数を指定します。

PASSWORD_REUSE_TIME

UNLIMITED

パスワードの再使用が許可される日数を指定します。

注意:
これらのパラメータのほとんどは、ユーザー・プロファイルを作成するために使用できます。ユーザー・プロファイル設定の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

初期化パラメータを変更するには、「初期化パラメータ値の変更」を参照してください。初期化パラメータの詳細は、『Oracle Databaseリファレンス』および『Oracle Database管理者ガイド』を参照してください。

4 ユーザー権限の管理

この章の内容は次のとおりです。

- 権限管理について

- 権限付与のガイドライン

- ユーザーへのロール付与のガイドライン

- PUBLICロールの権限処理のガイドライン

- セキュア・アプリケーション・ロールによるアプリケーション・アクセスの制御

- 権限セキュリティに使用される初期化パラメータ

関連項目:

- 『Oracle Databaseセキュリティ・ガイド』

- 『Oracle Label Security管理者ガイド』

権限管理について

ユーザー権限は、次のように制御できます。

- 個々の権限の付与および取消し。UPDATE SQL文を実行する権限など、個々の権限を個々のユーザーまたはユーザーのグループに付与できます。

- ロールの作成と権限の割当て。ロールは、ユーザーまたは他のロールに一括で付与する関連権限の名前付きグループです。

- セキュア・アプリケーション・ロールの作成。セキュア・アプリケーション・ロールを使用すると、データベース・ロールを有効にできるタイミングを制御する条件を定義できます。たとえば、セキュア・アプリケーション・ロールを使用すると、ユーザー・セッションでデータベース・ロールを有効にするのを許可する前に、そのセッションに関連するIPアドレスをチェックできます。

権限付与のガイドライン

権限は、表の更新や削除などの特定のアクションを実行する権利であるため、データベース・ユーザーに必要以上の権限は付与しないでください。権限の管理の概要は、『Oracle Database 2日でデータベース管理者』の「ユーザー権限とロールについて」を参照してください。『Oracle Database 2日でデータベース管理者』では、権限を付与する方法の例も示されています。

つまり、最小権限の原則とは、ユーザーに、効率的かつ簡潔に作業を行うために実際に必要な権限のみを与えることです。最小権限の原則を実践するために、次の制限を可能なかぎり行ってください。

- データベース・ユーザーに付与するシステム権限およびオブジェクト権限の数

- データベースにSYS権限で接続するユーザーの数

たとえば、通常、CREATE ANY TABLE権限はデータベース管理者権限を持っていないユーザーには付与されません。

ユーザーへのロール付与のガイドライン

ロールは、ユーザーまたは他のロールに一括して付与する関連権限の名前付きグループです。ロールの管理の基礎については、『Oracle Database 2日でデータベース管理者』の「ロールの管理」を参照してください。『Oracle Database 2日でデータベース管理者』の「例: ロールの作成」も参照してください。

ロールは、複数のユーザーに権限を迅速かつ簡単に付与するために役立ちます。Oracle Databaseで定義されているロールを使用することもできますが、必要な権限のみを含む独自のロールを作成すると、より継続的な制御が可能になります。Oracle Databaseで定義済のCONNECTロールの権限は変更または削除される可能性がありますが、このロールには現在、CREATE SESSION権限しかありません。以前は他に8個の権限がありました。

定義したロールに含まれる権限が、特定の職務に必要な権限のみであることを確認します。アプリケーション・ユーザーが既存のロールに組み込まれている権限のすべては必要としていない場合は、適切な権限のみを含む異なるロールのセットを適用してください。または、権限をさらに制限するロールを作成して割り当てます。

ユーザーSCOTTなどの通常のユーザーには、CREATE DATABASE LINK権限などの強力な権限は付与しないでください。(SCOTTはよく知られているデフォルトのユーザー・アカウントで、侵入されやすい可能性があるため、特にこのユーザーにはいずれの強力な権限も付与しないでください。)かわりに、データベース・ロールに権限を付与してから、その権限を使用する必要があるユーザーにそのロールを付与してください。また、ユーザーが必要とする最小限の権限のみを付与するように注意してください。

PUBLICロールの権限処理のガイドライン

PUBLICロールから、不要な権限とロールを取り消す必要があります。PUBLICロールは、すべてのデータベース・ユーザー・アカウントに自動的に割り当てられます。デフォルトでは、このロールに割り当てられる権限はありませんが、多くのJavaオブジェクトに対する権限があります。PUBLICロールを削除することはできず、ユーザー・アカウントには常にこのロールが割り当てられるため、このロールの手動での付与または取消しに意味はありません。PUBLICロールは、すべてのデータベース・ユーザー・アカウントに割り当てられるため、DBA_ROLESおよびSESSION_ROLESデータ・ディクショナリ・ビューに表示されません。

すべてのユーザーがPUBLICロールを持っているため、すべてのデータベース・ユーザーがこのロールに付与されている権限を実行できます。この権限によって、最小限の権限を持つユーザーが、この権限なしでは直接アクセスできない関数にアクセスして実行できるようになる可能性があります。

セキュア・アプリケーション・ロールによるアプリケーション・アクセスの制御

セキュア・アプリケーション・ロールは、認可されたPL/SQLパッケージによってのみ有効にできるロールです。PL/SQLパッケージ自体は、アプリケーションへのアクセスを制御するために必要なセキュリティ・ポリシーを反映します。

この項の内容は次のとおりです。

- セキュア・アプリケーション・ロールについて

- チュートリアル: セキュア・アプリケーション・ロールの作成

セキュア・アプリケーション・ロールについて

セキュア・アプリケーション・ロールは、認可されたPL/SQLパッケージによってのみ有効にできるロールです。このパッケージは、アプリケーションへのアクセスを制御する1つ以上のセキュリティ・ポリシーを定義します。ロールおよびパッケージは通常、作成者(通常はセキュリティ管理者)のスキーマに作成されます。セキュリティ管理者は、データベースのセキュリティを維持する責任があるデータベース管理者です。

セキュア・アプリケーション・ロールを使用する利点は、ロール自体に付与された権限に加えて、アプリケーション・アクセスにセキュリティの追加レイヤーを作成できることです。セキュア・アプリケーション・ロールを使用すると、パスワードがアプリケーション・ソース・コードに埋め込まれたり表に格納されないため、セキュリティが強化されます。このため、データベースが行う決定はセキュリティ・ポリシーの実装に基づいて行われます。これらの定義はアプリケーションではなくデータベースにまとめて格納されるため、各アプリケーションのポリシーを変更するのではなく、このポリシーを一度に変更します。ポリシーはロールにバインドされているため、データベースに接続しているユーザー数に関係なく、結果は常に同じになります。

セキュア・アプリケーション・ロールには次のコンポーネントがあります。

- セキュア・アプリケーション・ロール自体。このロールを作成するには、CREATE ROLE文をIDENTIFIED USING句とともに使用してPL/SQLパッケージに関連付けます。次に、一般的にロールに付与する権限をこのロールに付与します。

- セキュア・アプリケーション・ロールに関連付けるPL/SQLパッケージ、プロシージャまたはファンクション。PL/SQLパッケージは、データベースへのログインを試行する人物にロールを付与またはロールを拒否する条件を設定します。PL/SQLパッケージ、プロシージャまたはファンクションは、定義者の権限ではなく実行者の権限を使用して作成する必要があります。実行者の権限のプロシージャは現行ユーザー(プロシージャを実行するユーザー)の権限で実行されます。このユーザーには、PL/SQLパッケージからアクセスされる、基礎となるオブジェクトに対するEXECUTE権限が付与されている必要があります。実行者の権限のプロシージャは、特定のスキーマにバインドされません。様々なユーザーがこのようなプロシージャを実行でき、集中化されたアプリケーション・ロジックを使用することで複数のユーザーが自身のデータを管理できます。実行者の権限のパッケージを作成するには、プロシージャ・コードの宣言部でAUTHID CURRENT_USER句を使用します。
ユーザーのロールを有効(または無効)にするために、PL/SQLパッケージにはSET ROLE文またはDBMS_SESSION.SET_ROLEコールも含まれている必要があります。

PL/SQLパッケージを作成してから、適切なユーザーにパッケージに対するEXECUTE権限を付与する必要があります。

- ユーザーがログオンしたときにPL/SQLパッケージを実行する方法。PL/SQLパッケージを実行するには、ユーザーがロールによって付与される権限を使用する前に、アプリケーションから直接PL/SQLパッケージをコールする必要があります。ユーザーがログオンしたときにPL/SQLパッケージを自動的に実行するログオン・トリガーは使用できません。

ユーザーがアプリケーションにログインすると、必要に応じて、パッケージ内のポリシーによるチェックが行われます。チェックを通過したユーザーにはロールが付与され、アプリケーションへのアクセスが許可されます。ユーザーがチェックを通過できない場合、アプリケーションへのアクセスは拒否されます。

チュートリアル: セキュア・アプリケーション・ロールの作成

このチュートリアルでは、2人のユーザーMatthew WeissとWinston TaylorがOE.ORDERS表から情報を取得する場合を説明します。この表へのアクセス権は、EMPLOYEE_ROLEセキュア・アプリケーション・ロールで定義されています。MatthewはWinstonのマネージャで、OE.ORDERS表内の情報にアクセスできますが、Winstonは情報にアクセスできません。

このチュートリアルでは、次の手順を実行します。

- 手順1: セキュリティ管理者アカウントを作成する

- 手順2: このチュートリアルで使用するユーザー・アカウントを作成する

- 手順3: セキュア・アプリケーション・ロールを作成する

- 手順4: 参照ビューを作成する

- 手順5: PL/SQLプロシージャを作成してセキュア・アプリケーション・ロールを設定する

- 手順6: MatthewとWinstonのプロシージャにEXECUTE権限を付与する

- 手順7: EMPLOYEE_ROLEセキュア・アプリケーション・ロールをテストする

- 手順8: このチュートリアルで使用したコンポーネントを削除する(オプション)

手順1: セキュリティ管理者アカウントを作成する

セキュリティを強化するためには、システム管理者に職務を割り当てる際に、責務分離の概念を取り入れる必要があります。このマニュアルのチュートリアルでは、sec_adminというセキュリティ管理者アカウントを作成し、使用します。

sec_adminセキュリティ管理者アカウントを作成するには、次のようにします。

1. Database Controlを起動します。
Database Controlを起動する手順については、『Oracle Database 2日でデータベース管理者』を参照してください。

2. 管理者のユーザー名(SYSTEMなど)とパスワードを入力し、「ログイン」をクリックします。
SYSTEMユーザーの場合は、Normalとして接続します。

データベースのホームページが表示されます。

3. 「サーバー」をクリックして、「サーバー」サブページを表示します。

4. 「セキュリティ」で、「ユーザー」を選択します。
「ユーザー」ページが表示されます。

5. 「作成」をクリックします。
「ユーザーの作成」ページが表示されます。

6. 次の情報を入力します。

- 名前: sec_admin

- プロファイル: Default

- 認証: Password

- 「パスワードの入力」および「パスワードの確認」: 「パスワードの作成要件」に示されている要件を満たすパスワードを入力します。

- デフォルト表領域: SYSTEM

- 一時表領域: TEMP

- ステータス: UNLOCKED

7. 「ロール」をクリックして「ユーザーの編集: SEC_ADMIN」ページを表示します。

8. 「リストを編集」をクリックします。
「ロールの変更」ページが表示されます。

9. 「使用可能なロール」リストからSELECT_CATALOG_ROLEロールを選択し、「移動」をクリックして「選択したロール」リストに移動します。次に「OK」をクリックして、「ユーザーの編集」ページに戻ります。

10. 「システム権限」をクリックして、「システム権限」サブページを表示します。

11. 「リストを編集」をクリックします。
「システム権限の変更」ページが表示されます。

12. 「使用可能なシステム権限」リストから次の権限を選択し、「移動」をクリックしてそれぞれを「選択したシステム権限」リストに移動します。(複数の権限を選択するには、[Ctrl]キーを押したままにします。)

- CREATE PROCEDURE

- CREATE ROLE

- CREATE SESSION

- SELECT ANY DICTIONARY

13. 「OK」をクリックします。
「ユーザーの作成」ページが表示されます。

14. 「管理者オプション」では、ボックスを選択しないでください。

15. 「OK」をクリックします。
「ユーザー」ページが表示されます。「ユーザー名」リストにユーザーsec_adminが表示されます。

手順2: このチュートリアルで使用するユーザー・アカウントを作成する

MatthewとWinstonは、どちらもHR.EMPLOYEESスキーマの従業員のサンプルです。従業員のマネージャIDや電子メール・アドレスなどの情報を含む列があります。以降でセキュア・アプリケーション・ロールをテストするため、これら2人の従業員のユーザー・アカウントを作成する必要があります。

ユーザー・アカウントを作成するには、次のようにします。

1. 「ユーザー」ページで、「作成」をクリックします。
「ユーザーの作成」ページが表示されます。

2. 次の情報を入力します。

- 名前: mweiss(Matthew Weissのユーザー・アカウントを作成するため)

- プロファイル: DEFAULT

- 認証: Password

- 「パスワードの入力」および「パスワードの確認」: 「パスワードの作成要件」に示されている要件を満たすパスワードを入力します。

- デフォルト表領域: USERS

- 一時表領域: TEMP

- ステータス: Unlocked

3. 「システム権限」をクリックして、「システム権限」サブページを表示します。

4. 「リストを編集」をクリックします。
「システム権限の変更」ページが表示されます。

5. 「使用可能なシステム権限」リストからCREATE SESSION権限を選択し、「移動」をクリックして「選択したシステム権限」リストに移動します。

6. 「OK」をクリックします。
CREATE SESSIONがユーザーmweissのシステム権限としてリストされた状態で「ユーザーの作成」ページが表示されます。

7. CREATE SESSIONの「管理者オプション」が選択されていないことを確認し、「OK」をクリックします。
「ユーザー」ページが表示されます。

8. ユーザー・リストからユーザーMWEISSのオプションを選択し、次に「アクション」リストから「類似作成」を選択します。次に「実行」をクリックします。

9. 「ユーザーの作成」ページで、次の情報を入力してWinstonのユーザー・アカウントを作成します。このアカウントはMatthewのユーザー・アカウントとほぼ同じになります。

- 名前: wtaylor

- 「パスワードの入力」および「パスワードの確認」: 「パスワードの作成要件」に示されている要件を満たすパスワードを入力します。

ユーザーwtaylorに対し、デフォルト表領域および一時表領域、またはCREATE SESSIONシステム権限を指定する必要はありません。すでに指定されているからです。

10. 「OK」をクリックします。
wtaylorにCREATE SESSION権限を付与する必要はありません。これは、この処理が「類似作成」アクションによって実行されているためです。

11. Database Controlからログアウトします。

これで、Matthew WeissとWinston Taylorの両方にユーザー・アカウントが作成され、同じ権限が与えられました。

手順3: セキュア・アプリケーション・ロールを作成する

これで、employee_roleセキュア・アプリケーション・ロールを作成する準備ができました。これを実行するには、セキュリティ管理者sec_adminとしてログインする必要があります。sec_adminアカウントの作成方法については、「手順1: セキュリティ管理者アカウントを作成する」を参照してください。

セキュア・アプリケーション・ロールを作成するには、次のようにします。

1. SQL*Plusを起動し、セキュリティ管理者sec_adminとしてログオンします。

SQLPLUS sec_admin
Enter password: password

SQL*Plusが起動し、デフォルトのデータベースに接続してから、プロンプトが表示されます。

SQL>

SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. 次のセキュア・アプリケーション・ロールを作成します。

CREATE ROLE employee_role IDENTIFIED USING sec_roles;

IDENTIFIED USING句では、関連付けられているPL/SQLパッケージ(この場合はsec_roles)内でのみ有効(または無効)にするロールを設定します。この段階では、sec_roles PL/SQLパッケージが存在している必要はありません。

3. ユーザーOEとして接続します。

CONNECT OE
Enter password: password

OEがロックされているというエラー・メッセージが表示された場合は、OEアカウントのロックを解除し、次の文を入力してパスワードをリセットします。セキュリティを考慮して、以前のリリースのOracle Databaseで使用していたパスワードと同じパスワードは再利用しないでください。「パスワードの作成要件」に示されているパスワードのガイドラインに従って、任意のセキュアなパスワードを入力します。

CONNECT SYS/AS SYSDBA
Enter password: sys_password

PASSWORD OE  -- First, change the OE account password.
Changing password for OE
New password: password
Retype new password: password
Password changed.

ALTER USER OE ACCOUNT UNLOCK; -- Next, unlock the OE account.

次の構文を使用して、ユーザー・アカウントのロック解除と新規パスワードの作成する方法もあります。

ALTER USER account_name ACCOUNT UNLOCK IDENTIFIED BY new_password:

これで、ユーザーOEとして接続できます。

CONNECT OE
Enter password: password

4. 次の文を入力して、OE.ORDERS表に対するSELECT権限をEMPLOYEE_ROLEロールに付与します。

GRANT SELECT ON OE.ORDERS TO employee_role;

ユーザーに直接ロールは付与しないでください。ユーザーがセキュリティ・ポリシーの条件を満たしている場合、ロールの付与はPL/SQLパッケージにより行われます。

手順4: 参照ビューを作成する

employee_roleロールを付与するユーザーを決定するプロシージャを作成します。このプロシージャは、マネージャID 100のSteven Kingに報告を行うマネージャにのみemployee_roleを付与します。この情報はHR.EMPLOYEES表にあります。ただし、この表には給与情報などの機密データが含まれており、また、使用した場合すべてのユーザーがアクセスする必要があるため、このプロシージャでは使用できません。実際にはほとんどの場合に、必要な情報のみが含まれている参照ビューを作成します。(参照表を作成することはできますが、ビューに最新データが反映されます。)このチュートリアルでは、従業員の名前、従業員ID、マネージャIDのみを含む独自の参照ビューを作成します。

HR.HR_VERIFY参照ビューを作成するには、次のようにします。

1. SQL*Plusで、ユーザーHRとして接続します。

CONNECT HR
Enter password: password

HRがロックされているというエラー・メッセージが表示された場合は、そのアカウントのロックを解除し、次の文を入力してパスワードをリセットします。セキュリティを考慮して、以前のリリースのOracle Databaseで使用していたパスワードと同じパスワードは再利用しないでください。「パスワードの作成要件」に示されているパスワードのガイドラインに従って、任意のセキュアなパスワードを入力します。

CONNECT SYSTEM
Enter password: password

PASSWORD HR
Changing password for HR
New password: password
Retype new password: password
Password changed.

ALTER USER HR ACCOUNT UNLOCK;

CONNECT HR
Enter password: password

2. 次のCREATE VIEW SQL文を入力して参照ビューを作成します。

CREATE VIEW hr_verify AS
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, MANAGER_ID
FROM EMPLOYEES;

3. 次のSQL文を入力して、このビューに対するEXECUTE権限をmweiss、wtaylorおよびsec_adminに付与します。

GRANT SELECT ON hr.hr_verify TO mweiss;
GRANT SELECT ON hr.hr_verify TO wtaylor;
GRANT SELECT ON hr.hr_verify TO sec_admin;

手順5: PL/SQLプロシージャを作成してセキュア・アプリケーション・ロールを設定する

次に、セキュア・アプリケーション・ロールのプロシージャを作成します。多くの場合、プロシージャを格納するパッケージを作成しますが、このチュートリアルは、1つのセキュア・アプリケーション・ロールのみをテスト(プロシージャで定義)するシンプルなチュートリアルであるため、プロシージャのみを作成します。複数のプロシージャを作成してロールをテストする場合は、パッケージ内にプロシージャを作成します。

PL/SQLパッケージを使用すれば、SQL文からアクセスできる特定の関連プロシージャやタイプを、単純で明確なインタフェースとして定義できます。またパッケージを使用することでコードが再利用可能になり、メンテナンスもしやすくなります。パッケージをセキュア・アプリケーション・ロールに使用した場合の利点は、複数のセキュリティ・ポリシーを1つのグループにまとめることで、アプリケーション保護のための堅牢なセキュリティ計画を実装できることです。セキュリティ・ポリシーに失敗したユーザー(潜在的な侵入者)については、監査チェックをパッケージに追加して、その失敗を記録できます。

セキュア・アプリケーション・ロールのプロシージャを作成するには、次のようにします。

1. SQL*Plusでユーザーsec_adminとして接続します。

CONNECT sec_admin
Enter password: password

2. 次のCREATE PROCEDURE文を入力してセキュア・アプリケーション・ロールのプロシージャを作成します。(最初の行のCREATE OR REPLACEの前にカーソルを置くことで、このテキストをコピーして貼り付けることができます。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

CREATE OR REPLACE PROCEDURE sec_roles AUTHID CURRENT_USER
AS
v_user varchar2(50);
v_manager_id number :=1;
BEGIN
v_user := lower((sys_context ('userenv','session_user')));
SELECT manager_id
INTO v_manager_id FROM hr.hr_verify WHERE lower(email)=v_user;
IF v_manager_id = 100
THEN
EXECUTE IMMEDIATE 'SET ROLE employee_role';
ELSE NULL;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN v_manager_id:=0;
DBMS_OUTPUT.PUT_LINE(v_manager_id);
END;
/

この例では、次のとおりです。

- 1行目: CREATE PROCEDURE文に、実行者の権限を使用してプロシージャを作成するAUTHID CURRENT_USER句を追加します。AUTHID CURRENT_USER句は、現在のユーザーの権限を使用し、実行者の権限を使用してパッケージを作成します。
パッケージを機能させるには、実行者の権限を使用する必要があります。実行者の権限は、パッケージがアクセスするすべてのオブジェクトに対するEXECUTE権限をユーザーに与えます。

実行者の権限のプロシージャ内で有効になっているロールは、プロシージャが終了した後でも有効なままですが、ユーザーは、セッションを終了するとセキュア・アプリケーション・ロールに関連付けられている権限を失います。この場合は、セッションの残りでロールを有効にする専用プロシージャを持つことができます。

ユーザーは、定義者権限のプロシージャ内のセキュリティ・ドメインを変更できないため、セキュア・アプリケーション・ロールは実行者権限のプロシージャ内でのみ有効になります。

実行者の権限を使用したプロシージャの作成の重要性については、「セキュア・アプリケーション・ロールについて」を参照してください。

- 3行目: ユーザーのセッション情報を格納するv_user変数を宣言します。

- 4行目: v_userユーザーのマネージャIDを格納するv_manager_id変数を宣言します。

- 6行目: ユーザー・ログオンのユーザー・セッション情報(この場合は、MatthewまたはWinston)を取得します。ユーザー・セッション情報を取得するには、SQLファンクションSYS_CONTEXTをネームスペース属性USERENV('userenv'、session_attribute)とともに使用して、この情報をv_user変数に書き込みます。
このファンクションから返される情報は、ユーザーが認証された方法、クライアントのIPアドレスおよびユーザーがプロキシを介して接続したかどうかを示します。SYS_CONTEXTの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

- 7から8行目: 現行ユーザーのマネージャIDを取得します。SELECT文によって、マネージャIDがv_manager_id変数にコピーされ、HR.HR_VERIFYビューで現行ユーザーのマネージャIDがチェックされます。従業員の電子メール・アドレスはユーザー名と同じであるため、この例では従業員の電子メール・アドレスを使用します。

- 9から13行目: IF条件により、ユーザーにsec_rolesロールを付与すべきかどうかテストされます。この例の場合は、MatthewのマネージャであるSteven King(従業員番号は100)に報告を行うかどうかが条件となります。Matthewのように、Kingに報告を行う場合、ユーザーにはセキュア・アプリケーション・ロールが付与されます。報告を行わない場合は、ロールは付与されません。
結果として、Matthew WeissはSteven Kingの直属の部下であるためセキュア・アプリケーション・ロールを付与されますが、WinstonはSteven Kingの直属の部下ではないためロールは付与されません。

- 10から12行目: IF条件内では、THEN条件によってSET ROLE文がすぐに実行され、ロールが付与されます。これが実行されない場合は、ELSE条件により、権限付与が拒否されます。

- 14から15行目: データが検出されない場合は、EXCEPTION文を使用してv_manager_idを0に設定します。

- 16行目: マネージャID(ここでは0)をバッファにコピーしてすぐに使用できるようにします。

ヒント:
PL/SQLコードが正常に作成または実行されない場合は、そのOracle Databaseのトレース・ファイルを確認します。USER_DUMP_DEST初期化パラメータにトレース・ファイルの現在の位置が示されます。このパラメータの値は、SQL*PlusでSHOW PARAMETER USER_DUMP_DESTを実行すると確認できます。トレース・ファイルの詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

手順6: MatthewとWinstonのプロシージャにEXECUTE権限を付与する

この段階で、MatthewとWinstonはOE.ORDERS表にアクセスを試行できますが、アクセスはできません。次の手順で、彼らにsec_rolesプロシージャのEXECUTE権限を付与し、sec_rolesプロシージャは実行できますが、OE.ORDERS表から選択したときに、アクセスが許可または拒否されます。

sec_rolesプロシージャのEXECUTE権限を付与するには、次のようにします。

- SQL*Plusで、ユーザーsec_adminとして次のGRANT SQL文を入力します。

GRANT EXECUTE ON sec_admin.sec_roles TO mweiss;
GRANT EXECUTE ON sec_admin.sec_roles TO wtaylor;

手順7: EMPLOYEE_ROLEセキュア・アプリケーション・ロールをテストする

MatthewとWinstonとしてログオンし、OE.ORDERS表にアクセスを試行して、employee_roleセキュア・アプリケーション・ロールをテストします。MatthewとWinstonがログオンすると、OE.ORDERS表でSELECT文を発行する前に、sec_rolesプロシージャが実行されてロールの検証が行われます。

ユーザーMWEISSとしてemployee_roleセキュア・アプリケーション・ロールをテストするには、次のようにします。

1. ユーザーmweissとして接続します。

CONNECT mweiss
Enter password: password

2. 次のSQL文を入力してsec_rolesプロシージャを実行します。

EXEC sec_admin.sec_roles;

この文により、現行セッションに対してsec_rolesプロシージャが実行されます。(実際のシナリオでは、ユーザーがアプリケーションにログインしたときに、この文は自動的に実行されます)。

3. OE.ORDERSで次のSELECT文を実行します。

SELECT COUNT(*) FROM OE.ORDERS;

MatthewにはOE.ORDERS表へのアクセス権があります。

COUNT(*)
----------
105

次に、Winstonがセキュア・アプリケーションにアクセスしようとします。

ユーザーWTAYLORとしてemployee_roleセキュア・アプリケーション・ロールをテストするには、次のようにします。

1. SQL*Plusでユーザーwtaylorとして接続します。

CONNECT wtaylor
Enter password: password

2. 次のSQL文を入力してsec_rolesプロシージャを実行します。

EXEC sec_admin.sec_roles;

この文により、現行セッションに対してsec_rolesプロシージャが実行されます。

3. OE.ORDERSで次のSELECT文を実行します。

SELECT COUNT(*) FROM OE.ORDERS;

WinstonはSteven Kingに直接報告を行わないため、OE.ORDERS表へのアクセス権がありません。SELECT文を実行した場合でも、ORDERS表に含まれる実際の注文数はわかりません。

ERROR at line 1:
ORA-00942: table or view does not exist

手順8: このチュートリアルで使用したコンポーネントを削除する(オプション)

このチュートリアルで作成したコンポーネントを削除します。

コンポーネントを削除するするには、次のようにします。

1. SQL*PlusでユーザーSYSTEMとして接続します。

CONNECT SYSTEM
Enter password: password

2. 次のDROP文を入力します。

DROP USER mweiss;
DROP USER wtaylor;

ユーザーsec_adminは削除しないでください。このマニュアルの以降のチュートリアルで、このユーザーが必要になります。

3. SQL*Plusでユーザーsec_adminとして接続します。

CONNECT sec_admin
Enter password: password

4. 次のDROP SQL文を入力します。

DROP ROLE employee_role;
DROP PROCEDURE sec_roles;

5. ユーザーHRとして接続してから、HR_VERIFYビューを削除します。

CONNECT HR
Enter password: password
DROP VIEW hr_verify;

6. SQL*Plusを終了します。

EXIT

権限セキュリティに使用される初期化パラメータ

表4-1に、ユーザー権限を保護するために使用する初期化パラメータを示します。

表4-1 権限セキュリティに使用される初期化パラメータ

初期化パラメータ

デフォルト設定

説明

O7_DICTIONARY_ACCESSIBILITY

FALSE

SYSTEM権限に対する制限を制御します。このパラメータの詳細は、「データ・ディクショナリ保護の有効化」を参照してください。

OS_ROLES

FALSE

オペレーティング・システムが各ユーザーのロールを識別および管理するかどうかを決定します。

MAX_ENABLED_ROLES

30

他のロールに含まれるロールを含め、ユーザーが有効にできるデータベース・ロールの最大数を指定します。

REMOTE_OS_ROLES

FALSE

オペレーティング・システム・ロールがリモート・クライアントに対して許可されるかどうかを指定します。デフォルト値のFALSEを指定すると、Oracleでリモート・クライアントのロールが識別および管理されます。

SQL92_SECURITY

FALSE

UPDATE文やDELETE文などを実行するためにユーザーにSELECTオブジェクト権限が付与されている必要があるかどうかを指定します。

初期化パラメータを変更するには、「初期化パラメータ値の変更」を参照してください。初期化パラメータの詳細は、『Oracle Databaseリファレンス』および『Oracle Database管理者ガイド』を参照してください。

5 ネットワークの保護

この章の内容は次のとおりです。

- ネットワークの保護について

- ネットワーク上のクライアント接続の保護

- ネットワーク暗号化を使用したネットワーク上のデータの保護

- ネットワーク・セキュリティに使用される初期化パラメータ

ネットワークの保護について

『Oracle Database 2日でデータベース管理者』の「ネットワーク環境の構成」および使用しているプラットフォームの『Oracle Databaseインストレーション・ガイド』の手順に従って、Oracle Databaseインストール環境へのクライアント接続を構成できます。この章では、ネットワーク上を移動するデータを暗号化する方法を説明し、Oracle Databaseのネットワーク接続を保護するために従うことのできるガイドラインも示します。

ネットワーク上のクライアント接続の保護

ここでは、クライアント接続のセキュリティを高めて、完全な保護を確保する方法を説明します。データベースとの通信を保護するには、ネットワーク・トラフィックを暗号化する必要があります。

ガイドラインは次のとおりです。

- クライアント接続保護のガイドライン

- ネットワーク接続の保護のガイドライン

クライアント接続保護のガイドライン

クライアント・コンピュータの認証には問題が多いため、通常は、かわりにユーザー認証が行われます。この方法により、偽造されたIPアドレス、危険にさらされたオペレーティング・システムまたはアプリケーション、偽造または盗用されたクライアント・システムIDがクライアント・システムで使用される問題を回避できます。また、次のガイドラインに従うことで、クライアント接続のセキュリティが向上します。

1. アクセス制御を効果的に実施して、クライアントを厳密に認証します。
デフォルトでは、オペレーティング・システムで認証されたログインのみがセキュア接続で許可され、Oracle Netおよび共有サーバー構成の使用は拒否されます。デフォルトで行われるこの制限により、リモート・ユーザーがネットワーク接続で他のオペレーティング・システム・ユーザーを装うことが阻止されます。

初期化パラメータREMOTE_OS_AUTHENTをTRUEに設定すると、データベースはセキュアでない接続を介して受信したクライアントのオペレーティング・システムのユーザー名を受け入れ、このユーザー名をアカウント・アクセスに使用します。(初期化パラメータの変更は、「初期化パラメータ値の変更」を参照してください。)PCなどのクライアントは、オペレーティング・システムの認証を正しく実行していない場合があるため、この機能を使用するとセキュリティが非常に低下します。

デフォルト設定REMOTE_OS_AUTHENT = FALSEにより、よりセキュアな構成が作成され、Oracle Databaseに接続するユーザーに対してサーバーベースの適切な認証が行われます。

このパラメータをFALSEに設定しても、ユーザーがリモートから接続できなくなるわけではありません。クライアントがすでに認証されていたとしても、データベースにより標準の認証プロセスが適用されるだけです。

2. 暗号化を使用するように接続を構成します。
Oracleのネットワーク暗号化を使用すると、盗聴が困難になります。暗号化の構成方法は、『Oracle Database Advanced Securityガイド』を参照してください。

3. 厳密な認証を設定します。
Kerberosおよび公開鍵基盤(PKI)の使用方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

ネットワーク接続の保護のガイドライン

不適切なアクセスまたは変更からネットワークおよびトラフィックを保護することは、ネットワーク・セキュリティにおいて非常に重要です。データが移動するすべての経路を検討し、各経路およびノードに対する脅威を評価します。次に、それらの脅威およびセキュリティが侵害された場合の影響を抑制または排除する手順を実行します。また、監視および監査を実施し、脅威レベルの増加または侵入の試行を検出します。

ネットワーク接続を管理するには、Oracle Net Managerを使用できます。Oracle Net Managerの使用の概要は、『Oracle Database 2日でデータベース管理者』を参照してください。『Oracle Database Net Services管理者ガイド』も参照してください。

次の手順を実行して、ネットワーク・セキュリティを強化します。

1. リスナーのアクティビティを監視します。
Oracle Enterprise Manager Database Controlを使用してリスナーのアクティビティを監視できます。Database Controlのホームページの「一般」で、使用しているリスナーのリンクをクリックします。「リスナー」ページが表示されます。このページには、生成されたアラートのカテゴリ、アラート・メッセージ、アラートがトリガーされた日時などの詳細な情報が含まれています。このページには、リスナーのパフォーマンス統計などの情報も含まれています。

2. 管理者に対してリスナーのパスワードおよびサーバー上のlistener.oraファイルへの書込み権限を要求して、オンライン管理を防止します。

1. listener.oraファイルで、次の行を追加または変更します。

ADMIN_RESTRICTIONS_LISTENER=ON

2. RELOADを使用して構成をリロードします。

3. 次のように、アドレス・リストの第1エントリをTCPSプロトコルにして、リスナーの管理にSSLを使用します。

LISTENER=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=
(PROTOCOL=tcps)
(HOST = shobeen.us.example.com)
(PORT = 8281)))

リモートからリスナーを管理するには、クライアント・コンピュータ上のlistener.oraファイルでリスナーを定義します。たとえば、リスナーUSER281にリモートからアクセスする場合は、次の構成を使用します。

user281 =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = tcps)
(HOST = shobeen.us.example.com)
(PORT = 8281))
)
)

listener.oraのパラメータの詳細は、『Oracle Net Servicesリファレンス・ガイド』を参照してください。

3. リスナー・パスワードを設定しないでください。
パスワードがlistener.oraファイルに設定されていないことを確認します。オペレーティング・システム認証によってリスナー管理が保護されます。パスワードが設定されていない場合、リモート・リスナー管理は無効です。これによって、リスナーのパスワードへの総当り攻撃が防止されます。

リスナーのパスワードは、このリリースで非推奨となっており、Oracle Databaseの次のリリースではサポートされなくなることに注意してください。

4. 複数のNICカードに関連付けられている複数のIPアドレスがホストにある場合は、リスナーを特定のIPアドレスに設定します。
これにより、リスナーはすべてのIPアドレスを監視できます。指定したIPアドレスを監視するように制限することもできます。これらのタイプのコンピュータでは、リスナーにすべてのIPアドレスを監視させるのではなく、IPアドレスを指定することをお薦めします。特定のIPアドレスの監視に制限することで、リスナー・プロセスからTCPエンドポイントが盗用されることを防止できます。

5. リスナーの権限を制限して、データベースまたはOracleサーバーのアドレス空間のファイルを読取り/書込みできないようにします。
この制限により、リスナー(またはエージェントが実行するプロシージャ)によって起動される外部プロシージャ・エージェントに、読取りまたは書込み操作の実行権限が継承されなくなります。この個別のリスナー・プロセスの所有者には、Oracleをインストールした所有者またはOracleインスタンスを実行する所有者(デフォルトの所有者であるORACLEなど)は指定しないでください。

リスナーにおける外部プロシージャの構成の詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。

6. 暗号化を使用して送信中のデータを保護します。
ネットワークを介してOracleデータを保護する方法については、「ネットワーク暗号化を使用したネットワーク上のデータの保護」を参照してください。ネットワーク暗号化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

7. ファイアウォールを使用します。
ファイアウォールを適切に配置および構成することで、データベースへの外部アクセスを防止できます。

- データベース・サーバーはファイアウォールの内側に配置してください。Oracle Databaseネットワーク・インフラストラクチャであるOracle Net(以前のNet8およびSQL*Net)は、様々なベンダーの各種ファイアウォールをサポートしています。サポートされるプロキシ対応のファイアウォールには、Network AssociatesのGauntletやAxentのRaptorなどが含まれます。サポートされるパケット・フィルタ型のファイアウォールにはCiscoのPIX Firewall、またサポートされるステートフル・インスペクション・ファイアウォール(より高機能なパケット・フィルタを実装したファイアウォール)には、CheckPointのFirewall-1が含まれます。

- ファイアウォールは、保護するネットワークの外側に配置されている必要があります。

- 安全性が確認されているプロトコル、アプリケーションまたはクライアント/サーバーのソースのみを受け入れるようにファイアウォールを構成します。

- Oracle Connection Managerなどの製品を使用し、データベースへの単一のネットワーク接続を介して複数のクライアント・ネットワーク・セッションを多重化します。ソース、宛先およびホスト名を使用してフィルタ処理できます。この製品により、物理的に保護された端末または既知のIPアドレスのアプリケーションWebサーバーからの接続のみを受け入れるようにできます。(IPアドレスは偽造可能なため、IPアドレスのみでフィルタ処理した認証では不十分です)。

8. Oracleリスナーの不正な管理を防止します。
リスナーの詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。

9. ネットワークIPアドレスをチェックします。
Oracle Netの有効なノードの確認セキュリティ機能を利用すると、指定のIPアドレスを持つネットワーク・クライアントからOracleサーバー・プロセスへのアクセスを許可または拒否できます。この機能を使用するには、次のsqlnet.ora構成ファイル・パラメータを設定します。

tcp.validnode_checking = YES

tcp.excluded_nodes = {list of IP addresses}

tcp.invited_nodes = {list of IP addresses}

tcp.validnode_checkingパラメータで、機能を有効にします。tcp.excluded_nodesおよびtcp.invited_nodesパラメータは、特定のクライアントIPアドレスによるOracleリスナーへの接続の確立を拒否または有効にします。これにより、潜在的なサービス拒否(DoS)攻撃を防ぐことができます。

Oracle Net Managerを使用して、これらのパラメータを構成できます。詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。

10. ネットワーク・トラフィックを暗号化します。
可能な場合は、Oracle Advanced Securityを使用して、クライアント、データベースおよびアプリケーション・サーバー間のネットワーク・トラフィックを暗号化します。Oracleネットワーク暗号化の概要は、「ネットワーク暗号化を使用したネットワーク上のデータの保護」を参照してください。ネットワーク暗号化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

11. ホスト・オペレーティング・システム(Oracle Databaseが配置されているシステム)を保護します。
オペレーティング・システムの不要なサービスをすべて使用禁止にして、ホスト・オペレーティング・システムを保護します。UNIXおよびWindowsの大部分のサービスは、標準的なデプロイメントでは必要ありません。この種のサービスには、FTP、TFTP、TELNETなどがあります。使用を禁止している各サービスのUDPポートとTCPポートは、両方とも必ず閉じてください。いずれかのポートが使用可能になっていると、オペレーティング・システムが攻撃を受けやすくなります。

ネットワーク暗号化を使用したネットワーク上のデータの保護

情報は、データベース・レベルで暗号化して保護するだけでなく、ネットワークで送受信されるときにも保護する必要があります。

この項の内容は次のとおりです。

- ネットワーク暗号化について

- ネットワーク暗号化の設定

関連項目:
ネットワーク暗号化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

ネットワーク暗号化について

ネットワーク暗号化とは、クライアントとサーバー間のネットワークを移動するデータを暗号化することです。データベース・レベルだけでなくネットワーク・レベルでもデータを暗号化する必要があるのは、ネットワーク・レベルで読み取られる可能性があるためです。たとえば、ネットワークを移動する情報がネットワーク・パケット・スニファを使用して傍受され、ファイルにスプールされて不正に使用される可能性があります。ネットワーク上のデータを暗号化することにより、このようなアクティビティを防止できます。

ネットワーク上のデータを暗号化するには、次のコンポーネントが必要です。

- 暗号化シード。暗号化シードは、最大256文字のランダムな文字列です。ネットワークを移動するデータを暗号化する暗号化鍵を生成します。

- 暗号化アルゴリズム。サポートされるアルゴリズムのタイプ(AES、RC4、DES、3DES)からいずれかを指定します。

- クライアントまたはサーバーに適用する設定。サーバーと、サーバーが接続する各クライアントを設定する必要があります。

- クライアントまたはサーバーが暗号化されたデータを処理する方法。サーバーとクライアントで、同じ設定を選択する必要があります(オプションが4つあります)。

- 暗号化を構成するためのメカニズム。Oracle Net Managerを使用して暗号化を構成できます。または、sqlnet.ora構成ファイルを編集できます。Oracle Net Managerとsqlnet.oraはどちらもデフォルトのOracle Databaseインストール環境で使用できます。

ネットワーク暗号化の設定

Oracle Net Managerを使用するか、sqlnet.oraファイルを編集して、ネットワーク暗号化を設定できます。このマニュアルでは、Oracle Net Managerを使用してネットワーク暗号化を設定する方法を説明します。

ネットワーク暗号化を設定するには、次のようにします。

1. サーバー・コンピュータで、Oracle Net Managerを起動します。

- UNIX: $ORACLE_HOME/binから、次のコマンドラインを入力します。

netmgr

- Windows: 「スタート」メニューから「すべてのプログラム」をクリックします。次に「Oracle - HOME_NAME」→「Configuration and Migration Tools」→「Net Manager」の順にクリックします。

2. Oracle Net Configurationのナビゲーション・ツリーで、「ローカル」を拡張してから「プロファイル」を選択します。

3. リストから「Oracle Advanced Security」を選択します。

4. 「Oracle Advanced Security」で、「暗号化」タブを選択します。
「暗号化」設定ペインが表示されます。

5. 次の設定を入力します。

- 暗号化: リストから、SERVERを選択してサーバーのネットワーク暗号化を構成します。(クライアント・コンピュータの場合は「CLIENT」を選択します)。

- 暗号化タイプ: 次の値のいずれかを選択して、暗号化および完全性のネゴシエーションをするときのサーバー(またはクライアント)の動作を指定します。

- 適用: 一方の接続側で「必要」または「リクエスト」が指定されており、受信側のデータベースで矛盾のないアルゴリズムが使用可能になっている場合、サービスはアクティブになります。それ以外の場合、サービスはアクティブにはなりません。

- 拒否: サービスはアクティブにはなりません。一方の接続側でこのリストのいずれかのメソッドが必要な場合、接続は失敗します。

- リクエスト: 一方の接続側で「適用」、「必要」または「リクエスト」が指定されており、もう一方の接続側で矛盾のないアルゴリズムが使用可能になっている場合、サービスはアクティブになります。それ以外の場合、サービスはアクティブにはなりません。

- 必要: サービスはアクティブになります。一方の接続側で「拒否」が指定されている場合、または両立するアルゴリズムがない場合、接続は失敗します。

- 暗号化シード: 最大256文字のランダムな文字列を入力します。Oracle Databaseは暗号化シードを使用して暗号化キーを生成します。暗号化または完全性のいずれかが有効な場合は必須です。
暗号化シード・パラメータの一部にカンマ「,」、右括弧「)」などの特殊文字を使用する場合は、一重引用符で値を囲んでください。

- 使用可能なメソッド: 次のアルゴリズムから1つ以上を選択し、移動ボタン(>)を使用して「選択メソッド」リストに移動します。「選択メソッド」リストに表示される順番により、ネゴシエーションの優先順位が決まります。つまり、最初に表示されるアルゴリズムが最初に選択されます。

- AES256: Advanced Encryption Standard(AES)。AESはデータ暗号化規格(DES)にかわる暗号化規格として、米国標準技術局(National Institute of Standards and Technology: NIST)で認定されています。AES256を使用すると、256ビットのブロック・サイズを暗号化できます。

- RC4_256: Rivest Cipher 4 (RC4)。RC4は、Secure Sockets Layer (SSL)などのプロトコルを保護するために最も一般的に使用されるストリーム暗号です。RC4_256を使用すると、最大256ビットのデータを暗号化できます。

- AES192: AESを使用して192ビットのブロック・サイズを暗号化できます。

- 3DES168: 3キー・オプションによるTriple Data Encryption Standard (TDES)。3DES168を使用すると、最大168ビットのデータを暗号化できます。

- AES128: AESを使用して128ビットのブロック・サイズを暗号化できます。

- RC4_128: RC4を使用して最大128ビットのデータを暗号化できます。

- 3DES112: 2キー(112ビット)オプションによるトリプルDESを使用できます。

- DES: 56ビットのData Encryption Standard(DES)キーです。DESは、米国標準技術局(National Institute of Standards and Technology: NIST)の推奨対象ではなくなりました。

- RC4_40: RC4を使用して最大40ビットのデータを暗号化できます。(推奨しません。)

- DES40: DESを使用して最大40ビットのデータを暗号化できます。(推奨しません。)

6. 「ファイル」メニューから「ネットワーク構成の保存」を選択し、次に 「終了」を選択してOracle Net Managerを終了します。

7. サーバーに接続するクライアント・コンピュータごとに、これらの手順を繰り返します。

関連項目:

- sqlnet.oraファイルのパラメータを変更してネットワーク暗号化を設定する詳細は、『Oracle Net Servicesリファレンス・ガイド』を参照してください。

- ネットワーク・データ暗号化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

ネットワーク・セキュリティに使用される初期化パラメータ

表5-1に、ユーザー・アカウントを保護するために設定する初期化パラメータを示します。

表5-1 ネットワーク・セキュリティに使用される初期化パラメータ

初期化パラメータ

デフォルト設定

説明

OS_AUTHENT_PREFIX

OPS$

データベースへの接続を試行するユーザーを識別するためにOracle Databaseで使用される接頭辞を指定します。Oracle Databaseは、このパラメータの値をユーザーのオペレーティング・システム・アカウント名およびパスワードの先頭に連結します。ユーザーが接続リクエストを試行すると、Oracle Databaseは接頭辞の付いたユーザー名をデータベース内のユーザー名と比較します。

REMOTE_LISTENER

デフォルト設定なし

Oracle Netリモート・リスナー(つまり、このインスタンスと同じコンピュータで実行されていないリスナー)のアドレスまたはアドレス・リストを解決するネットワーク名を指定します。アドレスまたはアドレス・リストは、tnsnames.oraファイル、またはシステムで構成されているその他のアドレス・リポジトリで指定されます。

REMOTE_OS_AUTHENT

FALSE

リモート・クライアントがOS_AUTHENT_PREFIXパラメータの値で認証されるかどうかを指定します。

REMOTE_OS_ROLES

FALSE

オペレーティング・システム・ロールがリモート・クライアントに対して許可されるかどうかを指定します。デフォルト値のFALSEを指定すると、Oracle Databaseはリモート・クライアントのロールを識別および管理します。

初期化パラメータを変更するには、「初期化パラメータ値の変更」を参照してください。初期化パラメータの詳細は、『Oracle Databaseリファレンス』および『Oracle Database管理者ガイド』を参照してください。

6 データの保護

この章の内容は次のとおりです。

- データの保護について

- 透過的なデータ暗号化によるデータの透過的な暗号化

- Oracle Virtual Private DatabaseとOracle Label Security間の選択

- Oracle Virtual Private Databaseによるデータ・アクセスの制御

- Oracle Label Securityによる行レベルのセキュリティの強制

- Oracle Database Vaultを使用した管理者のアクセスの制御

データの保護について

Oracle Databaseには、データを保護する方法が多数用意されています。この章では、サイトでのデータの保護に使用できる次の方法について説明します。

- 透過的データ暗号化。透過的データ暗号化では、1つまたは複数のデータベース表列のデータを暗号化したり、表領域全体を暗号化できます。透過的データ暗号化を使用すると、最も迅速かつ容易にデータを暗号化できます。透過的データ暗号化は、Advanced Encryption Standard(AES)およびTriple Data Encryption Standard(3DES)アルゴリズムをサポートします。
ネットワーク上のデータを暗号化することもできます。この方法については「ネットワーク暗号化を使用したネットワーク上のデータの保護」を参照してください。

- Oracle仮想プライベート・データベース(VPD)。この機能では、データベースに問い合せるすべてのSQL文に対してWHERE句を強制するポリシーを作成し、データへのアクセスを行または列レベルで制限します。VPDポリシーはデータベースの表またはビュー・レベルで作成および管理しますが、これはデータベースにアクセスするアプリケーションを変更しないことを意味します。

- Oracle Label Security(OLS)。この機能では、データベース表を行レベルで保護し、セキュリティ・ラベルに基づいてこれらの行に異なるセキュリティ・レベルを割り当てます。その後、OLSラベルに基づいてユーザーのセキュリティ認可を作成できます。

- Oracle Database Vault。この機能では、データベースに対する管理者のアクセスを制限し、職務分離を適用し、アプリケーション、データベースおよびデータにアクセス可能なユーザー、時間、場所、方法を制御できます。

透過的なデータ暗号化によるデータの透過的な暗号化

透過的データ暗号化により、表領域または1つ以上の表の列をすばやく暗号化できます。実装も簡単で、他のタイプのデータベースの暗号化よりも多くの利点があります。

この項の内容は次のとおりです。

- 機密データの暗号化について

- データを暗号化するタイミング

- 透過的データ暗号化の動作

- 透過的データ暗号化を使用するためのデータの構成

- 既存の暗号化データのチェック

機密データの暗号化について

暗号化されたデータを読めるのは受信者のみです。暗号化を使用すると、保護されていない可能性のある環境内のデータ(バックアップ・メディアに配置されており、オフサイトのストレージ場所に送信されるデータなど)を保護できます。

暗号化データには、次のコンポーネントがあります。

- データを暗号化するアルゴリズム。暗号化アルゴリズムは、Oracle Databaseがデータを暗号化するために使用する計算式です。Oracle Databaseは、業界標準の暗号化アルゴリズムおよびハッシュ・アルゴリズムをいくつかサポートしています。これには、米国標準技術局(National Institute of Standards and Technology: NIST)により承認されているAdvanced Encryption Standard (AES)暗号化アルゴリズムも含まれます。

- データの暗号化および復号化を行うためのキー。データを暗号化するときには、Oracle Databaseは暗号化アルゴリズムへの入力として暗号化キーおよびクリア・テキスト・データを使用します。逆に、データを複合化するときには、アルゴリズムへの入力として複合化キーを使用して、プロセスを逆に実行し、クリア・テキスト・データを取得します。Oracle Databaseは対称キーを使用してこのタスクを実行します(データの暗号化と複合化の両方で同じキーが使用されます)。暗号化キーはデータ・ディクショナリに格納されますが、別のマスター・キーで暗号化されます。

前述のとおり、個々の表列または表領域全体を暗号化できます。これら2つを混同しないように注意してください。たとえば、表列を暗号化してからその表列を含む表領域を暗号化するとします。この二重の暗号化を行うと、パフォーマンスの問題が発生します。また、列の暗号化ではデータ型のサポートに制限があり、一致検索用のBツリー索引のみがサポートされます。現行の暗号化設定を確認するために、表領域に関してはV$ENCRYPTED_TABLESPACESデータ・ディクショナリ・ビュー、暗号化された列に関してはDBA_ENCRYPTED_COLUMNSビューを問い合せることができます。

データを暗号化するタイミング

多くの場合、コンプライアンス規則を遵守するために機密データを暗号化します。たとえば、クレジット・カード番号、社会保障番号、病歴に関する情報などの機密データは、暗号化する必要があります。

データベース管理者からのデータへのアクセスを制限するため、これまでユーザーはデータの暗号化を求めてきました。しかし問題は暗号化よりも、むしろアクセス制御にあります。Oracle Database Vaultを使用してデータベース管理者からアプリケーション・データへのアクセスを制御することで、この問題に対処できます。

多くの場合、クレジット・カード番号や社会保障番号などの機密データは、バックアップ・テープやディスク・ドライバの紛失または盗難時にアクセスされないように暗号化します。近年では、ペイメント・カード産業(PCI)データ・セキュリティ標準や医療保険の相互運用性と説明責任に関する法律(HIPAA)などの業界規制によって、それぞれクレジット・カード情報や医療情報の保護に対して暗号化の使用が促されてきています。

関連項目:
格納されたデータの暗号化に関してよくある誤解については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

透過的データ暗号化の動作

透過的データ暗号化を使用すると、個々の表列もしくは表領域全体を暗号化できます。ユーザーが暗号化された列にデータを挿入すると、透過的データ暗号化により、挿入されたデータが自動的に暗号化されます。ユーザーが列を選択すると、データは自動的に復号化されます。

透過的データ暗号化を使用してデータを暗号化するには、次のコンポーネントを作成します。

- マスター暗号化キーを格納するウォレット。ウォレットは、データベースの外にあるオペレーティング・システム・ファイルです。データベースは、マスター暗号化キーの格納にウォレットを使用します。ウォレットは、Enterprise ManagerまたはALTER SYSTEMコマンドを使用して作成できます。ウォレットは、暗号化キーとしてパスワードを使用して暗号化できます。パスワードはウォレットの作成時に作成します。このため、ウォレットのコンテンツ(マスター・キー)へのアクセスは、パスワードを知っているユーザーに制限されます。ウォレットを作成したら、データベースがマスター暗号化キーにアクセスできるように、パスワードを使用してウォレットを開く必要があります。

- ウォレットの場所。sqlnet.oraファイルでウォレットの場所を指定できます。

後で、ユーザーがデータを入力すると、Oracle Databaseによって次の手順が実行されます。

1. ウォレットからマスター・キーを取得します。

2. マスター・キーを使用して暗号化キーを復号化します。

3. 暗号化キーを使用して、ユーザーが入力したデータを暗号化します。

4. 暗号化した形式でデータをデータベースに格納します。

ユーザーがデータを選択した場合も、同じようなプロセスが実行されます。Oracle Databaseによりデータが復号化され、その後、データがクリア・テキスト形式で表示されます。

透過的データ暗号化には、次の利点があります。

- セキュリティ管理者の場合、ストレージ・メディアまたはデータ・ファイルが盗み出された場合または失われた場合にも機密データを保護できます。

- 透過的データ暗号化を実装すると、セキュリティ関連のコンプライアンス要件を遵守できます。

- 表から取得されたデータは、データベース・ユーザーに対して透過的に復号化されます。データを復号化するために、トリガーまたはビューを作成する必要がありません。

- データベース・ユーザーは、自身がアクセスしたデータが暗号化された形式で格納されていることを認識する必要がありません。データはデータベース・ユーザーに対して透過的に復号化され、ユーザーがアクションを行う必要はありません。

- 暗号化されたデータを処理するためにアプリケーションを変更する必要がありません。データの暗号化/復号化は、データベースにより管理されます。

透過型データ暗号化がパフォーマンスに与える影響は最小限のものです。透過型データ暗号化の列暗号化において、パフォーマンスに影響が及ぶのは、暗号化された列からデータを取得するときと、暗号化された列にデータを挿入するときだけです。暗号化されていない列に対する操作では、たとえ同じ表に暗号化された列が含まれていても、パフォーマンスに影響が及ぶことはありません。ただし、暗号化されたデータには、クリア・テキスト・データよりも多くの記憶域が必要とされます。平均的に、1つの列を暗号化すると、1行につき必要となる記憶域が32バイトから48バイト 増えます。それでも、透過的表領域暗号化では暗号化と復号化がI/Oブロック層で実行されるため、より優れたパフォーマンスが得られます。復号化されたブロックはOracle Databaseのメモリーにキャッシュされ、それによりパフォーマンスが最適化されます。

関連項目:
透過的データ暗号化の使用方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

透過的データ暗号化を使用するためのデータの構成

透過的データ暗号化の使用を開始するには、ウォレットとマスター・キーのセットを作成する必要があります。ウォレットは、他のOracle Databaseコンポーネントと共有するデフォルトのデータベース・ウォレットを使用することも、特に透過的データ暗号化で使用される個別のウォレットを使用することもできます。オラクル社では、個別のウォレットを使用してマスター暗号化キーを格納することをお薦めします。このウォレットは、透過的データ暗号化により暗号化されるすべてのデータで使用されます。

次の手順を実行して、透過的データ暗号化を使用するように表列を設定します。

- 手順1: ウォレットの場所を設定する

- 手順2: ウォレットを作成する

- 手順3: ウォレットを開く(または閉じる)

- 手順4: データを暗号化(または復号化)する

関連項目:
表領域暗号化の使用方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

手順1: ウォレットの場所を設定する

sqlnet.oraファイルでウォレットに対するディレクトリの場所を指定します。この手順は1回のみ実行します。

ウォレットの場所を設定するするには、次のようにします。

1. $ORACLE_HOMEディレクトリに、ウォレットを格納するディレクトリを作成します。
たとえば、C:\oracle\product\11.2.0\db_1ディレクトリにORA_WALLETSという名前のディレクトリを作成します。

2. sqlnet.oraファイルのバックアップ・コピーを作成します。このファイルのデフォルトの場所は、$ORACLE_HOME/network/adminディレクトリです。

3. sqlnet.oraファイルの最後に、次のコードと同様のコードを追加します。ORA_WALLETSは、ウォレットを格納するディレクトリの名前を表しています。

ENCRYPTION_WALLET_LOCATION=
(SOURCE=
(METHOD=file)
(METHOD_DATA=
(DIRECTORY=C:\oracle\product\11.2.0\db_1\ORA_WALLETS)))

4. sqlnet.oraファイルを保存して閉じます。

5. データベースの互換性がOracle Databaseリリース10.2より前のリリースに設定されている場合は、データベースを再起動します。

1. SQL*Plusにログインしてから、データベースの互換性を確認します。

sqlplus sys as sysdba
Enter password: password

SQL*Plusが起動し、デフォルトのデータベースに接続してから、SQL>プロンプトが表示されます。

SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. COMPATIBLEパラメータの値を確認します。

SHOW PARAMETER COMPATIBLE

NAME                       TYPE           VALUE
-------------------------- -------------- --------------------
compatible                 string         11.2.0

3. 値が10.2より大きい場合は、「手順2: ウォレットを作成する」に進みます。値が10.2より小さい場合は、次のようにしてデータベースを再起動します。

SHUTDOWN IMMEDIATE
STARTUP

手順2: ウォレットを作成する

ウォレットを作成するには、ALTER SYSTEM SQL文を使用します。デフォルトでは、Oracleウォレットにはそれまで使用されたマスター・キーの履歴が格納されます。これにより、マスター・キーを変更したり、以前のマスター・キーで暗号化されたデータを復号化することができます。ウォレット・パスワード(大/小文字の区別あり)はデータベース管理者には知らされないため、職務分離を実現できます。つまり、データベース管理者がデータベースを再起動してもウォレットは閉じられたままで、セキュリティ管理者が手動でウォレットを開くまでは、データベースのデータを暗号化することも復号化することもできません。

ウォレットを作成するには、次のようにします。

1. SQL*Plusで、SYSなどの管理権限を持つユーザーまたはセキュリティ管理者として接続します。
次に例を示します。

CONNECT SYSTEM
Enter password: password

2. 次のALTER SYSTEM文を入力します。passwordは、Oracleウォレットを保護するために使用するパスワードです。

ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "password";

パスワードは二重引用符で囲みます。Oracle Databaseで作成した他のパスワードと同様に、パスワードはクリア・テキストまたは動的ビューや動的ログには表示されません。

この文により、新しい暗号化キーを使用するウォレットが生成され、このキーが透過的データ暗号化の現行のマスター・キーに設定されます。マスター暗号化キーを構成するために公開鍵基盤(PKI)を使用する場合は、証明書IDを指定します。証明書IDは、Oracleウォレットに格納される証明書の固有のIDを含む文字列です。次の構文を使用します。

ALTER SYSTEM SET ENCRYPTION KEY certificate_ID IDENTIFIED BY "password";

手順3: ウォレットを開く(または閉じる)

ウォレット・キーを作成した直後は、ウォレットは開かれており、いつでもデータの暗号化を開始できます。ただし、ウォレットを作成した後にデータベースを再起動した場合は、透過的データ暗号化を使用する前に手動でウォレットを開く必要があります。

ウォレットを開くには、次のようにします。

- SQL*Plusで次のALTER SYSTEM文を入力します。passwordは、ウォレットを保護するために使用するパスワードです。

ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";

パスワードは二重引用符で囲む必要があります。

ほとんどの場合、ウォレットを閉じるためのセッションが必要がないかぎり、ウォレットは開いたままにしておきます。マスター・キーへのアクセスを無効にし、暗号化された列へのアクセスを防止する場合は、ウォレットを閉じることができます。透過的データ暗号化を実行するには、ウォレットが開かれている必要があります。ウォレットを再度開くには、ALTER SYSTEM SET WALLET OPEN IDENTIFIED BY password文を使用します。

ウォレットを閉じるには、次のようにします。

- SQL*Plusで、次の文を入力し、パスワードが引用符で囲まれていることを確認します。

ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY "password";

手順4: データを暗号化(または復号化)する

sqlnet.oraファイルでウォレットのディレクトリの場所を作成し、ウォレット自体を作成したら、個々の表列もしくは表領域全体のいずれかを暗号化できます。

この項の内容は次のとおりです。

- 表の個々の列の暗号化

- 表領域の暗号化

表の個々の列の暗号化

どの列を暗号化の対象として指定するかは、政府によるセキュリティ規則(カリフォルニア州上院法案1386)または業界標準(ペイメント・カード産業(PCI)データ・セキュリティ標準など)によって決定します。クレジット・カード番号、社会保障番号、その他の個人情報(PII)はこのカテゴリに分類されます。暗号化が必要な他のデータ(企業秘密、研究結果、従業員の給与、ボーナスなど)は、内部のセキュリティ・ポリシーで定義されます。いつデータを暗号化し、いつ暗号化しないかについては、「データを暗号化するタイミング」を参照してください。

暗号化する列を選択するには、次のガイドラインに従います。

- 暗号化する列のデータ型をチェックします。透過的データ暗号化は、次のデータ型をサポートします。

BINARY_FLOAT

NUMBER

BINARY_DOUBLE

NVARCHAR2

CHAR

RAW

DATE

TIMESTAMP

NCHAR

VARCHAR2

BLOB、CLOBなどのラージ・オブジェクト型(LOB)脚注 1

脚注 1 外部LOBは暗号化できません(BFILE)。

- 選択した列が外部キーの一部でないことを確認します。透過的データ暗号化を使用すると、各表に固有の暗号化鍵が作成されます。この暗号化鍵はデータベースのデータ・ディクショナリに格納され、外部のマスター・キーによって暗号化されます。暗号化された列は外部キーとして使用できません。

表の列を暗号化するには次のようにします。

1. 必ずウォレット・キーを作成して開いておきます。
ウォレット・キーの作成方法については、「手順2: ウォレットを作成する」を参照してください。既存のウォレット・キーを開くには、「手順3: ウォレットを開く(または閉じる)」を参照してください。

2. Database Controlを起動します。
Database Controlを起動する手順については、『Oracle Database 2日でデータベース管理者』を参照してください。

3. 管理者のユーザー名(SYSTEMまたはセキュリティ管理者の名前など)とパスワードを入力し、「ログイン」をクリックします。
データベースのホームページが表示されます。

4. 「スキーマ」をクリックして「スキーマ」サブページを表示します。

5. 「データベース・オブジェクト」で「表」を選択します。
「表」ページが表示されます。

6. 次のいずれかの操作を行います。

- 新しい表を作成するには、「作成」をクリックしてから表示されたページの質問に回答し、表の作成を開始します。

- 既存の表を変更するには、スキーマ名を「スキーマ」フィールドに、表名を「オブジェクト名」フィールドに入力して表名を検索します。(パーセント記号(%)ワイルドカード文字を使用して表のグループを検索できます。たとえば、Oで始まるすべての表を検索するには、O%を使用します。)表が「表」ページに示されている場合は、その表を選択して「編集」をクリックします。

「表の作成」または「表の編集」ページで、暗号化オプションを設定できます。

たとえば、OE.ORDERS表の列を暗号化する場合、「表の編集」ページは次のように表示されます。

7. 「表の作成」(または「表の編集」)ページで、次の手順を実行します。

1. 暗号化する列を選択します。
外部キー制約の一部である列(主キー列または一意キー列)は選択しないでください。これらの列は暗号化できません。これらの列には、名前の左側に鍵またはチェック・マーク・アイコンがあります。

2. 「暗号化オプション」をクリックして、「表」ページの暗号化オプションを表示します。

3. 「暗号化アルゴリズム」リストから次のオプションを選択します。

- AES192: キーの長さを192ビットに設定します。AESは「Advanced Encryption Standard」の略です。

- 3DES168: キーの長さを168ビットに設定します。3DESは「Triple Data Encryption Standard」の略です。

- AES128: キーの長さを128ビットに設定します。デフォルトのオプションです。

- AES256: キーの長さを256ビットに設定します。

4. 「キーの生成」で、「ランダムにキーを生成」または「キーの指定」のどちらかを選択します。「キーの指定」を選択した場合は、「キーの入力」および「キーの確認」フィールドにシード値の文字を入力します。
「ランダムにキーを生成」設定を選択すると、ソルトが有効になります。ソルトとは、暗号化されたデータのセキュリティを強化する方法の1つで、暗号化される前のデータに追加されるランダムな文字列です。これにより、同じテキストであっても、暗号化されたときには異なって表示されます。結果として、暗号化されたテキストのパターン一致を使用する攻撃者は、盗み出したデータを使用できません。

5. 「続行」をクリックして「表の作成」(または「表の編集」)ページに戻ります。

6. 「暗号化」の下のボックスを選択して、列の暗号化を有効にします。

8. 「続行」をクリックします。
表の作成(または「表の編集」)ページが表示されます。

表の更新時も、読取りアクセスは可能です。後で、列内の既存のデータおよび将来格納されるデータは、データベース・ファイルに書き込まれるときに暗号化され、認可されたユーザーが選択したときに復号化されます。データ操作言語(DML)文が必要な場合は、オンラインで再定義できます。

表領域の暗号化

新規表領域の作成中に新規表領域を暗号化することはできますが、既存の表領域を暗号化することはできません。回避策として、CREATE TABLE AS SELECT、ALTER TABLE MOVEを使用するか、またはOracle Data Pumpインポートを使用して既存の表領域からデータを取得し、暗号化されている表領域に格納することができます。表領域の作成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

表領域を暗号化するには、次のようにします。

1. 必ずウォレット・キーを作成して開いておきます。
ウォレット・キーの作成方法については、「手順2: ウォレットを作成する」を参照してください。既存のウォレット・キーを開くには、「手順3: ウォレットを開く(または閉じる)」を参照してください。

2. Database Controlを起動します。
Database Controlを起動する手順については、『Oracle Database 2日でデータベース管理者』を参照してください。

3. 管理者のユーザー名(SYSTEMまたはセキュリティ管理者の名前など)とパスワードを入力し、「ログイン」をクリックします。
データベースのホームページが表示されます。

4. 「サーバー」をクリックして、「サーバー」サブページを表示します。

5. 「記憶域」で、「表領域」をクリックします。
「表領域」ページが表示されます。

6. 「作成」をクリックしてから表示されたページの質問に回答し、表領域と必要なデータ・ファイルの作成を開始します。

7. 「表領域の作成」ページで、次のステップを実行します。

1. 「タイプ」で、「永続」の「暗号化」ボックスを選択します。

2. 「暗号化」オプションを選択して、「暗号化オプション」ページを表示します。

3. 「暗号化アルゴリズム」リストから次のオプションを選択します。

- AES192: キーの長さを192ビットに設定します。AESは「Advanced Encryption Standard」の略です。

- 3DES168: キーの長さを168ビットに設定します。3DESは「Triple Data Encryption Standard」の略です。

- AES128: キーの長さを128ビットに設定します。デフォルトのオプションです。

- AES256: キーの長さを256ビットに設定します。

暗号化アルゴリズムの詳細は、「ネットワーク暗号化の設定」の手順5の「使用可能なメソッド」を参照してください。

4. 「続行」をクリックします。
「表領域の作成」ページが表示されます。

8. 「OK」をクリックします。
既存の表領域のリストに新規表領域が表示されます。既存の表領域は暗号化できないことに注意してください。

関連項目:

- 暗号化されている既存の表領域をデータベースに問い合せるには、「現行のデータベース・インスタンスで暗号化されている表領域のチェック」を参照してください。

- 表領域暗号化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

- CREATE TABLESPACE文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

既存の暗号化データのチェック

すでに暗号化されているデータについて、データベースに問い合せることができます。暗号化された個々の列、暗号化された列を含む現行のデータベース・インスタンスのすべての表、暗号化されているすべての表領域をチェックできます。

この項の内容は次のとおりです。

- ウォレットが開いているか閉じているかのチェック

- 個々の表の暗号化されている列のチェック

- 現行のデータベース・インスタンスで暗号化されているすべての表列のチェック

- 現行のデータベース・インスタンスで暗号化されている表領域のチェック

ウォレットが開いているか閉じているかのチェック

V$ENCRYPTION_WALLETビューを実行することで、ウォレットが開いているか閉じているかを確認できます。

ウォレットが開いているか閉じているかチェックするには、次のようにします。

- SQL*Plusで、V$ENCRYPTION_VIEWビューを次のように問い合せます。

SELECT * FROM V$ENCRYPTION_WALLET;

ウォレット・ステータスが次のように表示されます。

WRL_TYPE  WRL_PARAMETER                             STATUS
--------  ----------------------------------------  -------
file      C:\oracle\product\11.2.0\db_1\wallets     OPEN

個々の表の暗号化されている列のチェック

SQL*PlusでDESC(DESCRIBE)文を使用して、データベース表内の暗号化されている列をチェックします。

個々の表の暗号化されている列をチェックするには、次のようにします。

- SQL*Plusで、次の構文を使用してDESC文を実行します。

DESC tablename;

次に例を示します。

DESC OE.ORDER_ITEMS;

表スキーマの説明が表示されます。次に例を示します。

Name                                      Null?     Type
----------------------------------------  --------  --------------------------
ORDER_ID                                  NOT NULL  NUMBER(12)
LINE_ITEM_ID                              NOT NULL  NUMBER(3)
PRODUCT_ID                                NOT NULL  NUMBER(6)
UNIT_PRICE                                          NUMBER(8,2)
QUANTITY                                            NUMBER(8) ENCRYPT

現行のデータベース・インスタンスで暗号化されているすべての表列のチェック

暗号化されているすべての表列をチェックするには、DBA_ENCRYPTED_COLUMNSビューを使用します。

現行のデータベース・インスタンスで暗号化されているすべての表列をチェックするには、次のようにします。

- SQL*Plusで、DBA_ENCRYPTED_COLUMNSビューから選択します。
次に例を示します。

SELECT * FROM DBA_ENCRYPTED_COLUMNS;

このSELECT文によって、Oracle Transparent Data Encryptionを使用して暗号化された列を含む、データベースのすべての表および列がリストされます。次に例を示します。

OWNER        TABLE_NAME    COLUMN_NAME    ENCRYPTION_ALG     SALT
-----------  ----------    -----------    ----------------   ----
OE           CUSTOMERS     INCOME_LEVEL   AES 128 bits key   YES
OE           UNIT_PRICE    ORADER_ITEMS   AES 128 bits key   YES
HR           EMPLOYEES     SALARY         AES 192 bits key   YES

関連項目:
DBA_ENCRYPTED_COLUMNSビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

現行のデータベース・インスタンスで暗号化されている表領域のチェック

表6-1に、暗号化されている表領域のチェックに使用できるデータ・ディクショナリ・ビューを示します。

表6-1 暗号化されている表領域のデータ・ディクショナリ・ビュー

データ・ディクショナリ・ビュー

説明

DBA_TABLESPACES

データベース内のすべての表領域が示されます。たとえば、表領域が暗号化されているかどうかを調べるには、次のように入力します。

SELECT TABLESPACE_NAME, ENCRYPTED FROM DBA_TABLESPACES

TABLESPACE_NAME              ENC
---------------------------- ----
SYSTEM                       NO
SYSAUX                       NO
UNCOTBS1                     NO
TEMP                         NO
USERS                        NO
EXAMPLE                      NO
SECURESPACE                  YES

USER_TABLESPACES

現行ユーザーがアクセス可能な表領域について説明します。DBA_TABLESPACESと同じ列があります(PLUGGED_IN列を除く)。

V$ENCRYPTED_TABLESPACES

暗号化されている表領域に関する情報が示されます。次に例を示します。

SELECT * FROM V$ENCRYPTED_TABLESPACES;

TS#  ENCRYPTIONALG  ENCRYPTEDTS
-----------  -------------  -----------
6   AES128          YES

このリストには、表領域番号、暗号化アルゴリズム、暗号化が有効か無効かなどが示されます。

表領域の名前を検出する場合は、次の結合操作を使用します。

SELECT NAME, ENCRYPTIONALG ENCRYPTEDTS
FROM V$ENCRYPTED_TABLESPACES, V$TABLESPACE
WHERE V$ENCRYPTED_TABLESPACES.TS# = V$TABLESPACE.TS#;

関連項目:
データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

Oracle Virtual Private DatabaseとOracle Label Security間の選択

Oracle仮想プライベート・データベース(VPD)とOracle Label Security (OLS)のどちらでも、データベース表で表示できるデータをユーザーごとに制限することができます。では、仮想プライベート・データベースとOracle Label Securityはどう使い分ければよいのでしょうか。仮想プライベート・データベースは、アクセス要件の決定に利用できる既存のデータがある場合に効果的です。たとえば、営業担当者はその本人が入力した顧客注文表の行と列しか閲覧できないように構成できます。Oracle Label Securityは、表のアクセス要件の指定に利用できる一般的なデータ(ユーザー・アカウント、従業員IDなど)がないときに便利です。このタイプのユーザー・アクセス権を決定する場合は、表の行に機密性のレベルを割り当てます。

Oracle Virtual Private DatabaseとOracle Label Securityが相互に補完しあう場合もあります。次の実習形式のOracle Technology Networkチュートリアルでは、Virtual Private DatabaseポリシーでOracle Label Securityユーザー・クリアランスと最小クリアランスを比較する方法が示されています。ユーザー・クリアランスがしきい値を超えている場合、Salary列は非表示になりません。

http://www.oracle.com/technetwork/database/security/ols-cs1-099558.html

表6-2では、Oracle Virtual Private DatabaseとOracle Label Securityの機能が比較されています。

表6-2 Oracle Virtual Private DatabaseとOracle Label Securityの比較

機能

VPD

OLS

行レベル・セキュリティの提供

対応

対応

列レベル・セキュリティ(列マスク)の提供

対応

非対応

表、ビューまたはシノニムへのユーザー定義のPL/SQLパッケージのバインド

対応

非対応 [1]

PL/SQLプロシージャから戻されるWHERE句を動的に追加することによるSQLの変更

対応

非対応

権限を持っているユーザーによるデータベース操作の制限 [2]

非対応

非対応

行の機密性ラベルおよびユーザーのセキュリティ・レベルに基づいた一連の行へのアクセスの制御

非対応

対応

保護されている表に行の機密性ラベルを格納するように設計された列(オプションで非表示)の追加 [3]

非対応

対応

自身を管理するユーザー・アカウントの提供

非対応 [4]

対応 [5]

行レベル・セキュリティに対する事前定義済のPL/SQLパッケージの提供

非対応

対応

Oracle Databaseのデフォルトのインストールでの提供

対応

非対応

Oracle Databaseの追加オプションとしての提供(ライセンスが付与されている必要あり)

非対応

対応

1 Oracle Label Securityでは、セキュリティ・ポリシーを表に追加するために、ユーザーが作成したパッケージではなく、事前定義済のPL/SQLパッケージが使用されます。

2 権限を持っているユーザーのアクセスを制限する必要がある場合は、Oracle Database Vaultの使用を検討してください。

3 通常、この列は、透過性を実現し、追加の列を表示するように設計されていないアプリケーションを破損しないように非表示になっています。

4 Oracle Virtual Private Databaseではユーザー・アカウントは提供されませんが、Virtual Private Databaseポリシーの管理に対して全責任を負うユーザー・アカウントを作成できます。

5 LBACSYSアカウントがOracle Label Securityポリシーを管理します。これによって、特定のユーザー・アカウントがこれらのポリシーに対して責任を負うことから、セキュリティの層が増し、別のユーザーがポリシーを不正に変更する危険性が軽減されます。

Oracle Virtual Private Databaseによるデータ・アクセスの制御

Oracle Virtual Private Database(VPD)では、ユーザーが実行する任意のSQL文にWHERE句を動的に追加することができます。WHERE句により、ユーザーのIDに基づいて、ユーザーがアクセスを許可されているデータがフィルタ処理されます。

この項の内容は次のとおりです。

- Oracle Virtual Private Databaseについて

- チュートリアル: Oracle Virtual Private Databaseポリシーの作成

関連項目:
Oracle Virtual Private Databaseの動作については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

Oracle Virtual Private Databaseについて

Oracle仮想プライベート・データベース(VPD)は、データベースの表またはビュー・レベルの行レベル・セキュリティを提供します。これを拡張して列レベル・セキュリティを提供することもできます。基本的に仮想プライベート・データベースは、仮想プライベート・データベースのセキュリティ・ポリシーの適用対象である表またはビューで使用される、任意のSQL文に追加的なWHERE句を挿入します。(セキュリティ・ポリシーはデータへのアクセスを許可または阻止する機能です。)WHERE句では、セキュリティ・ポリシーを通過したIDを持つ、すなわち、保護する対象のデータへのアクセス権を持つユーザーのみが許可されます。

Oracle Virtual Private Databaseのポリシーには次のコンポーネントがあり、通常はセキュリティ管理者のスキーマに作成されます。

- 仮想プライベート・データベースの表に影響するSQL文に動的WHERE句を追加するPL/SQLファンクション。たとえば、PL/SQLファンクションにより、次のSELECT文が変換されます。

SELECT * FROM ORDERS;

この文は次のように変換されます。

SELECT * FROM ORDERS
WHERE SALES_REP_ID = 159;

この例では、ユーザーが表示できるのは、販売担当者159による注文のみです。このWHERE句の生成に使用されるPL/SQLファンクションは次のようになります。

1
2
3
4
5
6
7
8
9
10
11
12

CREATE OR REPLACE FUNCTION auth_orders(
schema_var IN VARCHAR2,
table_var  IN VARCHAR2
)
RETURN VARCHAR2
IS
return_val VARCHAR2 (400);
BEGIN
return_val := 'SALES_REP_ID = 159';
RETURN return_val;
END auth_orders;
/

この例では、次のとおりです。

- 2から3行目: スキーマ名、OE、および表名ORDERSを格納するパラメータを作成します。(表に使用する2つ目のパラメータtable_varは、ビューとシノニムにも使用できます。)最初にスキーマのパラメータを作成し、次に表、ビュー、またはシノニム・オブジェクトのパラメータを作成します。ファンクション自体がOEスキーマまたはそのORDERS表を指定するのではないことに注意してください。ユーザーが作成する仮想プライベート・データベースのポリシーがこれらのパラメータを使用して、OE.ORDERS表を指定します。

- 5行目: WHERE述語句に使用される文字列を返します。

- 6から10行目: WHERE SALES_REP_ID = 159述語の作成が含まれます。

WHERE句は、ユーザーのセッション情報(ユーザーIDなど)に基づいてユーザー情報をフィルタ処理するよう構成できます。これを行うには、アプリケーション・コンテキストを作成します。アプリケーション・コンテキストは、データベース・ユーザーとデータベース・ユーザー以外のユーザーの両方の認証に使用できます。アプリケーション・コンテキストは、名前と値のペアです。次に例を示します。

SELECT * FROM oe.orders
WHERE sales_rep_id = SYS_CONTEXT('userenv','session_user');

この例では、WHERE句でSYS_CONTEXT PL/SQLファンクションを使用して、userenvコンテキストによって示されるユーザーのセッションID(session_user)を取得しています。アプリケーション・コンテキストの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- パッケージにポリシーを追加する方法。DBMS_RLS.ADD_POLICYファンクションを使用して、パッケージにポリシーを追加します。DBMS_RLS PL/SQLパッケージを使用するには、そのPL/SQLパッケージに対するEXECUTE権限を付与される必要があります。ユーザーSYSがDBMS_RLSパッケージを所有しています。

データベース・レベルで行レベルのセキュリティを強制する方法は、アプリケーション・プログラム・レベルでセキュリティを強制した場合に比べて多くのメリットがあります。データを保護する場所であるデータベース自体にセキュリティ・ポリシーを実装できるため、様々な方法でアクセスされた場合でも攻撃を受ける可能性が低くなります。このセキュリティは、ユーザー(侵入者)がどれだけデータへのアクセスを試行しても存在し、強制されます。データベースに接続するすべてのアプリケーションでポリシーを維持する必要はなく、1箇所(データベース)のみでポリシーを維持できるため、メンテナンス費も低く抑えられます。固有のDML操作に対してポリシーを作成できるため、非常に柔軟性の高いポリシーを適用できます。

チュートリアル: Oracle Virtual Private Databaseポリシーの作成

注文入力データベースのOEのORDERS表には次の情報が含まれています。

Name                                   Null?    Type
-------------------------------------- -------- ---------------------------------
ORDER_ID                               NOTNULL  NUMBER(12)
ORDER_DATE                             NOTNULL  TIMESTAMP(6) WITH LOCAL TIME ZONE
ORDER_MODE                                      VARCHAR2(8)
CUSTOMER_ID                            NOTNULL  NUMBER(6)
ORDER_STATUS                                    NUMBER(2)
ORDER_TOTAL                                     NUMBER(8,2)
SALES_REP_ID                                    NUMBER(6)
PROMOTION_ID                                    NUMBER(6)

表を問い合せる個人に基づいて表へのアクセスを制限すると想定します。たとえば営業担当者は自分が作成した注文のみを確認でき、他の従業員は確認できないようにします。このチュートリアルでは、営業担当者のユーザー・アカウントと財務管理者のアカウントを作成します。次にロールに基づいてデータ・アクセスを制限するOracle仮想プライベート・データベースを作成します。

作成する仮想プライベート・データベース・ポリシーは、PL/SQLファンクションに関連付けられます。VPDポリシーはPL/SQLファンクションまたはプロシージャによって制御されるため、アクセスを制限するポリシーを様々な方法で設計できます。このチュートリアルでは、直属の上司が誰であるかに基づいて従業員のアクセスを制限するファンクションを作成します。このファンクションでは、顧客のIDに基づいて顧客のアクセスが制限されます。

データベース管理者やアプリケーション・アカウントとは別のデータベース・アカウントにVPDポリシーを格納する場合があります。このチュートリアルでは、「チュートリアル: セキュア・アプリケーション・ロールの作成」で作成したsec_adminアカウントを使用してVPDポリシーを作成します。アプリケーション表とVPDポリシーを分けることで、セキュリティを高めます。

行データの機密性に基づいてアクセスを制限する必要がある場合、Oracle Label Security (OLS)を使用します。OLSを使用すると、様々なレベルのセキュリティでデータを分類できます。この場合、行内のデータにアクセスできるユーザーをレベルごとに設定できます。この方法では、データのアクセス制御は、ユーザーの権限ではなくデータ自体に焦点が当てられます。詳細は、「Oracle Label Securityによる行レベルのセキュリティの強制」を参照してください。

このチュートリアルでは、次の手順を実行します。

- 手順1: 必要に応じてセキュリティ管理者アカウントを作成する

- 手順2: セキュリティ管理者アカウントを更新する

- 手順3: このチュートリアルで使用するユーザー・アカウントを作成する

- 手順4: F_POLICY_ORDERSポリシーのファンクションを作成する

- 手順5: ACCESSCONTROL_ORDERS仮想プライベート・データベース・ポリシーを作成する

- 手順6: ACCESSCONTROL_ORDERS仮想プライベート・データベース・ポリシーをテストする

- 手順7: このチュートリアルで使用したコンポーネントを削除する(オプション)

手順1: 必要に応じてセキュリティ管理者アカウントを作成する

「チュートリアル: セキュア・アプリケーション・ロールの作成」で、チュートリアルで使用するためにsec_adminというセキュリティ管理者アカウントを作成しました。このチュートリアルでも、このアカウントを使用できます。まだこのアカウントを作成していない場合は、「手順1: セキュリティ管理者アカウントを作成する」の手順を実行して、sec_adminを作成します。

手順2: セキュリティ管理者アカウントを更新する

sec_adminアカウント・ユーザーには、DBMS_RLSパッケージを使用するための権限が必要です。このパッケージはSYSが所有しているため、このパッケージ権限をsec_adminに付与するには、SYSとしてログオンする必要があります。また、sec_adminユーザーには、OEスキーマのCUSTOMERS表およびHRスキーマのEMPLOYEES表に対するSELECT権限も必要です。

sec_adminにDBMS_RLSパッケージを使用する権限を付与するには、次のようにします。

1. Database Controlを起動します。
Database Controlを起動する手順については、『Oracle Database 2日でデータベース管理者』を参照してください。

2. ユーザーSYSとしてログインし、SYSDBA権限で接続します。

- ユーザー名: SYS

- パスワード: SYSのパスワードを入力します。

- 接続モード: SYSDBA

3. 「サーバー」をクリックして、「サーバー」サブページを表示します。

4. 「セキュリティ」で、「ユーザー」を選択します。
「ユーザー」ページが表示されます。

5. SEC_ADMINユーザーを選択し、「ユーザーの表示」ページで「編集」をクリックします。
「ユーザーの編集」ページが表示されます。

6. 「オブジェクト権限」をクリックして「オブジェクト権限」ページを表示します。

7. 「オブジェクト・タイプの選択」リストから「パッケージ」を選択し、次に「追加」をクリックします。
「パッケージオブジェクト権限の追加」ページが表示されます。

8. 「パッケージオブジェクトの選択」でSYS.DBMS_RLSと入力し、sec_adminにDBMS_RLSパッケージへのアクセス権を与えます。

9. 「使用可能な権限」で「EXECUTE」を選択し、「移動」をクリックして「選択した権限」リストに移動します。

10. 「OK」をクリックします。
「ユーザーの編集」ページが表示されます。

11. 「オブジェクト・タイプの選択」リストから「表」を選択し、次に「追加」をクリックします。
「表オブジェクト権限の追加」ページが表示されます。

12. 「表オブジェクトの選択」フィールドにHR.EMPLOYEESと入力し、sec_adminにHR.EMPLOYEES表へのアクセス権を付与します。

13. 「使用可能な権限」で「SELECT」を選択し、「移動」をクリックして「選択した権限」リストに移動します。

14. 「OK」をクリックします。
「ユーザーの編集」ページが表示されます。これはユーザーsec_adminにEMPLOYEES表およびDBMS_RLSPL/SQLパッケージへのオブジェクト権限があることを示しています。どちらのオブジェクトに対しても付与オプションを選択していないことを確認します。

15. 「適用」をクリックします。
すべての変更内容(ここでは、2つのオブジェクト権限の追加)が、sec_adminユーザー・アカウントに適用されます。

手順3: このチュートリアルで使用するユーザー・アカウントを作成する

OE.ORDERS表へのアクセスを必要とする従業員のための、ユーザー・アカウントを作成する準備ができました。

従業員ユーザー・アカウントを作成するには、次のようにします。

1. Database Controlで「データベース・インスタンス」リンクの「ユーザー」をクリックして、「ユーザー」ページに戻ります。
「ユーザー」ページが表示されます。

2. 「作成」をクリックします。
「ユーザーの作成」ページが表示されます。

3. 次の情報を入力します。

- 名前: LDORAN(Louise Doranのユーザー・アカウントを作成するため)

- プロファイル: DEFAULT

- 認証: Password

- 「パスワードの入力」および「パスワードの確認」: 「パスワードの作成要件」に示されている要件を満たすパスワードを入力します。

- デフォルト表領域: USERS

- 一時表領域: TEMP

- ステータス: Unlocked

4. 「オブジェクト権限」タブを選択します。

5. 「オブジェクト・タイプの選択」リストから「表」を選択し、次に「追加」をクリックします。
「表オブジェクト権限の追加」ページが表示されます。

6. 「表オブジェクトの選択」で、次のテキストを入力します。

OE.ORDERS

このテキストにはスペースを含めないでください。

7. 「使用可能な権限」リストで「SELECT」を選択し、「移動」をクリックして「選択した権限」リストに移動します。「OK」をクリックします。
OE.ORDERSのSELECT権限がリストされた状態で「ユーザーの作成」ページが表示されます。

8. 「OK」をクリックします。
「ユーザー」ページが表示されます。「ユーザー名」列にユーザーldoranが表示されます。

9. ユーザーLDORANの選択ボタンを選択してから、「アクション」リストで「類似作成」を選択します。次に「実行」をクリックします。

「ユーザーの作成」ページが表示されます。

10. 次の情報を入力します。

- 名前: LPOPP(財務管理者のLuis Poppのユーザー・アカウントを作成するため)

- 「パスワードの入力」および「パスワードの確認」: 「パスワードの作成要件」に示されている要件を満たすパスワードを入力します。

11. 「OK」をクリックします。

両方の従業員アカウントが作成され、それらのアカウントには同じ権限が付与されています。ユーザーLPOPPの権限を確認すると、ユーザーLDORANの権限と同じであることがわかります。この段階で、OE.ORDERS表に対してSELECT文を実行すると、どちらのユーザーでも表のすべてのデータを参照できます。

手順4: F_POLICY_ORDERSポリシーのファンクションを作成する

f_policy_ordersポリシーは、ORDERS表に問合せを行うユーザーのフィルタリングに使用される、ポリシーを定義するPL/SQLファンクションです。ユーザーをフィルタリングするために、ポリシー・ファンクションでは、データベースにログイン中のユーザーに関するセッション情報を取得するSYS_CONTEXT PL/SQLファンクションが使用されます。

アプリケーション・コンテキストとパッケージを作成するには、次のようにします。

1. Database Controlで「ログアウト」をクリックし、次に「ログイン」をクリックします。

2. ユーザーsec_adminとしてログインします。

3. 「スキーマ」をクリックして「スキーマ」サブページを表示します。

4. 「プログラム」で「ファンクション」を選択します。
「ファンクション」ページが表示されます。

5. 「オブジェクト・タイプ」メニューが「ファンクション」に設定されていることを確認してから、「作成」をクリックします。
「ファンクションの作成」ページが表示されます。

6. 次の情報を入力します。

- 名前: F_POLICY_ORDERS

- スキーマ: SEC_ADMIN

- ソース: 表示された空のファンクション・コードを削除してから、次のコードを入力し(ただしコード左側の行番号は入力しない)、ログオンしたユーザーが営業担当者かどうかをチェックするファンクションを作成します。最初の行の(schema in varchar2)の先頭にカーソルを置くことで、このテキストをコピー・アンド・ペーストできます。
f_policy_ordersファンクションが、ユーザーのセッション情報を取得するSYS_CONTEXT PL/SQLファンクションを使用してこれを実行し、sec_adminがSELECT権限を持つHR.EMPLOYEES表にあるユーザーのジョブIDとこの情報を比較します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

(schema in varchar2,
tab in varchar2)
return varchar2
as
v_job_id   varchar2(20);
v_user     varchar2(100);
predicate  varchar2(400);

begin
v_job_id  := null;
v_user    := null;
predicate := '1=2';

v_user := lower(sys_context('userenv','session_user'));

select lower(job_id) into v_job_id from hr.employees
where lower(email) = v_user;

if  v_job_id='sa_rep' then
predicate := '1=1';
else
null;
end if;

return predicate;

exception
when no_data_found then
null;
end;

この例では、次のとおりです。

- 1から2行目: 保護する必要があるスキーマ(schema)と表(tab)のパラメータを定義します。このファンクションはOE.ORDERS表を指定しません。「手順5: ACCESSCONTROL_ORDERS仮想プライベート・データベース・ポリシーを作成する」で作成したACCESSCONTROL_ORDERSポリシーによりこれらのパラメータが使用され、OEスキーマとORDERS表が指定されます。最初にschemaパラメータを作成し、その後にtabパラメータを作成してください。

- 3行目: WHERE述語句に使用される文字列を返します。この戻り値のデータ型としてはVARCHAR2が常に使用されます。

- 4から7行目: ジョブID、ログオンしたユーザーのユーザー名、および述語句を格納するよう変数を定義します。

- 9から25行目: 9行目のBEGIN句で開始するWHERE述語の作成が含まれます。

- 10から12行目: v_job_idおよびv_user変数をNULLに設定し、predicate変数を1=2、つまり誤った値に設定します。この段階では、変数が16行目から始まるテストに通るまで、WHERE述語は一切生成されません。

- 14行目: SYS_CONTEXTファンクションを使用してユーザーのセッション情報を取得し、v_user変数に記述します。

- 16から23行目: ジョブIDをログオンしたユーザーと比較して、ユーザーが営業担当者かどうかをチェックします。ログオンしたユーザーのジョブIDがsa_rep(営業担当者)である場合は、predicate変数が1=1に設定されます。つまりユーザーは営業担当者であることになり、テストに通ります。

- 25行目: WHERE role_of_user_logging_on IS "sa_rep"に翻訳されるWHERE述語が返されます。このWHERE述語は、ユーザーLDORANとLPOPPがOE.ORDERS表に対して発行するSELECT文に追加されます。

- 27から29行目: 適切な権限を持っていないユーザーがログオンした場合は、EXCEPTION句が提供されます。

7. 「OK」をクリックします。

手順5: ACCESSCONTROL_ORDERS仮想プライベート・データベース・ポリシーを作成する

仮想プライベート・データベース・ポリシーの作成が終了したので、次に仮想プライベート・データベース・ポリシー、accesscontrol_ordersを作成し、これをORDERS表に追加します。このポリシーには、パフォーマンスを向上させるためにCONTEXT_SENSITIVEパラメータを追加します。これによりOracle Databaseは、アプリケーション・コンテキストの内容が変わった場合にのみ、f_policy_ordersファンクションを実行するようになります(このケースでは、新しいユーザーがログオンした場合)。Oracle Databaseは、ユーザーがORDERS表でSQL SELECT文を実行したときのみポリシーをアクティブにします。このポリシーはINSERT、UPDATEおよびDELETE文を許可しないので、ユーザーはこれらの操作を実行できません。

ACCESSCONTROL_ORDERS仮想プライベート・データベース・ポリシーを作成するには、次のようにします。

1. Database Controlで「データベース・インスタンス」リンクをクリックして、データベースのホームページを表示します。

2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

3. 「セキュリティ」セクションで「仮想プライベート・データベース」をクリックします。
「仮想プライベート・データベース・ポリシー」ページが表示されます。

4. 「作成」をクリックします。
「ポリシーの作成」ページに「ポリシー」サブページが表示されます。

5. 「一般」で、次の入力を行います。

- ポリシー名: ACCESSCONTROL_ORDERS

- オブジェクト名: OE.ORDERS

- ポリシー・タイプ: 「CONTEXT_SENSITIVE」を選択します。
このタイプは、最後にカーソルを使用して以降のコンテキストの変更を検出した場合、文実行時にポリシー・ファンクションを再評価します。複数のクライアントが1つのデータベース・セッションを共有するセッション・プーリングの場合、クライアント切替え時に中間層でコンテキストをリセットする必要があります。Oracle Databaseは、このポリシー・タイプのファンクションにより戻された値をキャッシュしません。常に文の解析時にポリシー・ファンクションを実行します。CONTEXT_SENSITIVEポリシー・タイプは1つのオブジェクトのみに適用されます。

ポリシー・タイプを有効にするには、「有効」ボックスを選択します。

6. 「ポリシー・ファンクション」で次の入力を行います。

- ポリシー・ファンクション: ポリシーの述語を生成するファンクション名(この場合はSEC_ADMIN.F_POLICY_ORDERS)を入力します。

- 長い述語: このボックスは選択しないでください。
通常は、32KBまでの長さの述語を返すためにこのボックスを選択します。このボックスを選択しないと、Oracle Databaseは述語を4000バイトに制限します。

7. 「強制」で、「SELECT」オプションを選択します。残りのオプションについては、選択されている場合もありますが、選択を解除してください。

8. 「セキュリティ関連列」のオプションは、いずれも選択しないでください。

9. 「OK」をクリックします。
「仮想プライベート・データベース・ポリシー」ページのポリシーのリストにACCESSCONTROL_ORDERSポリシーが表示されます。

手順6: ACCESSCONTROL_ORDERS仮想プライベート・データベース・ポリシーをテストする

この段階では、それぞれのユーザーとしてログオンし、ORDERS表からのデータの選択を試すことで、accesscontrol_ordersポリシーをテストします。

ACCESSCONTROL_ORDERSポリシーをテストするには、次のようにします。

1. SQL*Plusを起動します。
コマンド・プロンプトで、次のコマンドを入力してSQL*Plusを起動し、販売担当者Louise Doran(ユーザー名はldoran)としてログインします。

sqlplus ldoran
Enter password: password

SQL*Plusが起動し、デフォルトのデータベースに接続してから、プロンプトが表示されます。

SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. 次のSELECT文を入力します。

SELECT COUNT(*) FROM OE.ORDERS;

Louiseに関する次のような結果が表示されます。表示のとおり、LouiseはOE.ORDERS表のすべての注文にアクセスできます。

COUNT(*)
--------
105

3. 財務管理者のLuis Poppとして接続します。

CONNECT lpopp
Enter password: password

4. 次のSELECT文を入力します。

SELECT COUNT(*) FROM OE.ORDERS;

Popp氏は営業担当者ではないので、OE.ORDERS表のデータへのアクセス権がなく、次のような結果が表示されます。Popp氏にはアクセス権がないので、Oracle Databaseから0行へのアクセスのみが許可されます。

COUNT(*)
--------
0

5. SQL*Plusを終了します。

EXIT

手順7: このチュートリアルで使用したコンポーネントを削除する(オプション)

このチュートリアルの終了後、使用したデータ構造が不要な場合は削除できます。

sec_adminで作成したデータ構造を削除するには、次のようにします。

1. Database Controlで、ユーザーsec_adminとしてログインします。

2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

3. 「セキュリティ」で、「仮想プライベート・データベース」を選択します。
「仮想プライベート・データベース・ポリシー」ページが表示されます。

4. 「検索」で次の情報を入力して、「実行」をクリックします。

- スキーマ名: OE

- オブジェクト名: ORDERS

- ポリシー名: %

作成したポリシーのACCESSCONTROL_ORDERSが表示されます。

5. 「ACCESSCONTROL_ORDERS」を選択し、「削除」をクリックします。

6. 「確認」ページで「はい」をクリックします。

ユーザー・アカウントおよびロールを削除するには、次のようにします。

1. Database Controlで「ログアウト」をクリックし、次に「ログイン」をクリックします。

2. このチュートリアルで使用されるユーザー・アカウントとロールを作成した管理者ユーザー(SYSTEMなど)としてログインします。

3. 「サーバー」をクリックして、「サーバー」サブページを表示します。

4. 「セキュリティ」で、「ユーザー」を選択します。
「ユーザー」ページが表示されます。

5. 次の各ユーザーを選択し、「削除」をクリックしてそれらを削除します。

- LDORAN

- LPOPP

sec_adminは削除しないでください。このマニュアルの以降のチュートリアルで、このアカウントが必要になります。

6. Database Controlを終了します。

Oracle Label Securityによる行レベルのセキュリティの強制

Oracle Label Security(OLS)は、データベース表に行レベルのセキュリティを提供します。セキュリティのレベルを定義する1つまたは複数のセキュリティ・ラベルを表のデータ行に割り当てることで、セキュリティを実装できます。

この項の内容は次のとおりです。

- Oracle Label Securityについて

- Oracle Label Securityのポリシー計画のガイドライン

- チュートリアル: HR.LOCATIONS表へのセキュリティ・ラベルの適用

Oracle Label Securityについて

Oracle Label Securityを使用すると、データベース表を行レベルで保護でき、ニーズに応じて行を様々なセキュリティ・レベルに割り当てることができます。たとえば、非常に機密性の高いデータを含む行にはHIGHLY SENSITIVEというラベルを割り当て、機密性がそれほど高くないデータを含む行にはSENSITIVEというラベルを割り当てたりできます。すべてのユーザーがアクセスできる行にはPUBLICというラベルを割り当てます。ラベルは必要なだけ作成でき、使用する環境のセキュリティ要件に適合させることができます。

ラベルを作成して割り当てたら、Oracle Label Securityを使用して、これらのラベルに基づき特定の行に特定のユーザー認可を割り当てます。以降、Oracle Label Securityはデータ行のラベルとユーザーのセキュリティ・クリアランスを自動的に比較し、行のデータにユーザーがアクセスできるかどうかを決定します。

Oracle Label Securityポリシーには次のコンポーネントがあります。

- ラベル。データおよびユーザー、ユーザーとプログラム・ユニットの認証のラベルは、保護されている特定のオブジェクトへのアクセスを制御します。ラベルは、次の要素で構成されています。

- レベル。レベルにより、行に割り当てる機密性のタイプ(たとえば、SENSITIVEやHIGHLY SENSITIVEなど)が指定されます。

- コンパートメント。(オプション)データは、レベルが同じでも、企業内の別々のプロジェクト(たとえばACME MergerやIT Securityなど)に属すことができます。コンパートメントはこの例ではプロジェクトのことで、より厳密なアクセス制御を定義できます。コンパートメントは行政環境でよく使用されます。

- グループ。(オプション)グループは、データを所有する組織またはデータにアクセスする組織を識別します。たとえば、UK、US、Asia、Europeなどです。グループは商業環境と行政環境の両方で使用され、柔軟性が高いことからコンパートメントのかわりに使用されることもあります。

- ポリシー。ポリシーは、ラベル、ルール、認証と関連付けられる名前です。

Oracle Label Securityのラベルとポリシーは、Database Controlで作成するか、SA_SYSDBA、SA_COMPONENTS、SA_LABEL_ADMIN PL/SQLパッケージを使用して作成できます。PL/SQLパッケージの詳細は、『Oracle Label Security管理者ガイド』を参照してください。このマニュアルには、Database Controlを使用してOracle Label Securityのラベルとポリシーを作成する方法が記載されています。

たとえば、ユーザーがアプリケーション表のSELECT権限を持っているとします。次の図にあるように、ユーザーがSELECT文を実行すると、Oracle Label Securityは選択された各行を評価して、このユーザーがアクセスできるかどうかを決定します。決定は、セキュリティ管理者がユーザーに割り当てた権限とアクセス・ラベルに基づいて行われます。Oracle Label Securityを設定して、UPDATE、DELETE、INSERT文でもセキュリティ・チェックを行うことができます。

Oracle Label Securityのポリシー計画のガイドライン

Oracle Label Securityポリシーを作成する前に、アプリケーション・スキーマにラベルを適用する場所と方法を決定する必要があります。

アプリケーション・データのOracle Label Securityポリシーを適用する場所と方法を決定するには、次のガイドラインに従います。

1. アプリケーション・スキーマを分析します。Oracle Label Securityポリシーを適用する必要がある表を特定します。多くの場合、Oracle Label Securityポリシーが必要となるアプリケーションの表は限られています。たとえば、ルックアップ値や定数を格納している表などは、通常セキュリティ・ポリシーで保護する必要はありません。ただし、患者の病歴や従業員の給与などの機密データを含む表は、ポリシーを使用して保護する必要があります。

2. データ・レベルの使用状況を分析します。表の特定後、表のデータを評価して、表のセキュリティ・レベルを決定します。分析のこの段階では、ビジネス活動について熟知しているユーザーの意見も参考にしてください。

データ・レベルはデータの機密性を表します。データ・レベルには、PUBLIC、SENSITIVE、HIGHLY SENSITIVEなどがあります。今後、機密性がどう変化するかも考慮する必要があります。そうすることで、強固なラベル定義が作成できます。

データ・レコードに割り当てられた機密性ラベルのレベル・コンポーネントが、ユーザーのクリアランスより低いレベルの場合、このレコードにアクセスするユーザーにはこの行へのアクセス権が付与されます。

3. データ・コンパートメントの使用状況を分析します。データ・コンパートメントは主に、行政環境で使用されます。使用するアプリケーションが商業アプリケーションの場合、多くの場合はデータ・コンパートメントを作成しません。

4. データ・グループを分析します。データ・グループとデータ・コンパートメントは通常、組織、地域、データ所有者によってデータへのアクセスを制御するために使用されます。たとえば、アプリケーションが販売アプリケーションの場合、国または地域によって販売データへのアクセスを制御できます。

コンパートメントおよびグループと一緒に機密性ラベルがデータ・レコードに割り当てられた場合、このデータを読み取るユーザーは、データ・ラベル、データ・ラベルのすべてのコンパートメント、機密性ラベル内の少なくとも1つのグループのレベルと同等またはそれ以上のレベルのユーザー・クリアランスを持っている必要があります。グループは階層になっているため、データ・ラベルに割り当てられた機密性ラベルの1つのグループの親を所有している場合は、そのレコードにもアクセスできます。

5. ユーザー分布を分析します。ユーザーを複数のユーザー・タイプに分類します。たとえば、通常ユーザー、特権ユーザー、管理ユーザーのいずれかに指定します。ユーザーのカテゴリを作成したら、手順2で作成したデータ・レベルと比較します。カテゴリは、手順1で実行したスキーマ分析で識別した各表に正確に対応する必要があります。次に、ユーザー分布の組織構造を手順4で識別したデータ・グループと比較します。

6. 特権ユーザーと管理ユーザーを確認して、割り当てるOracle Label Security認可を決定します。Oracle Label Securityには、ユーザーに割り当てることのできる特別な認可が複数あります。多くの場合、通常ユーザーに特別な認可は必要ありません。認可の詳細は、『Oracle Label Security管理者ガイド』を参照してください。

7. 収集したデータを確認し、ドキュメント化します。この手順は企業全体の連続性を維持するために重要であり、ドキュメントは企業のセキュリティ・ポリシーの一部となります。たとえば、このドキュメントには保護されるアプリケーションのリストとその理由などが含まれます。

チュートリアル: HR.LOCATIONS表へのセキュリティ・ラベルの適用

このチュートリアルでは、Oracle Label Securityを使用する一般的な方法を説明します。ここではHR.LOCATIONS表にセキュリティ・ラベルを適用します。ユーザーsking、kpartner、ldoranは、この表内の特定の行に対して、LOCATIONS表の都市に基づくアクセス権を持っています。

Oracle Label Securityを使用して、行データに焦点を当て、データの機密性に基づいて様々なアクセス・レベルを設計することにより、ユーザーによるデータ・アクセスを制限します。ユーザー権限または組織内のユーザーのジョブ・タイトルなどの他の方法に焦点を当ててユーザー・アクセスを制限する必要がある場合、仮想プライベート・データベース・ポリシーとともに使用するPL/SQLファンクションまたはプロシージャを作成できます。詳細は、「Oracle Virtual Private Databaseによるデータ・アクセスの制御」を参照してください。

HR.LOCATIONSのスキーマは次のようになります。

Name                                      Null?    Type
----------------------------------------- -------- -------------
LOCATION_ID                               NOT NULL NUMBER(4)
STREET_ADDRESS                                     VARCHAR2(40)
POSTAL_CODE                                        VARCHAR2(12)
CITY                                      NOT NULL VARCHAR2(30)
STATE_PROVINCE                                     VARCHAR2(25)
COUNTRY_ID                                         CHAR(2)

次のラベルを適用します。

ラベル

権限

CONFIDENTIAL

ミュンヘン、オックスフォード、ローマに読取りアクセス権を付与します。

SENSITIVE

北京、東京、シンガポールに読取りアクセス権を付与します。

PUBLIC

HR.LOCATIONS内の他のすべての都市に読取りアクセス権を付与します。

このチュートリアルでは、次の手順を実行します。

- 手順1: Oracle Label Securityを登録し、LBACSYSアカウントを有効にする

- 手順2: Oracle Label Securityのチュートリアルで使用する1つのロールおよび3人のユーザーを作成する

- 手順3: Oracle Label SecurityのACCESS_LOCATIONSポリシーを作成する

- 手順4: ACCESS_LOCATIONSポリシーのレベル・コンポーネントを定義する

- 手順5: ACCESS_LOCATIONSポリシーのデータ・ラベルを作成する

- 手順6: ACCESS_LOCATIONSポリシーのユーザー認可を作成する

- 手順7: HR.LOCATIONS表にACCESS_LOCATIONSポリシーを適用する

- 手順8: HR.LOCATIONSデータにACCESS_LOCATIONSラベルを追加する

- 手順9: ACCESS_LOCATIONSポリシーをテストする

- 手順10: このチュートリアルで使用したコンポーネントを削除する(オプション)

手順1: Oracle Label Securityを登録し、LBACSYSアカウントを有効にする

Oracle Label Securityは、デフォルトのOracle Databaseのインストールでインストールされます。ただし、Oracle Label Securityを登録してから、デフォルトのOracle Label Securityアカウント(LBACSYSと呼ばれる)を有効にする必要があります。

- Oracle DatabaseでのOracle Label Securityの登録

- Oracle Label Securityのデフォルトのユーザー・アカウントLBACSYSの有効化

Oracle DatabaseでのOracle Label Securityの登録

インストールの完了後、Oracle Label SecurityをOracle Databaseに登録する必要があります。SQL*Plusで次のSELECT文を入力すると、Oracle Label Securityがすでに登録されているかどうかを確認できます。PARAMETER列では大/小文字が区別されるため、ここに示されているとおりに入力してください。

SELECT * FROM V$OPTION WHERE PARAMETER = 'Oracle Label Security';

出力がTRUEの場合、Oracle Label Securityは登録されています。「Oracle Label Securityのデフォルトのユーザー・アカウントLBACSYSの有効化」に進みます。FALSEの場合は、Oracle Label Securityを登録します。

Oracle Label SecurityをOracle Databaseに登録するには、次のようにします。

1. データベース、Database Controlコンソール・プロセスおよびリスナーを停止します。

- UNIX: SYSOPER権限を持つユーザーSYSとしてSQL*Plusにログインし、データベースを停止します。次に、コマンドラインからDatabase Controlコンソール・プロセスとリスナーを停止します。
次に例を示します。

sqlplus sys as sysoper
Enter password: password

SQL> SHUTDOWN IMMEDIATE
SQL> EXIT

$ emctl stop dbconsole
$ lsnrctl stop [listener_name]

Oracle RACインストールの場合は、次のようにして、各データベース・インスタンスを停止します。

$ srvctl stop database -d db_name

- Windows: 「コントロール パネル」の「サービス」ツールから、データベース、Database Controlコンソール・プロセスおよびリスナーを停止します。Oracle Databaseサービスの名前は、Oracleで始まります。

2. Oracle Label Securityを次の手順で有効にします。

- UNIX: 次のコマンドを実行します。

$ cd $ORACLE_HOME/rdbms/lib
$ make -f ins_rdbms.mk lbac_on ioracle

- Windows: ORACLE_BASE\ORACLE_HOME\binディレクトリで、oralbacll.dll.dblファイルの名前をoralbacll.dllに変更します。

3. データベースとリスナーを再起動します。(まだDatabase Controlコンソール・プロセスは再起動しないでください。)

- UNIX: SYSOPER権限を持つユーザーSYSとしてSQL*Plusにログインし、データベースを再起動します。次に、コマンドラインからリスナーを再起動します。
次に例を示します。

sqlplus sys as sysoper
Enter password: password

SQL> STARTUP
SQL> EXIT

$ lsnrctl start [listener_name]

Oracle RACインストールの場合は、次のようにして、各データベース・インスタンスを再起動します。

$ srvctl start database -d db_name

- Windows: 「コントロール パネル」の「サービス」ツールから、データベースおよびリスナーを再起動します。Oracle Databaseサービスの名前は、Oracleで始まります。

4. Database Configuration Assistantを起動します。

- UNIX: 端末ウィンドウで次のコマンドを入力します。

dbca

一般的に、dbcaは$ORACLE_HOME/binディレクトリにあります。

- Windows: 「スタート」メニューから「すべてのプログラム」をクリックします。次に「Oracle - ORACLE_HOME」→「Configuration and Migration Tools」→「Database Configuration Assistant」の順にクリックします。
または、次のコマンド・プロンプトでDatabase Configuration Assistantを起動できます。

dbca

UNIXでは一般的に、dbcaはORACLE_BASE\ORACLE_HOME\binディレクトリにあります。

5. 「ようこそ」ページで「次へ」をクリックします。
「操作」ページが表示されます。

6. 「データベース・オプションの構成」を選択して、「次へ」をクリックします。
「データベース」ページが表示されます。

7. リストから、Oracle Databaseをインストールしたデータベースを選択し、DBAロールが付与されているユーザーの名前(ユーザーSYSなど)およびパスワードを入力します。「次へ」をクリックします。
「データベース・コンテンツ」ページが表示されます。

8. 「Oracle Label Security」を選択し、「次へ」をクリックします。
「接続モード」ページが表示されます。

9. このデータベースの作成時の選択内容に応じて「専用サーバー・モード」と「共有サーバー・モード」のどちらかを選択し、「終了」をクリックし、確認プロンプトで「OK」をクリックします。
Oracle Label Securityが登録され、データベース・インスタンスが再起動されます。

10. Database Configuration Assistantを終了します。

11. Database Controlコンソール・プロセスを再起動します。

- UNIX: 次のコマンドを実行します。

$ emctl start dbconsole

- Windows: 「コントロール パネル」の「サービス」ツールから、Database Controlコンソール・プロセス(たとえば、データベースの名前がorclの場合はOracleDBConsoleorcl)を再起動します。

Oracle Label Securityのデフォルトのユーザー・アカウントLBACSYSの有効化

Oracle Label Securityのインストール・プロセスにより、Oracle Label Security機能を管理するデフォルトのユーザー・アカウントLBACSYSが作成されます。管理者は、このユーザーと同じ権限(SA_SYSDBA、SA_COMPONENTS,およびSA_LABEL_ADMIN PL/SQLパッケージに対するEXECUTE権限)を持つユーザーを作成できます。デフォルトでは、LBACYSは、パスワードの期限が切れている、ロックされたアカウントとして作成されます。次の手順では、LBACYSをロック解除し、新しいパスワードを作成します。ユーザーLBACSYSはDatabase Controlを使用してOracle Label Securityポリシーを作成しているため、SELECT ANY DICTIONARY権限をLBACSYSに付与する必要があります。

LBACSYSユーザー・アカウントを有効にするには、次のようにします。

1. SYSDBA権限を持つユーザーSYSとしてDatabase Controlにログインします。

2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

3. 「セキュリティ」で、「ユーザー」を選択します。
「ユーザー」ページが表示されます。

4. LBACSYSユーザーを選択し、「ユーザーの表示」ページで「編集」をクリックします。
「ユーザーの編集」ページが表示されます。

5. 「ステータス」の横にある「ロック解除」を選択します。

6. 「パスワードの入力」および「パスワードの確認」フィールドで、「パスワードの作成要件」に従ってセキュアなパスワードを入力します。
セキュリティを考慮して、以前のリリースのOracle Databaseで使用していたパスワードと同じパスワードは再利用しないでください。

7. 「ロール」をクリックして「ユーザーの編集: LBACSYS」ページを表示します。

8. 「リストを編集」をクリックします。
「ロールの変更」ページが表示されます。

9. 「使用可能なロール」リストからSELECT_CATALOG_ROLEロールを選択し、「移動」をクリックして「選択したロール」リストに移動します。次に「OK」をクリックして、「ユーザーの編集」ページに戻ります。

10. 「システム権限」をクリックします。

11. 「リストを編集」をクリックします。
「システム権限の変更」ページが表示されます。

12. 「使用可能なシステム権限」リストからSELECT ANY DICTIONARYを選択し、「移動」をクリックして「選択したシステム権限」リストに移動します。次に「OK」をクリックして、「ユーザーの編集」ページに戻ります。

13. 「オブジェクト権限」を選択します。

14. 「オブジェクト・タイプの選択」リストから「パッケージ」を選択し、次に「追加」をクリックします。

15. 「パッケージオブジェクト権限の追加」ページで、次の手順を実行します。

1. 「パッケージオブジェクトの選択」で、懐中電灯アイコンを選択して「パッケージオブジェクトの選択」ウィンドウを表示します。

2. 「スキーマ」をLBACSYSに設定します。

3. 「パッケージ名の検索」フィールドに%と入力し、「実行」をクリックします。

4. リストされたオブジェクトの両方のページについて、リストされているパッケージ・オブジェクトをすべて選択します。

5. 「選択」をクリックして、「パッケージオブジェクト権限の追加」ウィンドウに戻ります。

6. 「使用可能な権限」で、EXECUTE権限を「選択した権限」リストに移動します。

7. 「OK」をクリックします。

16. 「OK」をクリックして「ユーザーの編集」ページに戻り、「適用」をクリックして変更を適用します。

手順2: Oracle Label Securityのチュートリアルで使用する1つのロールおよび3人のユーザーを作成する

ロールと3人のユーザーを作成し、これらのユーザーにロールを付与します。

- ロールの作成

- ユーザーの作成

ロールの作成

emp_roleロールは、これから作成する3人のユーザーに必要な権限を付与します。

emp_roleロールを作成するには、次のようにします。

1. ユーザーSYSTEMとしてDatabase Controlに接続します。

2. データベースのホームページで、「サーバー」をクリックして「サーバー」サブページを表示します。

3. 「セキュリティ」セクションで「ロール」をクリックします。
「ロール」ページが表示されます。

4. 「作成」をクリックします。
「ロールの作成」ページが表示されます。

5. 「名前」フィールドでEMP_ROLEと入力し、「認証」は「なし」のままにします。

6. 「オブジェクト権限」サブページを選択します。

7. 「オブジェクト・タイプの選択」リストから「表」を選択し、次に「追加」をクリックします。
「表オブジェクト権限の追加」ページが表示されます。

8. 「表オブジェクトの選択」でHR.LOCATIONSと入力し、HRスキーマのLOCATIONS表を選択します。次に「使用可能な権限」で、SELECTを「選択した権限」リストに移動します。

9. 「OK」をクリックして「ロールの作成」ページに戻り、「OK」をクリックして「ロール」ページに戻ります。

ユーザーの作成

作成する3人のユーザーは、役職に基づき、HR.LOCATIONS表に対して異なるレベルのアクセス権を持ちます。Steven King(sking)は広報部長で、HR.LOCATIONS表への完全な読取りアクセス権を持ちます。Karen Partners(kpartner)は販売部マネージャでより制限されたアクセス権を持ち、Louise Doran(ldoran)は販売担当者でアクセス権が最も制限されています。

ユーザーを作成するには、次のようにします。

1. Database ControlにSYSTEMとしてログインしていることを確認します。
SYSTEMとしてログインしていない場合、「ログアウト」を選択し、次に「ログイン」を選択します。「ログイン」ページでSYSTEMとこのアカウントに割り当てられたパスワードを入力します。「接続モード」を「標準」に設定します。「ログイン」を選択してログインします。

SYSTEMとしてログインしている場合、「データベース・インスタンス」リンクをクリックして、ホームページを表示します。

2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

3. 「セキュリティ」セクションで「ユーザー」をクリックします。
「ユーザー」ページが表示されます。

4. 「作成」をクリックします。
「ユーザーの作成」ページが表示されます。

5. 次の情報を入力します。

- 名前: SKING

- プロファイル: DEFAULT

- 認証: パスワード

- 「パスワードの入力」および「パスワードの確認」: 「パスワードの作成要件」に示されている要件を満たすパスワードを入力します。

- デフォルト表領域: USERS

- 一時表領域: TEMP

- ステータス: 「ロック解除」に設定します。

- ロール: 「ロール」サブページを選択し、「リストを編集」を選択してemp_roleロールをskingに付与します。「使用可能なロール」リストからemp_roleを選択し、「移動」をクリックして「選択したロール」リストに移動します。「OK」をクリックします。「ユーザーの作成」ページで、CONNECTロールとemp_roleロールの両方で「デフォルト」ボックスが選択されていることを確認します。

- システム権限: 「システム権限」サブページを選択し、「リストを編集」をクリックしてCREATE SESSION権限を付与します。skingにはADMIN OPTIONオプションを付与しないでください。

6. 「OK」をクリックして「ユーザーの作成」ページに戻り、そこで「OK」をクリックして「ユーザー」ページに戻ります。

7. 「ユーザー」ページでSKINGを選択し、「アクション」を「類似作成」に設定して「実行」をクリックします。
「ユーザーの作成」ページが表示されます。

8. kpartnerおよびldoranのアカウントを作成します。
名前とパスワードを作成します。(「パスワードの作成要件」を参照してください。)ロールやシステム権限を付与する必要はありません。これらのアカウントのロールおよびシステム権限は、skingアカウントで定義され、自動的に作成されます。

この段階で、同じ権限を持つ3人のユーザーが作成されました。これらのすべてのユーザーは、EMP_ROLEロールによってHR.LOCATIONS表に対するSELECT権限を持っています。

手順3: Oracle Label SecurityのACCESS_LOCATIONSポリシーを作成する

ここでは、ACCESS_LOCATIONSポリシーを作成します。

ACCESS_LOCATIONSポリシーを作成するには、次のようにします。

1. ユーザーLBACSYSとしてDatabase Controlにログインします。
「ログアウト」を選択し、次に「ログイン」を選択します。「ログイン」ページで、ユーザーLBACSYSとしてログインします。「接続モード」を「標準」に設定します。「ログイン」を選択してログインします。

2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

3. 「セキュリティ」セクションで「Oracle Label Security」をクリックします。
「Label Securityポリシー」ページが表示されます。

4. 「作成」をクリックします。

5. 「Label Securityポリシーの作成」ページで、次の情報を入力します。

- 名前: ACCESS_LOCATIONS

- ラベル列: OLS_COLUMN
以降で、表にポリシーを適用するときに、このラベル列が表に追加されます。デフォルトでは、ポリシー・ラベル列のデータ型はNUMBER(10)です。

- ラベル列の非表示: ラベル列が非表示にならないように、このボックスの選択を解除します。(デフォルトでは選択が解除されています。)
通常、ラベル列は非表示にしますが、開発段階ではチェックできるように表示しておきます。ポリシーの作成が完了し、使用が開始された後、アプリケーションから見えないようにこの列は非表示にします。多くのアプリケーションは、新たな列を表示するようには設計されていないため、列を非表示にすると、アプリケーションが破損しなくなります。

- 有効: このボックスを選択すると、ポリシーが有効になります。(デフォルトでは有効になっています。)

- インバース・ユーザーの読取りおよび書込みグループ(INVERSE_GROUP): このオプションは選択しないでください。

- デフォルトのポリシー強制オプション: 「ポリシー強制の適用」を選択して、次のオプションを選択します。
すべての問合せ用(READ_CONTROL)

ラベル列のUPDATE操作にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)

6. 「OK」をクリックします。
ACCESS_LOCATIONSポリシーが「Label Securityポリシー」ページに表示されます。

手順4: ACCESS_LOCATIONSポリシーのレベル・コンポーネントを定義する

この段階では、ポリシーが作成され、ポリシーの強制オプションが設定されています。次に、ポリシーで使用するラベル・コンポーネントを作成します。

少なくとも、PUBLICまたはSENSITIVEなど、1つ以上のレベルを作成し、詳細名、短縮名、機密性レベルを表す数値を定義する必要があります。区分およびグループはオプションです。

レベル数値は、対応するラベルに必要な機密性のレベルを表します。セキュリティ・ポリシーに追加のレベルが必要になる場合に備えて、後で拡張できるような数値の範囲を選択します。たとえば、LOW_SENSITIVITYとHIGH_SENSITIVITYというレベルを追加する必要が生じた場合、LOW_SENSITIVITYには7300、HIGH_SENSITIVITYには7600という数値を割り当て、ポリシーにより作成されるセキュリティ・スケールに適合させることができます。通常、番号が大きいほどデータの機密性が高くなります。

コンパートメントは、ラベルが割り当てられたデータの機密性を表す領域を識別し、レベル内のより詳細なレベルを表します。コンパートメントはオプションです。

グループは、データを所有する組織またはデータにアクセスする組織を識別します。グループはデータの配布を制御する際に有用であり、組織的な変更にもタイムリに対応できます。グループはオプションです。

この手順では、レベル・コンポーネントを定義します。レベル・コンポーネントは、ACCESS_LOCATIONSポリシーで作成する必要があるSENSITIVE、CONFIDENTIAL、PUBLICラベルの名前と関係に影響します。

ACCESS_LOCATIONSポリシーのレベル・コンポーネントを定義するには、次のようにします。

1. 「Label Securityポリシー」ページでACCESS_LOCATIONSポリシーを選択し、次に「編集」を選択します。
「Label Securityポリシーの編集」ページが表示されます。

2. 「ラベル・コンポーネント」サブページを選択します。

3. 「レベル」で、「 5行追加」をクリックし、次のように詳細名、短縮名および数値タグを入力します(フィールド間を移動するには、[Tab]キーを押します)。

詳細名

短縮名

数値タグ

SENSITIVE

SENS

3000

CONFIDENTIAL

CONF

2000

PUBLIC

PUB

1000

4. 「適用」をクリックします。

手順5: ACCESS_LOCATIONSポリシーのデータ・ラベルを作成する

この手順では、「手順4: ACCESS_LOCATIONSポリシーのレベル・コンポーネントを定義する」で作成したポリシーのデータ・ラベルを作成します。データ・ラベルを作成するには、各レベルに数値タグを割り当てる必要があります。このタグの数値は、後でポリシーを表に適用するときにセキュリティ列に格納されます。これは、ラベルの機密性とは関係がなく、ポリシーのラベルの識別にのみ使用されます。

データ・ラベルを作成するには、次のようにします。

1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

2. ACCESS_LOCATIONSポリシーの選択ボタンを選択します。

3. 「アクション」リストで「データ・ラベル」を選択し、次に「実行」をクリックします。
「データ・ラベル」ページが表示されます。

4. 「追加」をクリックします。
「データ・ラベルの作成」ページが表示されます。

5. 次の情報を入力します。

- 数値タグ: 1000と入力します。

- レベル: PUBと入力します。

6. 「OK」をクリックします。
「データ・ラベル」ページにデータ・ラベルが表示されます。

7. もう一度「追加」をクリックし、CONFレベルのデータ・ラベルを次のように作成します。

- 数値タグ: 2000と入力します。

- レベル: リストからCONFを選択します。

8. 「OK」をクリックします。

9. もう一度「追加」をクリックし、SENSレベルのデータ・ラベルを次のように作成します。

- 数値タグ: 3000と入力します。

- レベル: リストからSENSを選択します。

10. 「OK」をクリックします。
この段階で、「データ・ラベル」ページにCONF、PUBおよびSENSラベルが表示されます。

後で、HR.LOCATIONS表にポリシーを適用したときに、タグの数値はセキュリティ列に格納されます。これは、ラベルの機密性とは関係がなく、ポリシーのラベルの識別にのみ使用されます。

手順6: ACCESS_LOCATIONSポリシーのユーザー認可を作成する

次に、ポリシーのユーザー認可を作成します。

ポリシーのユーザー認可を作成するには、次のようにします。

1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

2. ACCESS_LOCATIONSポリシーの選択ボタンを選択します。

3. 「アクション」リストで「認可」を選択し、次に「実行」をクリックします。
「認可」ページが表示されます。

4. 「ユーザーの追加」をクリックします。

「ユーザーの追加: ユーザー」ページが表示されます。

5. 「データベース・ユーザー」で「追加」をクリックします。
「検索と選択: ユーザー」ページが表示されます。SKINGと入力して、「実行」をクリックします。

通常、データベース・ユーザー・アカウントは、たとえばCREATE USER SQL文を使用してデータベースにすでに作成されています。

その他のオプションは「データベース以外のユーザー」です。アプリケーション・ユーザーの多くは、データベース・ユーザー以外のユーザーとなります。データベース・ユーザー以外のユーザーは、データベース内には存在していません。Oracle Label Securityの命名方式に一致し、VARCHAR2(30)の長さのフィールドに適合していれば、どのユーザー名も追加できます。ただし、アプリケーションがデータベースに接続したときに、データベース・ユーザー以外のユーザーに関連するセキュリティ情報は、Oracle Databaseにより自動的には構成されません。この場合、アプリケーションは、Oracle Label Security関数を呼び出し、データベース・ユーザーではないユーザーのラベル認可を行う必要があります。

6. ユーザーSKINGのチェック・ボックスを選択して、「選択」をクリックします。
「ユーザーの作成」ページにユーザーSKINGが表示されます。

7. ユーザーSKINGのチェック・ボックスを選択して、「次へ」をクリックします。
(SKINGのチェック・ボックスを表示するために、ページの更新が必要な場合があります。)

8. 「レベル、区分およびグループ」ページで、次の設定を入力します。

- 最大レベル: SENS(SENSITIVE)

- 最小レベル: CONF(CONFIDENTIAL)

- デフォルト・レベル: SENS

- 行レベル: SENS

9. 「次へ」をクリックして、「権限」ページに移動します。

10. 「権限」ページで「次へ」を選択して、「監査」ページに移動します。
ラベル認可を介してポリシーが強制されます。「権限」ページではユーザーによるポリシーのラベル認可をオーバーライド可能にするため、オプションは選択しないでください。

11. 「ユーザーの追加: 監査」ページの「監査」ペインで、すべての監査の操作がNoneに設定されていることを確認し、「次へ」をクリックします。
「確認」ページが表示されます。

12. 設定が正しいことを確認し、「終了」をクリックします。

「確認」ページに、選択したすべての認可設定が表示されます。

13. 手順4から12までを繰り返してユーザーKPARTNERに対して次の認可を作成し、このユーザーがHR.LOCATIONSの機密データおよびパブリック・データを読み取れるようにします。

- レベル、区分およびグループ: 4つすべてのレベルを次のように設定します。

- 最大レベル: CONF(CONFIDENTIAL)

- 最小レベル: PUB(PUBLIC)

- デフォルト・レベル: CONF

- 行レベル: CONF

- 権限: 権限は選択しません。

- 監査:すべてNoneに設定します。

14. ユーザーLDORANに対して次の認可を作成します。このユーザーは、HR.LOCATIONSのパブリック・データの読取りのみが許可されます。

- レベル、区分およびグループ: 4つすべてのレベルをPUBに設定します。

- 権限: 権限は選択しません。

- 監査:すべてNoneに設定します。

手順7: HR.LOCATIONS表にACCESS_LOCATIONSポリシーを適用する

次に、HR.LOCATIONS表にポリシーを適用します。

HR.LOCATIONS表にACCESS_LOCATIONSポリシーを適用するには、次のようにします。

1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

2. ACCESS_LOCATIONSポリシーの選択ボタンを選択します。

3. 「アクション」リストで「適用」を選択し、次に「実行」をクリックします。
「適用」ページが表示されます。

4. 「作成」をクリックします。
「表の追加」ページが表示されます。

5. 「表」フィールドに、HR.LOCATIONSと入力します。

6. 「ポリシー列の非表示」ボックスが選択されていないことを確認します。

7. 「有効」ボックスが選択されていることを確認します。

8. 「ポリシー強制オプション」で、「デフォルトのポリシー強制を使用」を選択します。
ACCESS_LOCATIONSのポリシーの強制のデフォルト・オプションは次のとおりです。

- すべての問合せ用(READ_CONTROL)

- ラベル列の更新にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)

9. 「OK」をクリックします。
ACCESS_LOCATIONSポリシーがHR.LOCATIONS表に適用されます。

手順8: HR.LOCATIONSデータにACCESS_LOCATIONSラベルを追加する

ACCESS_LOCATIONSポリシーをHR.LOCATIONS表に適用したら、ポリシーのラベルをLOCATIONSのOLS_COLUMNに適用する必要があります。ユーザーHR(この表の所有者)がこの操作を行うには、LOCATIONSの非表示のOLS_COLUMN列にデータ・ラベルを追加する前に、対象の場所への完全なアクセス権を持っている必要があります。

- HR.LOCATIONS表に対するHR FULLポリシー権限の付与

- HR.LOCATIONSのOLS_COLUMN表の更新

HR.LOCATIONS表に対するHR FULLポリシー権限の付与

ラベル・セキュリティ管理ユーザーLBACSYSは、必要な権限をHRに付与できます。

ACCESS_LOCATIONSポリシーへの完全なアクセス権をHRに付与するには、次のようにします。

1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

2. ACCESS_LOCATIONSポリシーの選択ボタンを選択します。

3. 「アクション」リストから「認可」を選択し、「実行」をクリックします。
「認可」ページが表示されます。

4. 「ユーザーの追加」をクリックします。
「ユーザーの追加」ページが表示されます。

5. 「データベース・ユーザー」で「追加」をクリックします。
「検索と選択」ウィンドウが表示されます。

6. ユーザーHRのボックスを選択して、「選択」をクリックします。
「ユーザーの作成」ページにユーザーHRが表示されます。

7. 「次へ」をクリックして「ユーザーの追加: レベル、区分およびグループ」ページを表示し、「次へ」をもう一度クリックして「権限」ページを表示します。

8. 「すべてのラベル・セキュリティ・チェックを省略(FULL)」権限を選択し、「次へ」をクリックします。
「監査」ページが表示されます。

9. 「次へ」をクリックします。
「確認」ページが表示されます。

10. 「終了」をクリックします。
この段階で、HRは他のユーザーとともに「認可」ページにリストされています。

11. Database Controlを終了します。

HR.LOCATIONSのOLS_COLUMN表の更新

この時点で、ユーザーHRはHR.LOCATIONS表のOLS_COLUMN列を更新して、CITY列の都市に基づいて表内の特定の行に割り当てられるデータ・ラベルを追加できます。

HR.LOCATIONSのOLS_COLUMN表を更新するには、次のようにします。

1. SQL*Plusで、ユーザーHRとして接続します。

CONNECT HR
Enter password: password

HRとしてログインできない場合、このアカウントはロックされているか、期限が切れているため、SYSTEMとしてログインしてから、次の文を入力します。passwordは、HRアカウントに適したパスワードに置き換えます。セキュリティを考慮して、以前のリリースのOracle Databaseで使用していたパスワードと同じパスワードは再利用しないでください。「パスワードの作成要件」を参照してください。

ALTER USER HR ACCOUNT UNLOCK IDENTIFIED BY password

このALTER USER文を実行したら、ユーザーHRとして再度ログインしてみてください。

2. 次のUPDATE文を入力して、北京、東京、シンガポールにSENSラベルを適用します。

UPDATE LOCATIONS
SET ols_column = CHAR_TO_LABEL('ACCESS_LOCATIONS','SENS')
WHERE UPPER(city) IN ('BEIJING', 'TOKYO', 'SINGAPORE');

3. 次のUPDATE文を入力して、ミュンヘン、オックスフォード、ローマにCONFラベルを適用します。

UPDATE LOCATIONS
SET ols_column = CHAR_TO_LABEL('ACCESS_LOCATIONS','CONF')
WHERE UPPER(city) IN ('MUNICH', 'OXFORD', 'ROMA');

4. 次のUPDATE文を入力して、残りの都市にPUBラベルを適用します。

UPDATE LOCATIONS
SET ols_column = CHAR_TO_LABEL('ACCESS_LOCATIONS','PUB')
WHERE ols_column IS NULL;

5. 列が更新されたことをチェックするには、次の文を入力します。

SELECT LABEL_TO_CHAR (OLS_COLUMN) FROM LOCATIONS;

次の出力が表示されます。

LABEL_TO_CHAR(OLS_COLUMN)
-----------------------------------------------------------------------------
CONF
PUB
SENS
PUB
PUB
PUB
PUB
PUB
PUB
PUB
SENS

LABEL_TO_CHAR(OLS_COLUMN)
-----------------------------------------------------------------------------
PUB
PUB
SENS
PUB
CONF
PUB
CONF
PUB
PUB
PUB
PUB

LABEL_TO_CHAR(OLS_COLUMN)
-----------------------------------------------------------------------------
PUB

23 rows selected.

注意:
前述の問合せでラベル列名(OLS_COLUMN)を明示的に使用すると、ラベル列が非表示になっていても表示できます。
ラベル列が非表示であるときに、ラベル列名を明示的に指定しない場合、ラベル列は問合せ結果に表示されません。たとえば、ラベル列が非表示である場合、SELECT * FROM LOCATIONS問合せを実行しても、ラベル列は表示されません。この機能を使用すると、アプリケーションからラベル列が見えないようにできます。ラベル列が追加される前に設計されたアプリケーションには、ラベル列は認識されず、表示されません。

手順9: ACCESS_LOCATIONSポリシーをテストする

ACCESS_LOCATIONSポリシーの作成は完了しました。次に、ポリシーをテストします。ポリシーは、3人の各ユーザーとしてSQL*Plusにログインし、HR.LOCATIONS表に対してSELECTを実行することでテストできます。

ACCESS_LOCATIONSポリシーをテストするには、次のようにします。

1. SQL*Plusでユーザーskingとして接続します。

CONNECT sking
Enter password: password

2. 次のように入力します。

次のコマンドは、読み取りやすいように表の列幅を書式設定します。この手順を実行するのは、(kpartnerおよびldoranのログイン時も含めて)セッション全体に対して1回のみです。

COL city HEADING City FORMAT a25
COL country_id HEADING Country FORMAT a11
COL Label format a10

次に、SELECT文を次のように入力します。

SELECT city, country_id, LABEL_TO_CHAR (OLS_COLUMN)
AS Label FROM hr.locations ORDER BY ols_column;

ユーザーskingは、HR.LOCATIONS表の23行すべてにアクセスできます。アクセスはラベルCONFおよびSENSが付けられた行に対してのみ認可されていますが、ラベルPUBが付けられた行を読み取ることができます(ただし、書き込むことはできません)。

City                      Country     LABEL
------------------------- ----------- ----------
Venice                    IT          PUB
Utrecht                   NL          PUB
Bern                      CH          PUB
Geneva                    CH          PUB
Sao Paulo                 BR          PUB
Stretford                 UK          PUB
Mexico City               MX          PUB
Hiroshima                 JP          PUB
Southlake                 US          PUB
South San Francisco       US          PUB
South Brunswick           US          PUB
Seattle                   US          PUB
Toronto                   CA          PUB
Whitehorse                CA          PUB
Bombay                    IN          PUB
Sydney                    AU          PUB
London                    UK          PUB
Oxford                    UK          CONF
Munich                    DE          CONF
Roma                      IT          CONF
Singapore                 SG          SENS
Tokyo                     JP          SENS
Beijing                   CN          SENS

23 rows selected.

3. ユーザーkpartnerとldoranで、手順1と手順2を繰り返します。
ユーザーKPARTNERは、ラベルCONFおよびPUBが付けられた行にアクセスできます。

City                      Country     LABEL
------------------------- ----------- ----------
Venice                    IT          PUB
Utrecht                   NL          PUB
Bern                      CH          PUB
Mexico City               MX          PUB
Hiroshima                 JP          PUB
Southlake                 US          PUB
South San Francisco       US          PUB
South Brunswick           US          PUB
Seattle                   US          PUB
Toronto                   CA          PUB
Whitehorse                CA          PUB
Bombay                    IN          PUB
Sydney                    AU          PUB
London                    UK          PUB
Stretford                 UK          PUB
Sao Paulo                 BR          PUB
Geneva                    CH          PUB
Oxford                    UK          CONF
Munich                    DE          CONF
Roma                      IT          CONF

20 rows selected.

ユーザーLDORANは、ラベルPUBが付けられた行にアクセスできます。

City                      Country     LABEL
------------------------- ----------- ----------
Venice                    IT          PUB
Hiroshima                 JP          PUB
Southlake                 US          PUB
South San Francisco       US          PUB
South Brunswick           US          PUB
Seattle                   US          PUB
Toronto                   CA          PUB
Whitehorse                CA          PUB
Bombay                    IN          PUB
Sydney                    AU          PUB
London                    UK          PUB
Stretford                 UK          PUB
Sao Paulo                 BR          PUB
Geneva                    CH          PUB
Bern                      CH          PUB
Utrecht                   NL          PUB
Mexico City               MX          PUB

17 rows selected.

4. SQL*Plusを終了します。

手順10: このチュートリアルで使用したコンポーネントを削除する(オプション)

このチュートリアルで作成したコンポーネントを削除します。

このチュートリアルで使用したコンポーネントを削除するには、次のようにします。

1. Database Controlで、ユーザーSYSTEMとして接続します。

2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

3. 「セキュリティ」セクションで「ユーザー」をクリックします。

4. ユーザーkpartnerを選択してから、「削除」をクリックします。

5. 「確認」ページで「はい」をクリックします。

6. ユーザーldoranとskingで、手順4と手順5を繰り返します。

7. 「データベース・インスタンス」リンクをクリックしてデータベースのホームページに戻ります。

8. 「サーバー」をクリックして、「サーバー」サブページを表示します。

9. 「セキュリティ」セクションで「ロール」をクリックします。

10. emp_roleロールを選択し、次に「削除」を選択します。

11. 「確認」ダイアログ・ボックスで、「はい」をクリックします。

12. Database Controlからログアウトし、LABCSYSとして再度ログインします。

13. 「サーバー」をクリックして、「サーバー」サブページを表示します。

14. 「セキュリティ」セクションで「Oracle Label Security」をクリックします。

15. 「ラベル・セキュリティ・ポリシー」ページで、ACCESS_LOCATIONSポリシーを選択してから、「削除」をクリックします。「確認」ページで、「列の削除」チェック・ボックスを選択してから、「はい」をクリックします。
ACCESS_LOCATIONSポリシーを削除すると、HR.LOCATIONS表からOLS_COLUMN列も削除されます。

16. Database Controlからログアウトします。

17. オプションで、Oracle Label Securityを削除します。
Oracle Label Securityの削除については、『Oracle Label Security管理者ガイド』を参照してください。

Oracle Database Vaultを使用した管理者のアクセスの制御

Oracle Database Vaultを使用すると、Oracle Databaseに対する管理アクセスを制限できます。これによって、内部の脅威に対する保護、コンプライアンス要件の遵守、職務分離の適用など、現在も続く、セキュリティの最も困難な問題に対処できます。

- Oracle Database Vaultについて

- チュートリアル: OEスキーマへの管理者のアクセスの制御

関連項目:
『Oracle Database Vault管理者ガイド』

Oracle Database Vaultについて

通常、Oracle database管理者の主な仕事は、データベースのチューニング、アップグレードのインストール、データベースの状態監視、検出した問題の解決を行うことです。Oracle Databaseのデフォルトのインストールでは、データベース管理者はユーザーを作成し、ユーザー・データにアクセスできます。セキュリティを強化するために、これらの作業は実行する必要があるユーザーにのみ制限する必要があります。これは業務分離と呼ばれ、データベース管理者がパフォーマンス・チューニングなど、その専門知識にあったタスクに集中できるようになります。

Oracle Database VaultではOracle Databaseへの管理者のアクセスが制限されるため、Payment Card Industry(PCI)Data Security Standard(DSS)要件、Sarbanes-Oxley(SOX)Act、European Union(EU)Privacy Directive、Healthcare Insurance Portability and Accountability Act(HIPAA)など、一般的なコンプライアンス要件への遵守が容易になります。これらの規制では、詐称行為、IDの盗用、財政面での不正行為および財政面での不利益をもたらす可能性のある機密情報のアクセス、開示または変更に対する強力な内部制御が必要です。

Oracle Database Vaultでは、Oracle Databaseへの管理者のアクセスを制限するために次の方法が提供されています。

- 保護対象となるデータベース・スキーマ、オブジェクトおよびロールのグループ分け。このグループ分けはレルムと呼ばれ、レルムのコンポーネントはすべて保護されます。Database Vault管理者は、レルムを作成した後に、そのレルムへのアクセスを管理するユーザーを指定します。レルムは、たとえば、スキーマ内の1つの表を対象にしたり、スキーマ全体を対象にして作成できます。

- PL/SQL式を作成し、データベース制限をカスタマイズします。式はルール内に作成し、1つのカテゴリにルールが複数ある場合は、ルールをルール・セットにグループ分けします。ルール・セット内のルールを実施するには、そのルールをレルムまたはコマンド・ルールに関連付けます。たとえば、メンテナンス期間中(午後10時から12時など)にデータベースのアクセスを阻止したい場合は、その時間帯のみアクセスを制限するルールを作成します。

- ユーザーが使用できる、または使用できない特定のPL/SQL文の指定。これはコマンド・ルールと呼ばれます。コマンド・ルールには、保護する対象のコマンドと、そのコマンドの実行を許可するかどうかを決定するルール・セットが含まれます。コマンド・ルールを作成すると、1つ以上のデータベース・オブジェクトに影響を与えるSELECT、ALTER SYSTEM、データ定義言語(DDL)およびデータ操作言語(DML)文を保護できます。コマンド・ルールは、ルール・セットを関連付けてさらにカスタマイズすることができます。

- セッション・ユーザーやIPアドレスなど、Oracle Database Vaultが認識および保護できるデータを記録するための属性の定義。これらの属性はファクタと呼ばれます。ファクタは、データベースに接続するデータベース・アカウントの認可や、データの可視性および管理性を制限するフィルタ・ロジックの作成などのアクティビティに使用できます。ルール・セットをファクタに関連付けて、ファクタをさらにカスタマイズすることができます。

- Oracle Database Vaultルールのみによって有効になるセキュア・アプリケーション・ロールの設計。Oracle Database Vaultでセキュア・アプリケーション・ロールを作成した後、これにルール・セットを関連付けます。ルール・セットによって、セキュア・アプリケーション・ロールがいつ、どのように有効または無効になるかが定義されます。

これらのコンポーネントを作成するには、Oracle Database Vault Administratorを使用するか、またはそのPL/SQLパッケージを使用します。

チュートリアル: OEスキーマへの管理者のアクセスの制御

OEスキーマには、顧客に許可しているクレジットの上限などの機密情報が格納されている様々な表があります。Order Entry表には、一般的に、クレジット・カード番号、社会保険番号などの機密情報が格納されています。Payment Card Industry(PCI)Data Security Standards(DSS)によれば、このような種類の情報は、このような情報へのアクセスが仕事上必要な人にのみ制限される必要があります。

このチュートリアルでは、OEスキーマを対象としたレルムを作成し、管理者のアクセスから保護します。ただし、ユーザーSCOTTはOE.CUSTOMERS表にアクセスする必要があるため、このユーザーがこのデータへのアクセスを続行できるようにする必要があります。

このチュートリアルでは、次の手順を実行します。

- 手順1: Oracle Database Vaultを有効にする

- 手順2: OE.CUSTOMERS表に対するSELECT権限をユーザーSCOTTに付与する

- 手順3: ユーザーSYSおよびSCOTTとしてOE.CUSTOMERS表から選択を行う

- 手順4: OE.CUSTOMERS表を保護するためにレルムを作成する

- 手順5: OE Protectionsレルムをテストする

- 手順6: このチュートリアルで使用したコンポーネントを削除する(オプション)

手順1: Oracle Database Vaultを有効にする

Oracle Database Vaultは、Oracle Databaseのデフォルトのインストールを実行したときにインストールされます。Oracle Database VaultをインストールしてからOracle Databaseに登録し、Oracle Database Vaultアカウント・マネージャのユーザー・アカウントを有効にする必要があります。

- Oracle Database Vaultが有効かどうかの確認

- Oracle DatabaseへのOracle Database Vaultの登録

- Database Vaultアカウント・マネージャのアカウントに対するデータベース・アクセス制御の有効化

Oracle Database Vaultが有効かどうかの確認

Oracle Database Vaultが有効かどうかは、SQL*Plusにログインし、次のSELECT文を入力して確認できます。PARAMETER列では大/小文字が区別されるため、ここに示されているとおりに入力してください。

SELECT * FROM V$OPTION WHERE PARAMETER = 'Oracle Database Vault';

TRUEが戻された場合、Oracle Database Vaultは登録されています。「Database Vaultアカウント・マネージャのアカウントに対するデータベース・アクセス制御の有効化」に進んでください。そうでない場合は、次の項で説明する登録プロセスを実行してください。

Oracle DatabaseへのOracle Database Vaultの登録

登録プロセスでは、Oracle Database Vaultが有効化され、管理アカウントを作成するように求められます。

Oracle Database Vaultを登録するには、次のようにします。

1. データベース、Database Controlコンソール・プロセスおよびリスナーを停止します。

- UNIX: SYSOPER権限を持つユーザーSYSとしてSQL*Plusにログインし、データベースを停止します。次に、コマンドラインからDatabase Controlコンソール・プロセスとリスナーを停止します。
次に例を示します。

sqlplus sys as sysoper
Enter password: password

SQL> SHUTDOWN IMMEDIATE
SQL> EXIT

$ emctl stop dbconsole
$ lsnrctl stop [listener_name]

Oracle RACインストールの場合は、次のようにして、各データベース・インスタンスを停止します。

$ srvctl stop database -d db_name

- Windows: 「コントロール パネル」の「サービス」ツールから、データベース、Database Controlコンソール・プロセスおよびリスナーを停止します。Oracle Databaseサービスの名前は、Oracleで始まります。

2. Oracle Database Vaultを次の手順で有効にします。

- UNIX: 次のコマンドを実行します。このmakeコマンドによって、Oracle Database Vault(dv_on)とOracle Label Security(lbac_on)の両方が有効になります。Database Vaultを使用するには、Oracle Label Securityを有効にする必要があります。

$ cd $ORACLE_HOME/rdbms/lib
$ make -f ins_rdbms.mk dv_on lbac_on ioracle

- Windows: ORACLE_BASE\ORACLE_HOME\binディレクトリで、oradvll.dll.dblファイルの名前をoradvll.dllに変更します。Oracle Label Securityが有効になっていない場合は、oralbacll.dll.dblファイルの名前をoralbacll.dllに変更します。Database Vaultを使用するには、Oracle Label Securityを有効にする必要があります。

3. データベースとリスナーを再起動します。(まだDatabase Controlコンソール・プロセスは再起動しないでください。)

- UNIX: SYSOPER権限を持つユーザーSYSとしてSQL*Plusにログインし、データベースを再起動します。次に、コマンドラインからリスナーを再起動します。
次に例を示します。

sqlplus sys as sysoper
Enter password: password

SQL> STARTUP
SQL> EXIT

$ lsnrctl start [listener_name]

Oracle RACインストールの場合は、次のようにして、各データベース・インスタンスを再起動します。

$ srvctl start database -d db_name

- Windows: 「コントロール パネル」の「サービス」ツールから、データベースおよびリスナーを再起動します。Oracle Databaseサービスの名前は、Oracleで始まります。

4. Database Configuration Assistantを起動します。

- UNIX: 端末ウィンドウで次のコマンドを入力します。

dbca

一般的に、dbcaは$ORACLE_HOME/binディレクトリにあります。

- Windows: 「スタート」メニューから「すべてのプログラム」をクリックします。次に「Oracle - ORACLE_HOME」→「Configuration and Migration Tools」→「Database Configuration Assistant」の順にクリックします。
または、次のコマンド・プロンプトでDatabase Configuration Assistantを起動できます。

dbca

UNIXでは一般的に、dbcaはORACLE_BASE\ORACLE_HOME\binディレクトリにあります。

5. 「ようこそ」ページで「次へ」をクリックします。
「操作」ページが表示されます。

6. 「データベース・オプションの構成」を選択して、「次へ」をクリックします。
「データベース」ページが表示されます。

7. リストから、Oracle Databaseをインストールしたデータベースを選択し、DBAロールが付与されているユーザーの名前およびパスワードを入力します。「次へ」をクリックします。
「データベース・コンテンツ」ページが表示されます。

8. 次のいずれかの操作を実行します。

- Oracle Label Securityがすでに有効な場合: 「Oracle Database Vault」オプションを選択してから、「次へ」をクリックします。

- Oracle Label Securityが有効でない場合: 「Oracle Label Security」オプションを選択して、「Oracle Database Vault」オプションを選択できるようにします。「Oracle Database Vault」オプションも選択してから、「次へ」をクリックします。

「Oracle Database Vault資格証明」ページが表示されます。

9. Database Vault所有者アカウント(DBVOWNERなど)の名前とパスワード、およびDatabase Vaultアカウント・マネージャ(DBVACCTMGRなど)の名前とパスワードを指定します。
「パスワードの作成要件」に示されているパスワードのガイドラインに従って、任意のセキュアなパスワードを入力します。Oracle Database Vaultには追加的なパスワード要件があり、誤ったパスワードを作成しようとすると、これらの要件が表示されます。

10. 「次へ」をクリックします。
「接続モード」ページが表示されます。

11. このデータベースの作成時の選択内容に応じて「専用サーバー・モード」と「共有サーバー・モード」のどちらかを選択し、「終了」をクリックし、確認プロンプトで「OK」をクリックします。
Oracle Database Vaultが登録され、データベース・インスタンスが再起動されます。

12. Database Configuration Assistantを終了します。

13. Database Controlコンソール・プロセスを再起動します。

- UNIX: 次のコマンドを実行します。

$ emctl start dbconsole

- Windows: 「コントロール パネル」の「サービス」ツールから、Database Controlコンソール・プロセス(たとえば、データベースの名前がorclの場合はOracleDBConsoleorcl)を再起動します。

Database Vaultアカウント・マネージャのアカウントに対するデータベース・アクセス制御の有効化

Database Vaultアカウント・マネージャのアカウントには、Database Controlを使用する権限も必要です。

必要な権限をDatabase Vaultアカウント・マネージャのアカウントに付与するには、次のようにします。

1. SYSユーザーとしてDatabase Controlにログインします。
「ログイン」ページでSYSとSYSに割り当てられたパスワードを入力します。「接続モード」をSYSDBAに設定します。「ログイン」を選択してログインします。Database Controlの起動方法については、『Oracle Database 2日でデータベース管理者』を参照してください。

2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

3. 「セキュリティ」で、「ユーザー」を選択します。
「ユーザー」ページが表示されます。

4. Database Vaultアカウント・マネージャのアカウント(DBVACCTMGRなど)を選択します。
DBVACCTMGRを簡単に検索するには、「オブジェクト名」フィールドにDBVと入力し、「実行」をクリックします。

5. DBVACCTMGRユーザーを選択し、「ユーザーの表示」ページで「編集」をクリックします。
「ユーザーの編集」ページが表示されます。

6. 「ロール」をクリックして「ユーザーの編集: DBVACCTMGR」ページを表示します。

7. 「リストを編集」をクリックします。
「ロールの変更」ページが表示されます。

8. 「使用可能なロール」リストからSELECT_CATALOG_ROLEロールを選択し、「移動」をクリックして「選択したロール」リストに移動します。次に「OK」をクリックして、「ユーザーの編集」ページに戻ります。

9. 「システム権限」をクリックします。

10. 「リストを編集」をクリックします。
「システム権限の変更」ページが表示されます。

11. 「使用可能なシステム権限」リストからSELECT ANY DICTIONARYを選択し、「移動」をクリックして「選択したシステム権限」リストに移動します。次に「OK」をクリックします。

12. 「適用」をクリックします。

手順2: OE.CUSTOMERS表に対するSELECT権限をユーザーSCOTTに付与する

後でチュートリアルをテストするときに、ユーザーSCOTTはOE.CUSTOMERS表からの選択を行う必要があります。まず、SCOTTアカウントが有効であることを確認する必要があります。

ユーザーSCOTTを有効にするには、次のようにします。

1. 「Database Control」で、「標準」権限を持つ、Oracle Database Vaultアカウント・マネージャのアカウントとして接続します。
Oracle Database Vaultをインストールした後は、管理アカウント(SYS、SYSTEMなど)を使用してユーザー・アカウントを作成または有効化することはできません。これは、Oracle Database Vaultがデフォルトの状態のままでも、管理アカウントに対して職務分離の方針が適用されるためです。この時点から、ユーザー・アカウントを管理するには、Oracle Database Vaultアカウント・マネージャのアカウントを使用する必要があります。

だたし、管理ユーザーには、その業務に必要な権限は付与されたままです。たとえば、システム権限と多数のPL/SQLパッケージを所有するユーザーSYSは、引き続きこれらの権限を他のユーザーに付与できます。ただし、ユーザーSYSが、ユーザー・アカウントを作成、変更、削除することはできなくなっています。

2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

3. 「セキュリティ」で、「ユーザー」を選択します。
「ユーザー」ページが表示されます。

4. SCOTTユーザーを選択し、「ユーザーの表示」ページで「編集」をクリックします。
「ユーザーの編集」ページが表示されます。

5. 次の設定を入力します。

- 「パスワードの入力」および「パスワードの確認」: SCOTTアカウントのパスワードのステータスが期限切れである場合は、新しいパスワードを入力します。「パスワードの作成要件」に示されているパスワードのガイドラインに従って、任意のセキュアなパスワードを入力します。

- ステータス: 「ロック解除」をクリックします。

6. 「適用」をクリックします。

7. 「ログアウト」をクリックします。

ユーザーSCOTTにOE.CUSTOMERS表に対するSELECT権限を付与するには、次のようにします。

1. OEユーザーとしてSQL*Plusにログインします。

sqlplus oe
Enter password: password
Connected.

2. ユーザーSCOTTにOE.CUSTOMERS表に対するSELECT権限を付与します。

SQL> GRANT SELECT ON CUSTOMERS TO SCOTT;

手順3: ユーザーSYSおよびSCOTTとしてOE.CUSTOMERS表から選択を行う

この段階では、ユーザーSYSおよびSCOTTの両者が、OE.CUSTOMERS表からの選択を行うことができます。これは、SYSは管理権限を所有し、SCOTTはユーザーOEによって付与された明示的なSELECT権限を所有しているためです。

ユーザーSYSおよびSCOTTとしてOE.CUSTOMERSから選択を行うには、次のようにします。

1. SQL*Plusで、SYSDBA権限を使用してユーザーSYSとして接続します。

sqlplus sys as sysdba
Enter password: password

2. 次のように、OE.CUSTOMERS表から選択を行います。

SELECT COUNT(*) FROM OE.CUSTOMERS;

次の出力が表示されます。

COUNT(*)
--------
319

3. ユーザーSCOTTとして接続し、同じSELECT文を実行します。

CONNECT SCOTT
Enter password: password
Connected.

SELECT COUNT(*) FROM OE.CUSTOMERS;

次の出力が表示されます。

COUNT(*)
--------
319

手順4: OE.CUSTOMERS表を保護するためにレルムを作成する

OE.CUSTOMER表への管理アクセスを制限するには、OEスキーマに対するレルムを作成します。

OEスキーマを対象としたレルムを作成するには、次のようにします。

1. Oracle Database Vault Administratorを起動します。

ブラウザに、次のURLを入力します。

https://host_name:port/dva

host_nameはOracle Database Vaultをインストールしたサーバーの名前に、portはOracle Enterprise ManagerコンソールのHTTPSポート番号に置き換えます。ほとんどの場合、サーバーの名前とポート番号は、Database Controlで使用しているものと同じです。

Database Vault Administratorを起動できない場合は、これを手動でデプロイする必要があります。詳細は、『Oracle Database Vault管理者ガイド』を参照してください。

2. 「データベースにログイン」ページで、次の情報を入力します。

- ユーザー名: DV_OWNERアカウントまたはDV_ADMINアカウントの名前(DBVOWNERなど)を入力します。

- パスワード: 入力した名前のユーザーのパスワードを入力します。

- ホスト: Oracle Database Vaultをインストールしたコンピュータのホスト名またはIPアドレスを入力します(myserver.us.example.comなど)。

- ポート: データベースのポート番号を入力します(1521など)。

- SID/サービス: データベースのSID(orclなど)またはサービス(myserver.us.example.comなど)を入力します。

データベース・インスタンスの「管理」ページが表示されます。

3. 「Database Vault機能管理」で、「レルム」を選択します。
「レルム」ページが表示されます。

4. 「作成」をクリックします。
「レルムの作成」ページが表示されます。

5. 次の情報を入力します。

- 名前: OE Protections

- 説明: Realm to protect the OE schema

- ステータス: 「有効」をクリックします。

- 監査オプション: 「失敗時に監査」を選択します。

6. 「OK」をクリックします。
「レルム」ページが表示され、レルムとしてOEスキーマが示されます。ただし、保護されたオブジェクトまたは認可されたユーザーはまだ存在しません。

7. OE Protectionsレルムを選択し、「編集」をクリックします。
「レルムの編集」ページが表示されます。

8. 「レルム・セキュア・オブジェクト」で、「作成」をクリックします。
「レルム・セキュア・オブジェクトの作成」ページが表示されます。

9. 「オブジェクト所有者」リストから「OE」を選択します。

10. 「オブジェクト・タイプ」リストから「TABLE」を選択します。

11. 「オブジェクト名」フィールドに、OEスキーマ内のすべての表を指定するために%を入力し、「OK」をクリックします。
「レルムの編集」ページが表示されます。

12. 「レルム認可」で、「作成」をクリックします。
「レルム認可の作成」ページが表示されます。

13. 「権限受領者」リストから「OE [USER]」を選択し、「認可タイプ」を「所有者」に設定します。その後で、「認可ルール・セット」を<未選択>に設定します。
これによって、OEスキーマ内のオブジェクトへのアクセスを管理するOEユーザーが認可されます。所有者として、OEユーザーは、レルムで保護されたデータベースのロールの付与または取消し、OE Protectionsレルムで保護されたオブジェクトのアクセス、操作および作成を実行できます。

「認可ルール・セット」リストを使用すると、レルムが有効になる時間など、アクセスをさらに制御するルールを選択できます。

14. 「OK」をクリックして「レルムの編集」ページに戻り、「OK」を再びクリックして「レルム」ページに戻ります。

15. Oracle Database Vault Administratorは終了しないでください。

手順5: OE Protectionsレルムをテストする

これでOEスキーマを保護するレルムが作成され、テストの準備ができました。Oracle Database Vaultで定義した保護は即時に有効になるため、データベース・セッションを再び開始する必要はありません。

OE Protectionsレルムをテストするには、次のようにします。

1. SYSDBA権限を使用してユーザーSYSとしてSQL*Plusに接続します。

CONNECT SYS/AS SYSDBA
Enter password: password
Connected.

2. OE.CUSTOMERS表からの選択を試行します。

SELECT COUNT(*) FROM OE.CUSTOMERS;

次の出力が表示されます。

ERROR at line 1:
ORA-01031: insufficient privileges

OE Protectionsレルムによって、管理ユーザーのOE.CUSTOMERS表へのアクセスが制限されています。スキーマ全体を保護するようにOE Protectionsレルムを定義したため、管理ユーザーはOE内の他の表にもアクセスできません。

3. ユーザーSCOTTとして接続します。

CONNECT SCOTT
Enter password: password
Connected.

4. OE.CUSTOMERS表からの選択を試行します。

SELECT COUNT(*) FROM OE.CUSTOMERS;

次の出力が表示されます。

COUNT(*)
----------
319

ユーザーOEは明示的にOE.CUSTOMERS表でSELECT権限をこのユーザーに付与したため、OE保護レルムはユーザーSCOTTには適用されません。Oracle Database Vaultでは必要な保護が設定されますが、定義済の明示的な権限は上書きされません。SCOTTはまだこのテーブルへの問合せができます。

手順6: このチュートリアルで使用したコンポーネントを削除する(オプション)

このチュートリアルの終了後、使用したデータ構造が不要な場合は削除できます。

OE.CUSTOMERSに対するSELECT権限をユーザーSCOTTから取り消すには、次のようにします。

1. SQL*PlusでユーザーOEとして接続します。

CONNECT OE
Enter password: password
Connected.

2. ユーザーSCOTTのSELECT権限を取り消します。

REVOKE SELECT ON CUSTOMERS FROM SCOTT;

OE Protectionsレルムを削除するには、次のようにします。

1. Oracle Database Vault Administratorからログアウトした場合は、Oracle Database VaultをインストールしたときのDatabase Vault所有者アカウント(DBVOWNERなど)で再びログインします。
Database Vault Administratorの起動方法については、「手順4: OE.CUSTOMERS表を保護するためにレルムを作成する」の手順1を参照してください。

「管理」ページが表示されます。

2. 「Database Vault機能管理」で、「レルム」をクリックします。
「レルム」ページが表示されます。

3. レルムのリストからOE Protectionsを選択し、「削除」をクリックします。その後、「確認」ページで「はい」をクリックします。

4. Oracle Database Vault Administratorからログアウトします。

Oracle Database Vaultを無効にするには、次のようにします。

- Oracle Database Vaultの無効化については、『Oracle Database Vault管理者ガイド』を参照してください。

7 データベース・アクティビティの監査

この章の内容は次のとおりです。

- 監査の概要

- 監査の使用目的

- 標準監査アクティビティが記録される場所

- 標準監査による一般的なアクティビティの監査

- チュートリアル: 標準監査証跡の作成

- 監査のガイドライン

- 監査に使用される初期化パラメータ

関連項目:

- ユーザーおよびデータベース・アクティビティを監査する他の方法については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- 監査の拡張機能を提供するOracle Audit Vaultの詳細は、『Oracle Audit Vault管理者ガイド』を参照してください。

監査の概要

監査は選択したユーザーのデータベース・アクションの監視と記録です。標準監査では、初期化パラメータおよびSQL文AUDITとNOAUDITを使用して、SQL文、権限、スキーマ・オブジェクト、およびネットワーク・アクティビティと複数階層アクティビティの監査を行います。

監査が有効かどうかにかかわらず、Oracle Databaseが常に監査するアクティビティもあります。これらのアクティビティには、管理者権限の接続、データベースの起動、データベースの停止などが含まれます。詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

監査の別タイプとして、ファイングレイン監査もあります。ファイングレイン監査により、データ・アクセスを、内容に基づき、value 1000などのBoolean測定を使用して、最も密なレベルで監査できます。ファイングレイン監査では、列へのアクセス、または列内での変更に基づいて、アクティビティを監査できます。Oracle Databaseにある指定した要素(特定のオブジェクトのコンテンツなど)へのアクセスまたは変更があると監査がトリガーされるようにセキュリティ・ポリシーを作成できます。監査を行う必要がある特定の条件を定義したポリシーを作成できます。たとえば、特定の表の列を監査し、一定期間中のどのタイミングで、誰がアクセスしようとしたかを調べることができます。また、ポリシー違反があった場合にトリガーされるアラートも作成でき、このデータを別の監査ファイルに書き込むことができます。ファイングレイン監査の実行方法は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

監査の使用目的

監査は、通常次のような目的で使用されます。

- アクションのアカウンタビリティを有効にします。特定のスキーマ、表、行または影響を受けるコンテンツに対して実行されたアクションも含まれます。

- アカウンタビリティに基づいて不審なユーザーによる不適切なアクションを阻止します。

- 不審なアクティビティを調査します。たとえば、ユーザーが表からデータを削除しようとした場合、セキュリティ管理者は、そのデータベースへのすべての接続と、そのデータベースにあるすべての表からの行の削除(成功および失敗)をすべて監査できます。

- 認可されていないユーザーによるアクションを監査人に通知します。たとえば、認可されていないユーザーがデータを変更または削除を実行できるなど、予期した以上の権限を持っている場合に、ユーザー認可を再評価できます。

- 認可またはアクセス制御の実装に関する問題を検出します。たとえば、データは他の方法で保護されているため、監査レコードは生成されないと予測される監査ポリシーを作成できます。しかし、これらのポリシーで監査レコードが生成された場合は、他のセキュリティ制御が正しく実装されていないことがわかります。

- 監査に関するコンプライアンス要件を遵守します。次のような規制には監査に関連する共通の要件があります。

- 米国企業改革法(Sarbanes-Oxley Act)

- 医療保険の相互運用性と説明責任に関する法律(HIPAA)(Health Insurance Portability and Accountability Act)

- 国際業務を行う銀行の自己資本比率に関する国際統一基準: 改定版(バーゼルII)(International Convergence of Capital Measurement and Capital Standards: a Revised Framework)

- 日本の個人情報保護法

- 欧州連合のプライバシと電子通信に関する指令(European Union Directive on Privacy and Electronic Communications)

- 特定のデータベース・アクティビティに関するデータを監視および収集します。たとえば、データベース管理者は、更新された表、実行された論理I/O操作の回数、ピーク時に接続していた同時実行ユーザーの数などに関する統計を収集できます。

標準監査アクティビティが記録される場所

Oracle Databaseは、監査アクティビティを監査レコードに記録します。監査レコードには、監査された操作、操作を実行したユーザー、操作が実行された日時が記録されます。監査レコードは、データベース監査証跡と呼ばれるデータ・ディクショナリ表またはオペレーティング・システム監査証跡と呼ばれるオペレーティング・システム・ファイルに格納できます。Oracle Databaseでは、不審なアクティビティを追跡するために使用できる一連のデータ・ディクショナリ・ビューも提供されます。これらのビューの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

標準監査を使用する場合、Oracle Databaseでは、監査レコードがDBA_AUDIT_TRAIL(SYS.AUD$表)、オペレーティング・システム監査証跡、または標準監査のログ・レコードとファイングレイン監査のログ・レコードを組み合せるDBA_COMMON_AUDIT_TRAILビューに書き込まれます。

さらに、AUDIT_SYSLOG_LEVEL初期化パラメータが設定されている場合、管理者が実行したアクションがsyslog監査証跡に記録されます。

標準監査による一般的なアクティビティの監査

ここでは、標準監査を使用してSQL文、権限、スキーマ・オブジェクト、ネットワーク・アクティビティまたは多層アクティビティに対して実行されたアクティビティを監査する方法を説明します。

この項の内容は次のとおりです。

- 標準監査について

- 標準監査証跡の有効化または無効化

- セキュリティ関連のSQL文および権限に対するデフォルト監査の使用

- 個々のSQL文の監査

- 個々の権限の監査

- 多層環境でのSQL文および権限の監査でのプロキシの使用

- 個々のスキーマ・オブジェクトの監査

- ネットワーク・アクティビティの監査

- 多層環境でのSQL文および権限の監査でのプロキシの使用

- チュートリアル: 標準監査証跡の作成

関連項目:
標準監査証跡の管理の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

標準監査について

標準監査では、SQL文、権限、スキーマ・オブジェクトや、ネットワーク・アクティビティまたは多層アクティビティの監査を有効にできます。必要に応じて、特定のスキーマ表に対して監査を実行できます。このタイプの監査を実行するには、Database Controlを使用します。

標準監査証跡は、DBA_AUDIT_TRAILおよびDBA_COMMON_AUDIT_TRAILデータ・ディクショナリ・ビューを問い合せることで表示できます。

関連項目:
使用可能な様々なタイプの監査オプションの使用方法および使用理由に関するロードマップは、『Oracle Databaseセキュリティ・ガイド』を参照してください。

標準監査証跡の有効化または無効化

この項で説明している標準監査を実行する前に、標準監査を有効にする必要があります。標準監査を有効にするときに、データベース監査証跡に監査証跡を作成するか、オペレーティング・システム・ファイルに監査アクティビティを書き込むことができます。オペレーティング・システム・ファイルに書き込む場合は、テキスト形式またはXML形式で監査レコードを作成します。

標準監査証跡を有効または無効にするには、次のようにします。

1. Database Controlを起動します。

2. SYSとしてログインし、SYSDBA権限で接続します。

- ユーザー名: SYS

- パスワード: パスワードを入力します。

- 接続モード: SYSDBA

3. 「サーバー」をクリックして、「サーバー」サブページを表示します。

4. 「データベース構成」セクションで「初期化パラメータ」をクリックします。
「初期化パラメータ」ページが表示されます。

5. 「SPFile」をクリックして「SPFile」サブページを表示します。
インストールの「SPFile」タブが表示されない場合は、サーバー・パラメータ・ファイルを使用してOracle Databaseをインストールしなかったということです。次の手順に進みます。

6. 「名前」フィールドにaudit_trailを入力してAUDIT_TRAIL初期化パラメータを検索し、「実行」をクリックします。

AUDIT_のように、パラメータの最初の数文字を入力できます。または、パラメータのリストをスクロールして、AUDIT_TRAILパラメータを検索できます。

7. 「値」フィールドで、次のいずれかの値を選択します。

- DB: データベース監査を有効にし、すべての標準監査レコードをデータベース監査証跡(SYS.AUD$)に記録します。ただし、常にオペレーティング・システム監査証跡に書き込まれるレコードは除きます。(Database Configuration Assistantを使用してデータベースを作成した場合はこの値がデフォルトになります。その他の場合はNONEがデフォルトになります。)

- OS: データベース監査を有効にして、すべての監査レコードをオペレーティング・システム・ファイルに書き込みます。SYS.AUD$表に監査レコードを送信するかわりにオペレーティング・システム・ファイルに監査証跡を書き込むと、パフォーマンスが向上します。監査を行うユーザーがデータベース管理者とは異なる場合は、operating system設定を使用する必要があります。データベースに格納されたすべての監査情報は、データベース管理者により参照および変更が可能です。
オペレーティング・システム監査レコード・ファイルの場所を指定するには、AUDIT_FILE_DEST初期パラメータを設定します。デフォルトのディレクトリは$ORACLE_BASE/admin/$ORACLE_SID/adumpです。

- NONE: 標準監査を無効にします。

- DB, EXTENDED: AUDIT_TRAIL=DB設定のすべてのアクションを実行し、SYS.AUD$表が使用できる場合は、この表のSQLBINDおよびSQLTEXT CLOB列にデータを移入します。(これらの2つの列は、このパラメータが指定されている場合にのみ移入されます。)

- XML: オペレーティング・システム監査レコード・ファイルにXML形式で書き込みます。AuditRecordノードの要素を(http://xmlns.oracle.com/oracleas/schema/dbserver_audittrail-11_2.xsd XSDファイル内のXMLスキーマで指定されているとおり)、Sql_TextとSql_Bindを除いてすべてオペレーティング・システムXML監査ファイルに書き込みます。この.xsdファイルは、XML監査ファイルのスキーマ定義を表します。XMLスキーマはXMLスキーマ言語で記述された文書です。

- EXTENDED: XMLのすべてのアクションを実行し、可能な場合はSYS.AUD$表のSQLBINDおよびSQLTEXT CLOB列にデータを移入するXML, EXTENDEDを指定します。(これらの列は、このパラメータが指定されている場合にのみ移入されます。)

AUDIT_TRAIL初期化パラメータの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

8. 「適用」をクリックします。

9. Oracle Databaseインスタンスを再起動します。

1. 「データベース・インスタンス」リンクをクリックします。

2. 「ホーム」をクリックしてDatabase Controlのホームページを表示します。

3. 「一般」で「停止」をクリックします。

4. 資格証明の起動/停止ページでは、資格証明を入力します。
詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

5. 完全に停止した後に、「起動」をクリックします。

次の点に注意してください。

- オブジェクトの監査に関する変更を行った場合、データベースを再起動する必要はありません。データベースを再起動する必要があるのは、全体にかかわる変更を行った場合(すべての監査をオンまたはオフにした場合や監査証跡オペレーティング・システム・ファイルの定義を変更した場合)のみです。

- ファイングレイン監査またはSYS監査を有効にする場合、AUDIT_TRAILを設定する必要はありません。(SYS監査ではシステム管理者のアクティビティが監視されます。詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。)ファイングレイン監査の場合は、必要に応じてファイングレイン監査ポリシーを追加および削除し、監視する特定の操作またはオブジェクトに適用します。AUDIT_SYS_OPERATIONSパラメータを使用すると、SYS監査を有効または無効にできます。

セキュリティ関連のSQL文および権限に対するデフォルト監査の使用

Database Configuration Assistant (DBCA)を使用して、新しいデータベースを作成する場合、Oracle Databaseはセキュリティに関連する最も一般的に使用されるSQL文と権限を監査するようにデータベースを構成します。また、AUDIT_TRAIL初期化パラメータをDBに設定します。別の監査証跡のタイプ(たとえば、監査証跡レコードをオペレーティング・システム・ファイルに記録する場合はOS)を使用する場合は、そのような設定もでき、Oracle Databaseは、デフォルトで監査された権限を引き続き監査します。AUDIT_TRAILパラメータをNONEに設定して監査を無効にすると、監査は実行されません。

Oracle Databaseでは、デフォルトで次の権限が監査されます。

ALTER ANY PROCEDURE

CREATE ANY LIBRARY

DROP ANY TABLE

ALTER ANY TABLE

CREATE ANY PROCEDURE

DROP PROFILE

ALTER DATABASE

CREATE ANY TABLE

DROP USER

ALTER PROFILE

CREATE EXTERNAL JOB

EXEMPT ACCESS POLICY

ALTER SYSTEM

CREATE PUBLIC DATABASE LINK

GRANT ANY OBJECT PRIVILEGE

ALTER USER

CREATE SESSION

GRANT ANY PRIVILEGE

AUDIT SYSTEM

CREATE USER

GRANT ANY ROLE

CREATE ANY JOB

DROP ANY PROCEDURE

Oracle Databaseでは、デフォルトで次のSQL文のショートカットが監査されます。

ROLE

SYSTEM AUDIT

PUBLIC SYNONYM

DATABASE LINK

PROFILE

SYSTEM GRANT

SQL文および権限の監査を個々に制御するには、AUDITおよびNOAUDIT文を使用します。

データベースを監査することをお薦めします。監査は、米国企業改革法(Sarbanes-Oxley Act)で定義されているコンプライアンス要件を満たし、内部からのアクセスを確実に制御できる有効な方法です。監査を実行することでビジネス活動を監視でき、企業のポリシーに反するアクティビティを発見できます。この結果、データベースおよびアプリケーション・ソフトウェアへのアクセスが厳しく制御されます。デフォルトで監査を有効にすると、監査および個人のコンプライアンスに関する監査レコードを生成できます。

注意:
アプリケーションがOracle Database 10g リリース2(10.2)のデフォルトの監査設定を使用している場合、リリース11g の監査設定を使用するようにアプリケーションを変更するまで、Oracle Database 10.2の監査設定に戻すことができます。これには、undoaud.sqlスクリプトを実行します。
リリース 11g の監査設定を使用するようにアプリケーションを変更した後、データベースを手動で更新してビジネスのニーズに適した監査構成にするか、secconf.sqlスクリプトを実行してリリース11gのデフォルトの監査設定を適用できます。

undoaud.sqlおよびsecconf.sqlスクリプトは、$ORACLE_HOME/rdbms/adminディレクトリに格納されています。undoaud.sqlスクリプトは監査設定にのみ影響し、secconf.sqlスクリプトは監査設定とパスワード設定の両方に影響します。これらのスクリプトは、他のセキュリティ設定には影響しません。

関連項目:

- この項で説明しているSQL文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

- AUDIT_TRAIL初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

個々のSQL文の監査

監査できるSQL文は、次のカテゴリに含まれます。

- DDL文。たとえば、表の監査(AUDIT TABLE)を有効にすると、すべてのCREATE TABLEおよびDROP TABLE文が監査されます。

- DML文。たとえば、SELECT TABLEの監査を有効にすると、表またはビューにかかわらず、すべてのSELECT ... FROM TABLE/VIEW文が監査されます。

文の監査の対象範囲は変更できます。たとえば、すべてのデータベース・ユーザーのアクティビティを監査したり、ユーザーの選択リストのみを監査できます。

関連項目:
SQL文の監査の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

個々の権限の監査

権限の監査では、システム権限を使用する文を監査します。たとえば、SELECT ANY TABLE権限を使用するすべてのSELECT文を監査する場合は、SELECT ANY TABLE権限を監査できます。すべてのシステム権限の使用を監査できます。権限の監査では文の監査と同様に、すべてのデータベース・ユーザーのアクティビティを監査することも、指定したリストのアクティビティのみを監査することもできます。SQL文の監査と同様に、AUDIT文およびNOAUDIT文を使用することで、権限の監査を有効または無効にできます。また、監査を有効にするには、AUDIT SYSTEMシステム権限が必要です。

権限の監査オプションは、対応するシステム権限に一致します。たとえば、DELETE ANY TABLE権限の使用を監査するオプションは、DELETE ANY TABLEです。次に例を示します。

AUDIT DELETE ANY TABLE BY ACCESS WHENEVER NOT SUCCESSFUL;

DELETE ANY TABLEシステム権限の使用の成功および失敗をすべて監査するには、次の文を入力します。

AUDIT DELETE ANY TABLE BY ACCESS;

すべてのデータベース・ユーザーおよび監査対象の個々の文による、すべての表でのSELECT、INSERT、DELETE文の失敗、およびEXECUTE PROCEDUREシステム権限の使用の失敗をすべて監査するには、次の文を実行します。

AUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE, EXECUTE PROCEDURE BY ACCESS WHENEVER NOT SUCCESSFUL;

関連項目:
権限の監査の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

多層環境でのSQL文および権限の監査でのプロキシの使用

Database Controlの「監査文の追加」ページまたは「監査権限の追加」ページでプロキシを指定すると、多層環境のクライアントのアクティビティを監査できます。多層環境のクライアントのアクティビティの監査には、SQL AUDIT文を使用できます。その場合は、AUDIT文内でBY user句を使用します。

たとえば、プロキシ・アプリケーション・ユーザーjacksonによって発行されたSELECT TABLE文を監査するには、次のようにします。

AUDIT SELECT TABLE BY jackson;

ユーザーjacksonは、次のようにappserveプロキシ・ユーザーを使用して接続できます。

CONNECT appserve[jackson]
Enter password: password

中間層でも、データベース・セッションでユーザーのクライアントIDを設定でき、中間層アプリケーションからユーザー・アクションの監査を有効にできます。ユーザーのクライアントIDは、監査証跡に表示されます。

関連項目:
多層環境での監査の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

個々のスキーマ・オブジェクトの監査

スキーマ・オブジェクトの監査では、特定の表のSELECT文またはDELETE文など、オブジェクト権限により許可されたすべてのSELECT文およびDML文が監査されます。これらの権限を制御するGRANT文およびREVOKE文も監査されます。

関連項目:
スキーマ・オブジェクトの監査の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

ネットワーク・アクティビティの監査

AUDIT文を使用して、ネットワーク・プロトコルの予期しないエラーやネットワーク層で発生した内部エラーを監査できます。ネットワーク監査の対象とならないエラーのタイプは、接続の問題ではなく、複数の原因で発生した可能性があります。考えられる原因として、データベース・エンジニアが単にテスト目的で内部イベントを設定した、などがあげられます。他にも、ネットワークが暗号化の作成または処理に必要な情報を見つけられないなど、暗号化の構成設定の競合などが原因として考えられます。

ネットワークの監査を有効にするには、次のようにします。

1. SQL*Plusを起動し、SYSTEMなどの管理者権限で、またはセキュリティ管理者としてログオンします。次に例を示します。

sqlplus system
Enter password: password

SQL*Plusが起動し、デフォルトのデータベースに接続してから、プロンプトが表示されます。

SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. 次の文を入力します。

AUDIT NETWORK;

ネットワークの監査を無効にするには、次の文を入力します。

NOAUDIT NETWORK;

3. SQL*Plusを終了します。

EXIT

関連項目:
ネットワーク・アクティビティの監査の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

チュートリアル: 標準監査証跡の作成

OE.CUSTOMERS表のSELECT文を監査する場合を想定します。このチュートリアルでは、標準監査を有効にし、SELECT SQL文を有効にし、OE.CUSTOMERS表でSELECT SQL文を実行してから、その監査ファイルをチェックします。

このチュートリアルでは、次の手順を実行します。

- 手順1: ログインして標準監査を有効にする

- 手順2: OE.CUSTOMERS表のSELECT文に対する監査を有効にする

- 手順3: 監査設定をテストする

- 手順4: このチュートリアルで使用したコンポーネントを削除する(オプション)

- 手順5: SEC_ADMINセキュリティ管理者アカウントを削除する

手順1: ログインして標準監査を有効にする

最初に、ログインして必要ならば標準監査を有効にします。

標準監査を有効にするには、次のようにします。

1. Database Controlを起動します。

2. SYSとしてログインします。

- ユーザー名: SYS

- パスワード: パスワードを入力します。

- 接続モード: SYSDBA

3. 「サーバー」をクリックして、「サーバー」サブページを表示します。

4. 「データベース構成」セクションで「初期化パラメータ」をクリックします。
「初期化パラメータ」ページが表示されます。

5. 「SPFile」をクリックして「SPFile」サブページを表示します。
インストールの「SPFile」タブが表示されない場合は、サーバー・パラメータ・ファイルを使用してOracle Databaseをインストールしなかったということです。次の手順に進みます。

6. 「名前」フィールドにAUDIT_TRAILを入力してAUDIT_TRAILパラメータを検索し、「実行」をクリックします。

AUDITのように、パラメータの最初の数文字を入力できます。または、パラメータのリストをスクロールして、AUDIT_TRAILパラメータを検索できます。パラメータのリストをアルファベット順にソートするには、「名前」列をクリックします。

7. 「値」フィールドで、現在の設定をメモしてから、その設定をDB_EXTENDEDに変更します。
AUDIT_TRAILパラメータは、デフォルトではDBに設定されているため、データベース監査が有効で、あらゆる監査レコードをデータベース監査証跡(SYS.AUD$)に記録できます(ただし、常にオペレーティング・システム監査証跡に書き込まれるレコードは除きます)。DB_EXTENDEDは、この機能に加えて、SQLテキストとSQLバインド変数を記録します。

8. 「適用」をクリックします。

9. Oracle Databaseインスタンスを再起動します。
コマンドラインから、次のコマンドを入力します。

sqlplus sys as sysoper
Enter password: password

SQL> SHUTDOWN IMMEDIATE
SQL> RESTART

ここで、次のコマンドを入力して、AUDIT_TRAILの設定を確認できます。

SQL> SHOW PARAMETER AUDIT_TRAIL

NAME                     TYPE            VALUE
------------------------ --------------- ---------------------------------\
audit_trail              string          DB_EXTENDED

手順2: OE.CUSTOMERS表のSELECT文に対する監査を有効にする

次に、OE.CUSTOMERS表のSELECT文に対する監査を有効にします。

OE.CUSTOMERS表のSELECT文の監査を有効にするには、次のようにします。

1. サンプル・ユーザーのsec_adminが存在することを確認します。
SYSTEMとしてログオンし、Database Controlのホームページから、「サーバー」をクリックすると、「サーバー」サブページが表示されます。「セキュリティ」の下の「ユーザー」を選択し、アカウントのリストでsec_adminをチェックします。sec_adminセキュリティ管理者アカウントを作成する方法は、「手順1: セキュリティ管理者アカウントを作成する」を参照してください。Oracle Database Vaultがまだ有効な場合は、Database Vaultアカウント・マネージャのユーザー・アカウントを使用して、アカウントを再作成する必要があります。

2. SQL*Plusで、ユーザーOEとしてログインし、OE.CUSTOMERS表に対するSELECT権限をsec_adminに付与します。

sqlplus oe
Enter password: password
Connected.

SQL> GRANT SELECT ON CUSTOMERS TO sec_admin;

3. SYSDBA権限を持つユーザーSYSとしてDatabase Controlにログインします。

4. 「サーバー」をクリックして、「サーバー」サブページを表示します。

5. 「セキュリティ」セクションで「監査設定」をクリックします。
監査設定ページが表示されます。

6. 「監査オブジェクト」サブページを選択します。

7. 「追加」をクリックします。
「監査オブジェクトの追加」ページが表示されます。

8. 次の情報を入力します。

- オブジェクト・タイプ: 「表」を選択します。

- 表: OE.CUSTOMERSと入力します。

- 監査可能な文: SELECTを選択し、「移動」をクリックして「選択した文」リストに移動します。

9. 「OK」をクリックします。

10. Database Controlからログアウトします。

手順3: 監査設定をテストする

この段階では、監査が有効で、OE.CUSTOMERS表で実行されたすべてのSELECT文がDBA_AUDIT_TRAILデータ・ディクショナリ・ビューに書き込まれます。次に、監査設定をテストします。

監査設定をテストするには、次のようにします。

1. SQL*Plusを起動し、ユーザーsec_adminとして接続します。

sqlplus sec_admin
Enter password: password

2. 次のSELECT文を入力して監査証跡のアラートを作成します。

SELECT COUNT(*) FROM OE.CUSTOMERS;

3. 次の文を入力してDBA_AUDIT_TRAILビューを表示します。

SELECT USERNAME, SQL_TEXT, TIMESTAMP
FROM DBA_AUDIT_TRAIL
WHERE SQL_TEXT LIKE 'SELECT %';

このSELECT文で、SQL_TEXT列に対して入力するテキスト('SELECT %')は、手順2のSELECT文で入力した大文字/小文字に合わせます。つまり、SELECT文を小文字で入力した場合は、'SELECT %'ではなく、'select %'と入力してDBA_AUDIT_TRAILビューを問い合せます。

次のような出力が表示されます。

USERNAME          SQL_TEXT                                TIMESTAMP
----------------- --------------------------------------- ------------------
SEC_ADMIN         SELECT COUNT(*) FROM OE.CUSTOMERS       31-MAR-10

4. SQL*Plusを終了します。

EXIT

手順4: このチュートリアルで使用したコンポーネントを削除する(オプション)

オプションで、以前に作成した監査設定を削除します。

Database Controlで監査設定を削除するには、次のようにします。

1. SYSDBA権限を持つユーザーSYSとしてDatabase Controlにログインします。

2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

3. 「セキュリティ」セクションで「監査設定」をクリックします。
監査設定ページが表示されます。

4. 「監査オブジェクト」サブページを選択します。

5. 「スキーマ」にOEと入力します。

6. 「オブジェクト名」にCUSTOMERSと入力します。

7. 「検索」をクリックします。

8. OE.CUSTOMERSスキーマの横のボックスを選択し、「削除」をクリックします。
「確認」ダイアログ・ボックスが表示されます。

9. 「はい」を選択します。

10. 「データベース・インスタンス」リンクをクリックしてデータベースのホームページに戻ります。

11. 「サーバー」サブページを選択してから、「データベース構成」で「初期化パラメータ」を選択します。

12. 「SPFile」サブページを選択します。

13. AUDIT_TRAILパラメータを検索して、元の値にします。「適用」をクリックします。

14. Database Controlを終了します。

15. データベースを再起動します。

sqlplus sys as sysoper
Enter password: password

SQL> SHUTDOWN IMMEDIATE
SQL> RESTART

手順5: SEC_ADMINセキュリティ管理者アカウントを削除する

この例は、このガイドの最後の例です。sec_admin管理者アカウントが不要になった場合は、このアカウントを削除する必要があります。

sec_adminセキュリティ管理者アカウントを削除するには、次のようにします。

1. ユーザーSYSTEMとしてDatabase Controlにログインします。
Oracle Database Vaultが有効な場合は、Database Vaultアカウント・マネージャとしてログオンする必要があります。

2. Database Controlのホームページで、「サーバー」をクリックして「サーバー」サブページを表示します。

3. 「セキュリティ」セクションで「ユーザー」をクリックします。
「ユーザー」ページが表示されます。

4. 「名前」フィールドにsec_adminと入力します。

5. 「検索」をクリックします。

6. sec_adminユーザー・アカウントの横の選択ボックスを選択し、「削除」をクリックします。
「確認」ダイアログ・ボックスが表示されます。

7. 「はい」を選択します。

8. Database Controlを終了します。

監査のガイドライン

この項の内容は次のとおりです。

- SQL文および権限のデフォルト監査の使用のガイドライン

- 監査済情報の管理のガイドライン

- 通常のデータベース・アクティビティの監査のガイドライン

- 疑わしいデータベース・アクティビティの監査のガイドライン

SQL文および権限のデフォルト監査の使用のガイドライン

新しくデータベースを作成すると、選択した一連のSQL文および権限の監査を有効にすることができます。デフォルト監査を有効にすることを、強くお薦めします。監査は、コンプライアンス要件を満たし、内部からのアクセスを確実に制御できる有効な方法です。デフォルト監査の詳細は、「セキュリティ関連のSQL文および権限に対するデフォルト監査の使用」を参照してください。

監査済情報の管理のガイドライン

監査によるデータベース・パフォーマンスへの影響は最小限ですが、監査するイベントの数はできるだけ制限する必要があります。この制限によって、監査対象の文を実行したときにパフォーマンスの影響が最小限に抑えられ、監査証跡のサイズが最小限になるため、分析と理解が容易になります。

監査方針を立てる際は、次のガイドラインに従います。

1. 監査の目的を評価する
監査の目的を理解すると、適切な監査方針を立てることができ、不要な監査を行わずにすみます。

たとえば、不審なデータベース・アクティビティの調査のために監査を行うと仮定します。この情報のみでは、十分に明確であるとはいえません。どのデータベース・アクティビティが疑わしい、または注意を要するといった具体的な情報が必要です。そのために、たとえば、データベース内の表から許可なくデータが削除されていないかを監査するというように、監査目的を絞り込みます。このような目的を設定すれば、監査の対象となるアクションの種類や、疑わしいアクティビティによって影響を受けるオブジェクトの種類を限定できます。

2. 監査について十分理解する
目標とする情報の取得に必要な最小限の文、ユーザーまたはオブジェクトを監査します。これによって、不要な監査情報のために重要な情報の識別が困難になることがなくなります。収集が必要なセキュリティ情報の量と、その情報を格納して処理する能力とのバランスを保つ必要があります。

たとえば、データベース・アクティビティに関する情報を収集するために監査する場合は、追跡するアクティビティの種類を正確に判断した上で、必要な情報を収集するために必要な期間内で、目的のアクティビティのみを監査します。別の例として、各セッションの論理I/O情報のみを収集する場合は、オブジェクトを監査しないでください。

通常のデータベース・アクティビティの監査のガイドライン

監査目的が、特定のデータベース・アクティビティに関する履歴情報を収集することである場合は、次のガイドラインに従ってください。

1. 関連のあるアクションのみを監査する
不要な監査情報によって重要な情報の識別が困難になることを防ぎ、監査証跡管理の量を削減するために、対象となるデータベース・アクティビティのみ監査します。ファイングレイン監査を使用して特定のアクションを監査できます。ファイングレイン監査の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

2. 監査レコードをアーカイブし、監査証跡を削除する
必要な情報を収集した後は、目的の監査レコードをアーカイブし、この情報の監査証跡を削除します。

監査レコードをアーカイブするために、たとえば標準監査証跡ではINSERT INTO table SELECT ... FROM SYS.AUD$ ...を使用して、データベース表に関連レコードをコピーします(ファイングレイン監査レコードは、SYS.FGA_LOG$表にあります)。また、監査証跡表をオペレーティング・システム・ファイルにエクスポートできます。Oracle Databaseユーティリティでは、Oracle Data Pumpを使用して表をエクスポートする方法が説明されています。

監査レコードをパージするには、標準監査レコードをSYS.AUD$表から削除し、ファイングレイン監査レコードをSYS.FGA_LOG$表から削除します。たとえば、すべての監査レコードを標準監査証跡から削除するには、次の文を入力します。

DELETE FROM SYS.AUD$;

また、emp表の監査の結果として生成された標準監査証跡からすべての監査レコードを削除するには、次の文を入力します。

DELETE FROM SYS.AUD$ WHERE OBJ$NAME='EMP';

3. プライバシに関する自社の留意事項を守る
プライバシに関する法規によって、追加のビジネス・プライバシ・ポリシーが必要となる場合があります。プライバシに関する多くの法規では、個人を特定できる情報(PII)へのアクセスを企業で監視する必要があり、このような監視は監査によって実施されます。ビジネス・レベルのプライバシ・ポリシーでは、技術的、法的および企業ポリシーの問題など、データ・アクセスおよびユーザー・アカウンタビリティに関するすべての事項を満たす必要があります。

疑わしいデータベース・アクティビティの監査のガイドライン

監査の目的が疑わしいデータベース・アクティビティを監視することである場合は、次のガイドラインに従います。

1. 一般的な情報を監査してから、特定の情報を監査する
通常、疑わしいデータベース・アクティビティの監査を開始する時点では、対象のユーザーまたはスキーマ・オブジェクトの特定に使用できる情報はありません。そのため、最初は「標準監査による一般的なアクティビティの監査」で説明されている標準監査オプションを使用してより一般的に監査オプションを設定します。

基本的な監査情報を記録および分析した後で、一般的な監査を無効にし、特定のアクションを監査します。『Oracle Databaseセキュリティ・ガイド』で説明されているファイングレイン監査を使用して、特定のアクションを監査できます。疑わしいデータベース・アクティビティの発生源に関する結論を引き出すのに十分な証拠を収集するまで、このプロセスを継続します。

2. 監査証跡を保護する
疑わしいデータベース・アクティビティを監査する場合は、監査情報が監査されずに追加、変更または削除されることのないように、監査証跡を保護します。AUDIT SQL文を使用して、標準監査証跡を監査します。次に例を示します。

sqlplus sys as sysdba
Enter password: password

SQL> AUDIT SELECT ON SYS.AUD$ BY ACCESS;

監査に使用される初期化パラメータ

表7-1には監査を保護するために使用する初期化パラメータがリストされています。

表7-1 監査に使用される初期化パラメータ

初期化パラメータ

デフォルト設定

説明

AUDIT_TRAIL

DB

監査を有効または無効にします。詳細は、「標準監査証跡の有効化または無効化」を参照してください。AUDIT_TRAILパラメータの完全なリストと設定例については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

AUDIT_FILE_DEST

ORACLE_BASE/admin/ORACLE_SID/adump

または

$ORACLE_HOME/rdbms/audit

AUDIT_TRAIL初期化パラメータがOS、XMLまたはXML,EXTENDEDに設定されている場合に監査証跡が書き込まれるオペレーティング・システム・ディレクトリを指定します。AUDIT_TRAIL初期化パラメータがXMLに設定されている場合、Oracle Databaseでは監査レコードがXML形式で書き込まれます。

Oracle Databaseでは、必須の監査情報もこの場所に書き込まれ、AUDIT_SYS_OPERATIONS初期化パラメータが設定されている場合はユーザーSYSの監査レコードが書き込まれます。

AUDIT_SYS_OPERATIONS

FALSE

ユーザーSYS、およびSYSDBAまたはSYSOPER権限で接続しているユーザーによって直接発行されたトップレベルの操作の監査を有効または無効にします。Oracle Databaseによって、監査レコードがオペレーティング・システムの監査証跡に書き込まれます。AUDIT_TRAIL初期化パラメータをXMLまたはXML, EXTENDEDに設定すると、監査レコードはXML形式で書き込まれます。

UNIXシステムでは、AUDIT_SYSLOG_LEVELパラメータも設定した場合に、AUDIT_TRAILパラメータが上書きされます。これにより、SYS監査レコードはSYSLOGユーティリティを使用してシステム監査ログに書き込まれます。

AUDIT_SYSLOG_LEVEL

デフォルト設定なし

UNIXシステムでは、SYSLOGユーティリティを使用してSYSおよび標準OS監査レコードをシステム監査ログに書き込みます。

初期化パラメータを変更するには、「初期化パラメータ値の変更」を参照してください。初期化パラメータの詳細は、『Oracle Databaseリファレンス』および『Oracle Database管理者ガイド』を参照してください。

索引
A  B  C  D  E  F  G  H  I  K  L  M  N  O  P  R  S  T  U  V  W  X

A

アクセス制御

データ暗号化, 6.2.2

実施, 5.2.1

Oracle Label Security, 6.5.1

管理アカウント

概要, 3.2.1

アクセス, 5.2.2

パスワード, 3.6

事前定義済, 表示, 3.2.1

管理者

listener.oraファイルの権限, 5.2.2

アクセスの制限, 6.6

職務分離, 6.6.1

ANONYMOUSユーザー・アカウント, 3.2.1 ANYシステム権限, データ・ディクショナリの保護, 2.3.2 APEX_PUBLIC_USERユーザー・アカウント, 3.2.2 アプリケーション・コンテキスト

Oracle Virtual Private Database, 併用, 6.4.1

ASMSNMPユーザー・アカウント, 3.2.1 監査ファイル

アーカイブおよびパージ, 7.6.3

オペレーティング・システム・ファイル, 書込み先, 7.4.2

監査レコード

タイプ, 7.3

表示, 7.3

監査証跡

DB設定, 7.4.2

XMLファイル出力, 7.4.2

監査

概要, 7.1

DDL文, 7.4.4

デフォルトのセキュリティ設定, 変更, 7.4.3

DML文, 7.4.4

ファイングレイン監査, 7.1

ガイドライン, セキュリティ, 7.6

履歴情報, 7.6.3

情報の管理しやすい状態での維持, 7.6.2

ユーザー・アクションの監視, 7.1

権限の監査オプション, 7.4.5

監査を行う理由, 7.2

米国企業改革法(Sarbanes-Oxley Act)

要件, 7.4.3

不審なアクティビティ, 7.6.4 監査レコードの表示, 7.3 記録される場所, 7.3 認証

クライアント, 5.2.1

リモート, 5.2.1, 5.2.1

厳密, 3.7

実行者の権限を使用するAUTHID CURRENT USER句, 4.5.2.5

B

BFILEファイル

アクセスの制限, 2.4

BIユーザー・アカウント, 3.2.3

C

クライアント接続

盗用, 5.2.1

クライアントのガイドライン, 5.2.1 構成ファイル

listener.ora

リモートからのリスナーの管理, 5.2.2

サンプル, 5.2.2

CONNECTロール, 使用可能な権限, 4.3 接続

保護, 5.2

SYSユーザー, 4.2

CREATE ANY TABLE文, 4.2 CREATE DATABASE LINK文, 4.3 CREATE EXTERNAL JOB権限

デフォルトのセキュリティ設定, 変更, 2.2

CREATE SESSION文, 4.3 CREATE TABLE文, 監査, 7.4.4 CTXSYSユーザー・アカウント, 3.2.1

D

データ定義言語

監査, 7.4.4

データ・ディクショナリ

概要, 2.3.1

保護, 2.3.2

データ・ディクショナリ・ビュー

DBA_USERS, 3.7

DBA_USERS_WITH_DEFPWD, 3.5

データファイル

アクセスの制限, 2.4

データ操作言語, 監査, 7.4.4 データベース

互換性の確認, 6.2.4.1

データベース・アカウント

「ユーザー・アカウント」を参照

データベース・コンフィギュレーション・アシスタント

デフォルトでの監査, 7.4.3

デフォルト・パスワード, 変更, 3.6

Database Control

「Oracle Enterprise Manager Database Control」を参照

DBA_USERSデータ・ディクショナリ・ビュー, 3.7 DBA_USERS_WITH_DEFPWDデータ・ディクショナリ・ビュー, 3.5 DBCA

「Database Configuration Assistant」を参照

DBSNMPユーザー・アカウント

概要, 3.2.1

パスワード, デフォルト, 3.6

デフォルト・パスワード

管理アカウント, 併用, 3.6

変更の重要性, 3.5

デフォルトの権限, 2.4 デフォルトのセキュリティ設定

概要, 2.2

サービス拒否(DoS)攻撃

ネットワーク, 対処, 5.2.2

「セキュリティ攻撃」を参照

DIPユーザー・アカウント, 3.2.2 不要なサービスの無効化, 5.2.2 DROP TABLE文, 監査, 7.4.4

E

暗号化

概要, 6.2.1

アルゴリズム, 説明, 5.3.2

コンポーネント, 6.2.1

データ転送, 5.2.2

ネットワーク, 5.3

ネットワーク・トラフィック, 5.2.2

暗号化しない理由, 6.2.2

暗号化する理由, 6.2.2

Enterprise Edition, 3.7 エラー

トレース・ファイルの確認, 4.5.2.5

WHEN NO_DATA_FOUND例外の例, 4.5.2.5

例

ユーザー・セッション情報, SYS_CONTEXTを使用した取得, 6.4.2.4

チュートリアルも参照

例外

WHEN NO_DATA_FOUNDの例, 4.5.2.5

EXFSYSユーザー・アカウント, 3.2.1 外部表, 2.4

F

ファイル

監査

アーカイブ, 7.6.3

DoS攻撃, 推奨, 7.4.2

構成, 5.2.2 listener.ora, 5.2.2 リスナー・アクセスの制限, 5.2.2 アクセスの制限, 2.4 シンボリック・リンク, 制限, 2.4 ファイングレイン監査, 7.1 ファイアウォール

Axent, 5.2.2

CheckPoint, 5.2.2

Cisco, 5.2.2

データベース・サーバー, 内側に配置, 5.2.2

Firewall-1, 5.2.2

Gauntlet, 5.2.2

ガイドライン, 5.2.2

Network Associates, 5.2.2

PIX Firewall, 5.2.2

Raptor, 5.2.2

サポートされている

パケット・フィルタ型, 5.2.2

プロキシ対応, 5.2.2

FLOWS_040100ユーザー・アカウント, 3.2.2 FLOWS_FILESユーザー・アカウント, 3.2.2 FTPサービス

無効化, 5.2.2

G

GRANT ALL PRIVILEGES権限, 2.3.2

セキュリティのガイドライン

監査

監査済情報, 管理, 7.6.2

データベース・アクティビティ, 通常, 7.6.3

デフォルト監査, 7.6.1

クライアント接続, 5.2.1 データベース・アクティビティ, 疑わしい, 7.6.4 ネットワーク接続, 5.2.2 データベースへのオペレーティング・アクセス, 2.4 オペレーティング・システム・アカウント, 権限の制限, 2.4 オペレーティング・システム・ユーザー, 数の制限, 2.4 Oracleホームのデフォルトの権限, 変更の不許可, 2.4 Oracle Label Securityポリシー, 計画, 6.5.2 パスワード

管理, 3.6

作成, 3.4

管理, 強制, 3.7

権限, 付与, 4.2 PUBLICロール, 権限, 4.4 ロール, ユーザーへの付与, 4.3 ランタイム機能, 権限の付与, 2.5 シンボリック・リンク, 制限, 2.4

H

HRユーザー・アカウント, 3.2.3

I

IDの盗用

「セキュリティ攻撃」を参照

初期化パラメータ

AUDIT_FILE_DESTINATION, 7.7

AUDIT_SYS_OPERATIONS, 7.7

AUDIT_SYSLOG_LEVEL, 7.7

AUDIT_TRAIL, 7.7

構成関連, 2.6

デフォルトのセキュリティ, 変更, 2.2

FAILED_LOGIN_ATTEMPTS, 3.8

インストール関連, 2.6

MAX_ENABLED_ROLES, 4.6

変更, 2.6.1

O7_DICTIONARY_ACCESSIBILITY

概要, 2.6

データ・ディクショナリ, 保護, 2.3.2

デフォルトの設定, 2.3.2

Database Controlの設定, 2.3.2

OS_AUTHENT_PREFIX, 5.4 OS_ROLES, 4.6 PASSWORD_GRACE_TIME, 3.8 PASSWORD_LIFE_TIME, 3.8 PASSWORD_LOCK_TIME, 3.8 PASSWORD_REUSE_MAX, 3.8 PASSWORD_REUSE_TIME, 3.8 REMOTE_LISTENER, 5.4 REMOTE_OS_AUTHENT, 5.2.1, 5.4 REMOTE_OS_ROLES, 4.6, 5.4 SEC_CASE_SENSITIVE_LOGIN, 3.8 SEC_MAX_FAILED_LOGIN_ATTEMPTS, 3.8 SEC_RETURN_SERVER_RELEASE_BANNER, 2.6 SQL92_SECURITY, 4.6 実行者権限, 4.5.2.5 IPアドレス

偽造, 5.2.2

IXユーザー・アカウント, 3.2.3

K

Kerberos認証

パスワード管理, 3.7

L

LBACSYSユーザー・アカウント, 3.2.1

最小権限の原則, 4.2, 4.2

リスナー

Oracle所有者でない, 5.2.2

オンライン管理の防止, 5.2.2

権限の制限, 5.2.2, 5.2.2

セキュアな管理, 5.2.2

listener.oraファイル

リモートからの管理, 5.2.2

オンライン管理, 防止, 5.2.2

ログ・ファイル

アクセスの制限, 2.4

M

MDDATAユーザー・アカウント, 3.2.2

MDSYSユーザー・アカウント, 3.2.1

MGMT_VIEWユーザー・アカウント, 3.2.1

監視

「監査」を参照

複数のクライアント・ネットワーク・セッションの多重化, 5.2.2 多層環境, 監査, 7.4.6 My Oracle Support

概要, はじめに

サービス・リクエストを記録するためのユーザー・アカウント, 3.2.2

N

Net8ネットワーク・ユーティリティ

「Oracle Net」を参照

ネットワーク・アクティビティ

監査, 7.4.8

ネットワーク認証サービス, 3.7

スマート・カード, 3.7

トークン・カード, 3.7

X.509証明書, 3.7

ネットワーク暗号化

概要, 5.3.1

コンポーネント, 5.3.1

構成, 5.3.2

ネットワークIPアドレス, 5.2.2 ネットワーク・セキュリティ

サービス拒否攻撃, 対処, 5.2.2

クライアントのガイドライン, 5.2.1

データベース・ユーザー以外のユーザー, 6.4.1

O

オブジェクト権限, 4.2

OEユーザー・アカウント, 3.2.3

OLAPSYSユーザー・アカウント, 3.2.1

オペレーティング・システム・アクセス, 制限, 2.4

オペレーティング・システム・アカウント権限, 制限, 2.4

オペレーティング・システム・ユーザー, 数の制限, 2.4

オペレーティング・システム

危険にさらされた, 5.2.1

デフォルトの権限, 2.4

Oracle Advanced Security

認証の保護, 3.7

ネットワーク・トラフィックの暗号化, 5.2.2

Oracle Connection Manager

ファイアウォール構成, 5.2.2

Oracle Database Vault

概要, 6.6.1

コンポーネント, 6.6.1

データベースへの登録, 6.6.2.1.1

コンプライアンス, 遵守, 6.6.1

チュートリアル, 6.6.2

Oracle Enterprise Manager Database Control

概要, 1.3

起動, 2.3.2

Oracleホーム

デフォルトの権限, 変更の不許可, 2.4

Oracle Java Virtual Machine(OJVM), 2.5 Oracle Label Security(OLS)

概要, 6.5.1

Oracle Virtual Private Databaseとの比較, 6.3

コンポーネント, 6.5.1

計画のガイドライン, 6.5.2

動作, 6.5.1

Oracle Databaseへの登録, 6.5.3.1

チュートリアル, 6.5.3

Oracle Virtual Private Databaseとの併用, 6.3

Oracle MetaLink

「My Oracle Support」を参照

Oracle Net

ネットワーク・トラフィックの暗号化, 5.3.2

ファイアウォールのサポート, 5.2.2

Oracle Virtual Private Database(VPD)

概要, 6.4.1

利点, 6.4.1

アプリケーション・コンテキスト, 6.4.1

Oracle Label Securityとの比較, 6.3

コンポーネント, 6.4.1

チュートリアル, 6.4.2

Oracle Label Securityとの併用, 6.3

ORACLE_OCMユーザー・アカウント, 3.2.2 ORDDATAユーザー・アカウント, 3.2.1 ORDPLUGINSユーザー・アカウント, 3.2.1 ORDSYSユーザー・アカウント, 3.2.1 OUTLNユーザー・アカウント, 3.2.1 OWBSYSユーザー・アカウント, 3.2.1

P

パスワード

管理, 3.6

管理ユーザー, 3.6

変更, 3.5

複雑度, 3.7

デフォルトのセキュリティ設定, 変更, 2.2

デフォルト・ユーザー・アカウント, 3.5

履歴, 3.7

長さ, 3.7

管理, 3.7

管理ルール, 3.7

SYSユーザー, 3.6

SYSTEMユーザー, 3.6

セキュリティのためのパスワード

要件, 3.4

権限

デフォルト, 2.4

ランタイム機能, 2.5

PMユーザー・アカウント, 3.2.3 最小権限の原則, 4.2, 4.2 権限

概要, 4.1

デフォルト監査が有効になっている場合の監査, 7.4.3

監査, 7.4.5, 7.4.5

CREATE DATABASE LINK文, 4.3

システム

ANY, 2.3.2

SYSTEMおよびOBJECT, 4.2 監査でのプロキシの使用, 7.4.6 PUBLIC権限, 不要な権限とロールの取消し, 4.4

R

リモート認証, 5.2.1, 5.2.1

REMOTE_OS_AUTHENT初期化パラメータ, 5.2.1

ロール

CONNECT, 4.3

独自のロールの作成, 4.3

職務権限のみ, 4.3

ルート・ファイル・パス

データベース以外の場所のファイルおよびパッケージ, 2.5

ランタイム機能, 権限の制限, 2.5

S

米国企業改革法(Sarbanes-Oxley Act)

監査要件, 7.4.3

スキーマ・オブジェクト, 監査, 7.4.7 SCOTTユーザー

概要, 3.2.3

権限の制限, 4.3

例のsec_adminセキュリティ管理者

作成, 4.5.2.1

削除, 7.5.5

セキュア・アプリケーション・ロール

概要, 4.5.1

利点, 4.5.1

コンポーネント, 4.5.1

実行者権限, 4.5.2.5

チュートリアル, 4.5.2

SYS_CONTEXT SQLファンクションからのユーザー環境情報, 4.5.2.5

Secure Sockets Layer(SSL)

リモートからのリスナーの管理, 5.2.2

セキュリティ管理者

作成例, 4.5.2.1

sec_adminの削除, 7.5.5

セキュリティ攻撃

アプリケーション, 5.2.1

クライアント接続, 5.2.1

サービス拒否, 5.2.2

傍受, 5.2.1

偽造されたIPアドレス, 5.2.1

偽造または盗用されたクライアント・システムID, 5.2.1

ネットワーク接続, 5.2.2

セキュリティ・タスク, 一般的, 1.2 SELECT ANY DICTIONARY権限

GRANT ALL PRIVILEGES権限, 含まれない, 2.3.2

機密データ

Oracle Label Security, 6.5.1

Oracle Virtual Private Database, 6.4.1

セキュア・アプリケーション・ロール, 4.5.1

職務分離の概念, 4.5.2.1 職務分離の概念

概要, 6.6.1

Oracle Database Vault, 6.6.2.2

セッション情報, 取得, 6.4.1 SHユーザー・アカウント, 3.2.3 SI_INFORMTN_SCHEMAユーザー・アカウント, 3.2.1 スマート・カード, 3.7 SPATIAL_CSW_ADMIN_USRユーザー・アカウント, 3.2.2 SPATIAL_WFS_ADMIN_USRユーザー・アカウント, 3.2.2 SQL文

デフォルト監査が有効になっている場合の監査, 7.4.3

監査, 7.4.4

監査でのプロキシの使用, 7.4.6

SQL*Netネットワーク・ユーティリティ, 5.2.2 標準監査

概要, 7.4.1

デフォルトでの監査, 7.4.3

監査証跡の有効化または無効化, 7.4.2

多層環境, 7.4.6

ネットワーク・アクティビティ, 7.4.8

権限, 7.4.5

プロキシ, 7.4.6, 7.4.6

スキーマ・オブジェクト, 7.4.7

SQL文, 7.4.4

チュートリアル, 7.5

厳密な認証, 3.7 シンボリック・リンク, 制限, 2.4 SYSユーザー・アカウント

概要, 3.2.1

パスワードの使用, 3.6

SYS_CONTEXT SQLファンクション

例, 6.4.2.4

ユーザーの検証, 4.5.2.5

SYS.AUD$データベース監査証跡表

概要, 7.4.2

DB(データベース)オプション, 7.5.1

DB, EXTENDEDオプション, 7.4.2

XML, EXTENDEDオプション, 7.4.2

SYSMANユーザー・アカウント

概要, 3.2.1

パスワードの使用, 3.6

パスワード, デフォルト, 3.6

SYS権限での接続, 4.2 システム管理者

「管理アカウント」, 「セキュリティ管理者」を参照

システムID, 盗用, 5.2.1 システム権限, 4.2

ANY, 2.3.2

SYSTEMユーザー・アカウント

概要, 3.2.1

パスワードの使用, 3.6

T

表領域

暗号化, 6.2.4.4.2

TCPポート

無効化されているすべてのサービスのクローズ, 5.2.2

TCPSプロトコル

Secure Sockets Layer, 使用, 5.2.2

TDE

「透過的データ暗号化」を参照

TELNETサービス, 無効化, 5.2.2 TFTPサービス

無効化, 5.2.2

トークン・カード, 3.7 トレース・ファイル

エラーの確認, 4.5.2.5

アクセスの制限, 2.4

透過的データ暗号化

概要, 6.2.3

利点, 6.2.3

コンポーネント, 6.2.3

構成, 6.2.4

動作, 6.2.3

パフォーマンスの影響, 6.2.3

記憶領域, 6.2.3

表の列

データベース・インスタンスでのチェック, 6.2.5.3

個々の表のチェック, 6.2.5.2

暗号化, 6.2.4.4.1

表領域

チェック, 6.2.5.4

表領域, 暗号化, 6.2.4.4.2 ウォレット, 6.2.4.2 トラブルシューティング

トレース・ファイルの確認, 4.5.2.5

チュートリアル

Oracle Database Vault, 6.6.2

Oracle Label Security, 6.5.3

Oracle Virtual Private Database, 6.4.2

セキュア・アプリケーション・ロール, 4.5.2

標準監査, 7.5

U

UDPポート

無効化されているすべてのサービスのクローズ, 5.2.2

ユーザー・アカウント

概要, 3.1

管理ユーザー・パスワード, 3.6

デフォルト, パスワードの変更, 3.5

期限切れ, 3.3

情報の検索, 3.7

ロック, 3.3

パスワード要件, 3.4

事前定義済

管理, 3.2.1

非管理, 3.2.2

サンプル・スキーマ, 3.2.3

保護, 3 ロック解除, 3.3 ユーザー・アカウント, 事前定義

ANONYMOUS, 3.2.1

APEX_PUBLIC_USER, 3.2.2

ASMSNMP, 3.2.1

BI, 3.2.3

CTXSYS, 3.2.1

DBSNMP, 3.2.1

DIP, 3.2.2

EXFSYS, 3.2.1

FLOWS_040100, 3.2.2

FLOWS_FILES, 3.2.2

HR, 3.2.3

IX, 3.2.3

LBACSYS, 3.2.1

MDDATA, 3.2.2

MDSYS, 3.2.1

MGMT_VIEW, 3.2.1

OE, 3.2.3

OLAPSYS, 3.2.1

ORACLE_OCM, 3.2.2

ORDDATA, 3.2.1

ORDPLUGINS, 3.2.1

ORDSYS, 3.2.1

OUTLN, 3.2.1

OWBSYS, 3.2.1

PM, 3.2.3

SCOTT, 3.2.3, 4.3

SH, 3.2.3

SI_INFORMTN_SCHEMA, 3.2.1

SPATIAL_CSW_ADMIN_USR, 3.2.2

SPATIAL_WFS_ADMIN_USR, 3.2.2

SYS, 3.2.1

SYSMAN, 3.2.1

SYSTEM, 3.2.1

WK_TEST, 3.2.1

WKPROXY, 3.2.1

WKSYS, 3.2.1

WMSYS, 3.2.1

XDB, 3.2.1

XS$NULL, 3.2.2

ユーザー・セッション情報, 取得, 6.4.1

V

有効なノードの確認, 5.2.2

ビュー

「データ・ディクショナリ・ビュー」を参照

仮想プライベート・データベース

「Oracle Virtual Private Database」を参照

VPD

「Oracle Virtual Private Database」を参照

脆弱なランタイム・コール, 2.5

セキュリティの強化, 2.5

W

ウォレット

クローズ, 6.2.4.3

作成, 6.2.4.1

透過的データ暗号化, 6.2.4.2

WK_TESTユーザー・アカウント, 3.2.1 WKPROXYユーザー・アカウント, 3.2.1 WKSYSユーザー・アカウント, 3.2.1 WMSYSユーザー・アカウント, 3.2.1

X

X.509証明書, 3.7

XDBユーザー・アカウント, 3.2.1

XS$NULLユーザー・アカウント, 3.2.2

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2014, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

制限付権利

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション（人的傷害を発生させる可能性があるアプリケーションを含む）への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性（redundancy）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。