2 エンタープライズ・ユーザー・セキュリティの準備

エンタープライズ・ユーザー・セキュリティを使用すると、エンタープライズ全体でデータベース・ユーザーを一元的に管理できます。エンタープライズ・ユーザーは、Oracle Internet Directoryに作成され、ディレクトリに登録された様々なエンタープライズ・データベースに対するロールや権限を割り当てることができます。

この章では、エンタープライズ・ユーザー・セキュリティを簡単に使用できるようにチュートリアル方式を採用します。次の各ステップでは、エンタープライズ・ユーザー・セキュリティの構成について説明します。
  1. ディレクトリを使用するためのデータベースの構成

  2. ディレクトリへのデータベースの登録

  3. データベースでの共有スキーマの作成

  4. 共有スキーマへのエンタープライズ・ユーザーのマッピング

  5. エンタープライズ・ユーザーとしてのデータベースへの接続

  6. エンタープライズ・ロールの使用

  7. プロキシ権限の使用

  8. プラガブル・データベースの使用

2.1 ディレクトリを使用するためのデータベースの構成

エンタープライズ・ユーザー・セキュリティの構成の第1ステップは、ディレクトリを使用するようにデータベースを構成することです。Net Configuration Assistant (NetCA)ツールを実行すると、データベースで使用する必要があるディレクトリのホスト名およびポートを構成できます。

ディレクトリを使用するようにデータベースを構成するには:

  1. netcaコマンドを使用してNetCAを起動します。
    • Windowsでは、「スタート」メニューからNetCAを起動することもできます。

      「スタート」→「すべてのプログラム」→「Oracle - OracleHomeName」「Configuration and Migration Tools」→「Net Configuration Assistant」の順にクリックします。

    • UNIXシステムでは、次のコマンドを使用してNetCAを起動できます。

      $ORACLE_HOME/bin/netca

    「ようこそ」画面が表示されます。

  2. 「ディレクトリ使用構成」を選択します。「次へ」をクリックします。

    「ディレクトリ・タイプ」画面が表示されます。

  3. 「次へ」をクリックします。

    ディレクトリの場所画面が表示されます。

  4. Oracle Internet Directoryサーバーが稼働しているホストの名前を入力します。また、LDAPの非SSLポート番号およびSSLポート番号も入力します。これらのポート番号のデフォルトは3060および3131です。「次へ」をクリックします。

    Oracleコンテキストの選択画面が表示されます。

  5. 使用するデフォルトのOracleコンテキストを選択します。ディレクトリ・サーバーに複数のアイデンティティ管理レルムがある場合は、これを選択する必要があります。「次へ」をクリックします。

    「ディレクトリ使用構成-完了」画面が表示されます。

  6. ディレクトリ使用構成が正常に完了したことを確認します。「次へ」をクリックします。
  7. 終了をクリックします。

    ldap.oraファイルが$ORACLE_HOME/network/adminディレクトリに作成されます。Windowsでは、このディレクトリは$ORACLE_HOME\network\adminディレクトリです。ldap.oraファイルには、ディレクトリに関する接続情報の詳細が格納されます。

2.2 ディレクトリへのデータベースの登録

次のステップは、データベースをディレクトリ・サービスに登録することです。Database Configuration Assistant (DBCA)ツールを使用すると、データベースをOracle Internet Directoryに登録できます。

データベースをディレクトリに登録するには:

  1. dbcaコマンドを使用してDBCAを起動します。
    • Windowsでは、「スタート」メニューからDBCAを起動することもできます。

      「スタート」→「すべてのプログラム」→「Oracle - OracleHomeName」「Configuration and Migration Tools」→「Database Configuration Assistant」の順にクリックします。

    • UNIXシステムでは、次のコマンドを使用してDBCAを起動できます。

      $ORACLE_HOME/bin/dbca

    「ようこそ」画面が表示されます。

  2. 「次へ」をクリックします。

    「操作」画面が表示されます。

  3. 「データベース・オプションの構成」を選択します。「次へ」をクリックします。

    「データベース」画面が表示されます。

  4. 構成するデータベース名を選択します。オペレーティング・システムの認証を使用していない場合は、SYSユーザー資格証明の入力を求められることもあります。「次へ」をクリックします。

    「管理オプション」画面が表示されます。

  5. 管理オプションを選択し、「次」をクリックします。

    「セキュリティ設定」画面が表示されます。

  6. Oracle Database 12cのセキュリティ設定を維持する場合は、12cのデフォルトの高度セキュリティ設定を維持を選択します。「次へ」をクリックします。

    「ネットワーク構成」画面が表示されます。

  7. 「データベースを登録する」を選択してデータベースをディレクトリに登録します。Oracle Internet Directoryへのデータベースの登録を許可されたユーザーの識別名(DN)を入力します。また、ディレクトリ・ユーザーのパスワードも入力します。ウォレット・パスワードを入力します。「パスワードの確認」フィールドにパスワードを再度入力します。「次へ」をクリックします。

    ノート:

    データベースでは、ランダムに生成されたパスワードを使用してディレクトリにログインします。このデータベース・パスワードは、Oracleウォレットに格納されます。また、このウォレットを使用して、SSL接続に必要な証明書を格納することもできます。

    指定するウォレット・パスワードは、データベース・パスワードとは異なります。ウォレット・パスワードは、ウォレットの保護に使用します。

    「データベース・コンポーネント」画面が表示されます。

  8. 「次へ」をクリックします。

    「接続モード」ページが表示されます。

  9. 「専用サーバー・モード」または「共有サーバー・モード」を選択します。終了をクリックします。

    「確認」ダイアログ・ボックスが表示されます。

  10. 「OK」をクリックします。

ノート:

データベースをディレクトリに登録した後に、データベース・ウォレットの自動ログインが有効になっていることを確認します。デフォルトのウォレットは、$ORACLE_BASE/admin/database_sid/walletディレクトリに作成されます。

ウォレット・ディレクトリにcwallet.ssoファイルが存在することをチェックすることで、ウォレットに対する自動ログインが有効であることを確認できます。このファイルが存在しない場合は、Oracle Wallet Managerを使用してウォレットを開き、ウォレットに対する自動ログインを有効にするオプションを使用して、自動ログインを有効にできます。

2.3 ディレクトリへのOracle RACデータベースの登録

Oracle RAC環境でOracle Internet Directory (OID)を構成するには、特定の追加のステップが必要です。

  1. ディレクトリを使用するためのデータベースの構成のステップに従って、NetCAを使用してldap.oraファイルを作成します。クラスタ全体の構成のための「クラスタ構成」、または1つのノードにldap.oraファイルを作成して残りのノードにコピーする「単一ノード構成」を選択します。ldap.oraファイルは、$ORACLE_HOME/network/admin/ldap.oraにあります。
  2. Oracle RACデータベースのサイレント・モードでDBCAを実行して、データベースを構成します。
    dbca -silent -configureDatabase -sourceDB <DB_name> -registerWithDirService <true/false> 
    -dirServiceUserName <OracleContext_value> -dirServicePassword <OID_pwd> -walletPassword <wallet_pwd>

    DB_nameは、構成するソース・データベースの名前です。

    registerWithDirServiceは、データベースを構成するためにtrueに設定する必要があるブール値です。

    OracleContext_valueは、OIDに対して一意であるデフォルトのOracleコンテキストです。

    OID_pwdは、OIDの一意のパスワード値です。

    wallet_pwdは、ユーザーが指定したウォレット・パスワードです。

    たとえば、t2という名前のOracle RACデータベースの場合、DBCAコマンドは次のようになります。
    dbca -silent -configureDatabase -sourceDB t2 -registerWithDirService true 
    -dirServiceUserName cn=dbcauser,cn=users,dc=us,dc=oracle,dc=com 
    -dirServicePassword <OID_pwd> -walletPassword <wallet_pwd>

2.4 データベースでの共有スキーマの作成

データベースに共有スキーマを作成すると、複数のエンタープライズ・ユーザーを同じスキーマにマップできます。例2-1では、共有スキーマglobal_ident_schema_userを作成し、CONNECTロールを付与します。

例2-1 共有スキーマの作成

SQL> CREATE USER global_ident_schema_user IDENTIFIED GLOBALLY;
User created.
SQL> GRANT CONNECT TO global_ident_schema_user;
Grant succeeded.

2.5 共有スキーマへのエンタープライズ・ユーザーのマッピング

エンタープライズ・ユーザー・セキュリティは、Enterprise Managerを使用して管理できます。例2-2では、DN cn=users, dc=us, dc=oracle, dc=comを共有データベース・スキーマglobal_ident_schema_userにマップします。

例2-2 共有スキーマへのエンタープライズ・ユーザーのマッピング

ユーザー・スキーマ・マッピングを作成するには、次のようにします。

  1. Enterprise Manager Cloud Controlに管理ユーザーとしてログインします。

  2. 使用するデータベースに移動するには、「ターゲット」メニューから「データベース」を選択します。

  3. 表示されたリストで、データベース名をクリックします。データベースのページが表示されます。

  4. 「管理」メニューで、「セキュリティ」→「エンタープライズ・ユーザー・セキュリティ」を選択します。「Oracle Internet Directoryログイン」ページが表示されます。

  5. 「ユーザー」フィールドに、エンタープライズ・ユーザーを管理できるディレクトリ・ユーザーの識別名(DN)を入力します。「パスワード」フィールドに、ユーザー・パスワードを入力します。「ログイン」をクリックします。

    関連項目:

    ディレクトリへのデータベースの登録、特に以前にユーザーDNおよびパスワードを入力し、ディレクトリ・サービスを使用してデータベースを登録したステップ6

    「エンタープライズ・ユーザー・セキュリティ」ページが表示されます。

  6. 「エンタープライズ・ドメインの管理」をクリックします。

    「エンタープライズ・ドメインの管理」ページが表示されます。

  7. データベースを含むエンタープライズ・ドメインを選択します。構成をクリックします。

    「ドメインの構成」ページが表示されます。

  8. 「ユーザー・スキーマ・マッピング」タブをクリックします。エンタープライズ・ドメインに適用されているユーザー・スキーマ・マップがすべて表示されます。

  9. 「作成」をクリックします。

    「マッピングの作成」ページが表示されます。

  10. 「自」セクションで、「サブツリー」を選択します。検索アイコンをクリックします。DNのcn=Users, dc=us,dc=oracle,dc=comを選択します。

  11. 「至」セクションで、「スキーマ」フィールドにglobal_ident_schema_userと入力します。「続行」をクリックします。

    「ドメインの構成」ページにユーザー・スキーマ・マッピングが追加されます。

  12. 「OK」をクリックします。

2.6 エンタープライズ・ユーザーとしてのデータベースへの接続

この時点で、マップされたOracle Internet Directoryサブツリー内のすべてのユーザーは、エンタープライズ・ユーザーとしてデータベースに接続できます。例2-3に、データベースに接続するcn=orcladmin, cn=users, dc=us,dc=oracle,dc=comユーザーを示します。

例2-3 エンタープライズ・ユーザーとしてのデータベースへの接続

SQL> CONNECT orcladmin
Enter password:
Connected.

2.7 エンタープライズ・ロールの使用

エンタープライズ・ロールはディレクトリに作成されます。エンタープライズ・ロールには、エンタープライズ・ドメインに属する様々なデータベースのグローバル・ロールが格納されます。エンタープライズ・ロールは、エンタープライズ・ユーザーにデータベース権限を割り当てるために使用します。

例2-4では、2人のエンタープライズ・ユーザーのJoeとNinaを作成します。この2人のユーザーはいずれもサブツリーcn=Users, dc=us,dc=oracle,dc=comに作成されますが、このサブツリーはすでにEUSDBデータベースのglobal_ident_schema_userにマップされています。前のサブツリーの例に示されているLDAP属性タイプの詳細は、「RFC4519 — Lightweight Directory Access Protocol (LDAP) : Schema for User Applications」を参照してください。

NinaはHRマネージャです。EUSDBデータベースのhr.employees表に対するSELECT権限を必要とします。例2-4では、エンタープライズ・ロールを使用してこれを実現します。

例2-4 エンタープライズ・ロールの使用

2人のエンタープライズ・ユーザーのJoeとNinaの作成から始めます。エンタープライズ・ユーザーは、Oracle Internet Directoryセルフ・サービス・コンソールを使用して作成できます。

エンタープライズ・ユーザーのJoeとNinaを作成するには:

  1. Oracle Internet Directoryセルフ・サービス・コンソールに接続します。次のURLを使用します。

    http://hostname:port/oiddas/

    hostnameは、Oracle Internet Directoryサーバーが稼働しているホストの名前です。port番号は、Oracle Internet Directoryセルフ・サービス・コンソールが稼働しているTCPポート番号です。デフォルトは7777です。

  2. 「ディレクトリ」タブをクリックします。

    「サインイン」ページが表示されます。

  3. Oracle Internet Directoryにユーザーを作成できるユーザーとしてログインします。

    「ユーザー」ページが表示されます。

  4. 「作成」をクリックします。

    「ユーザーの作成」ページが表示されます。

  5. 「ユーザー名」にjoeと入力します。その他の必須フィールドに値を入力します。「有効」で「有効」を選択します。

  6. 発行をクリックします。

  7. 「別のユーザーの作成」をクリックします。

    「ユーザーの作成」ページが表示されます。

  8. 「ユーザー名」にNinaと入力します。その他の必須フィールドに値を入力します。「有効」で「有効」を選択します。

  9. 発行をクリックします。「OK」をクリックします。

次に、hr.employees表へのアクセスを許可するグローバル・ロールをデータベースに作成します。次のSQL*Plus文は、グローバル・ロールhr_accessを作成し、必要な権限を付与します。

SQL> CREATE ROLE hr_access IDENTIFIED GLOBALLY;
Role created.
SQL> GRANT SELECT ON hr.employees TO hr_access;
Grant succeeded.

次にhr_accessというエンタープライズ・ロールを作成し、グローバル・ロールを割り当てます。そして、このエンタープライズ・ロールをエンタープライズ・ユーザーNinaに割り当てます。エンタープライズ・ロールは、Enterprise Managerを使用して作成できます。

エンタープライズ・ロールhr_accessを作成するには:

  1. Enterprise Manager Cloud Controlに管理ユーザーとしてログインします。

  2. 使用するデータベースに移動するには、「ターゲット」メニューから「データベース」を選択します。

  3. 表示されたリストで、データベース名をクリックします。データベースのページが表示されます。

  4. 「管理」メニューで、「セキュリティ」→「エンタープライズ・ユーザー・セキュリティ」を選択します。「Oracle Internet Directoryログイン」ページが表示されます。

  5. 「ユーザー」フィールドに、エンタープライズ・ユーザーを管理できるディレクトリ・ユーザーの識別名(DN)を入力します。「パスワード」フィールドに、ユーザー・パスワードを入力します。「ログイン」をクリックします。

    「エンタープライズ・ユーザー・セキュリティ」ページが表示されます。

  6. 「エンタープライズ・ドメインの管理」をクリックします。

    「エンタープライズ・ドメインの管理」ページが表示されます。このページには、アイデンティティ管理レルム内のエンタープライズ・ドメインが一覧表示されます。

  7. データベースを含むエンタープライズ・ドメインを選択します。構成をクリックします。

    「ドメインの構成」ページが表示されます。

  8. 「エンタープライズ・ロール」タブをクリックします。

  9. 「作成」をクリックします。

    「エンタープライズ・ロールの作成」ページが表示されます。

  10. 「名前」フィールドにhr_accessと入力します。

  11. 「追加」をクリックし、データベース・グローバル・ロールをエンタープライズ・ロールに追加します。

    「検索と選択: データベース・グローバル・ロール」ウィンドウが表示されます。

  12. データベースのhr_accessグローバル・ロールを選択します。「選択」をクリックします。

    ノート:

    グローバル・ロールを選択するには、データベースにログインする必要があります。

  13. 「権限受領者」タブをクリックします。「追加」をクリックします。

    「選択: ユーザーまたはグループ」ウィンドウが表示されます。

  14. ユーザーNinaを選択します。「選択」をクリックします。

  15. 「エンタープライズ・ロールの作成」ページで「続行」をクリックします。

  16. 「ドメインの構成」ページで「OK」をクリックします。

これで、エンタープライズ・ユーザーNinaは、データベースのhr.employees表にアクセスできます。次のSQL*Plus文は、そのことを示しています。

SQL> CONNECT Nina
Enter password:
Connected.
SQL> SELECT employee_id FROM hr.employees;
EMPLOYEE_ID
-----------
        100
        101
        102
...
...
107 rows selected.

エンタープライズ・ユーザーJoeは、エンタープライズ・ロールが割り当てられていないため、hr.employees表にアクセスできません。

SQL> CONNECT joe
Enter password:
Connected.
SQL> SELECT employee_id FROM hr.employees;
SELECT employee_id FROM hr.employees

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

2.8 プロキシ権限の使用

プロキシ権限はエンタープライズ・ドメイン・レベルで作成されます。プロキシ権限により、エンタープライズ・ユーザーはローカル・データベース・ユーザーの代わりとなることができます。つまり、エンタープライズ・ユーザーはローカル・データベース・ユーザーとしてデータベースにログインできます。プロキシ権限は、個々のエンタープライズ・ユーザーまたはグループに付与できます。プロキシ権限は、複数のデータベース間でエンタープライズ・ユーザーとして動作する中間層アプリケーションでは特に有用です。

例2-5に、プロキシ権限の使用を示します。エンタープライズ・ユーザーjoeは販売マネージャであり、ターゲット・データベース・ユーザーSHとしてエンタープライズ・データベースにログインする必要があります。SHユーザーは、販売履歴関連の表を含むSHサンプル・スキーマを所有しています。

例2-5 プロキシ権限の使用

エンタープライズ・ユーザー・プロキシの許可の第1ステップは、ターゲット・データベース・ユーザーを変更(ALTER)し、エンタープライズ・ユーザーによって接続(CONNECT)できるようにすることです。次のSQL文は、SHデータベース・アカウントをロック解除してパスワードを設定し、エンタープライズ・ユーザー・プロキシを使用できるようにアカウントを変更(ALTER)します。

SQL> CONNECT SYSTEM
Enter password:
Connected.
SQL> ALTER USER SH IDENTIFIED BY hrd2guess ACCOUNT UNLOCK;
User altered.
SQL> ALTER USER SH GRANT CONNECT THROUGH ENTERPRISE USERS;
User altered.

次に、Enterprise Managerを使用してプロキシ権限を構成します。これにより、エンタープライズ・ユーザーjoeは、ローカル・データベース・ユーザーSHとして接続できます。

エンタープライズ・ユーザーjoeに対してプロキシ権限を構成するには:

  1. Enterprise Manager Cloud Controlに管理ユーザーとしてログインします。

  2. 使用するデータベースに移動するには、「ターゲット」メニューから「データベース」を選択します。

  3. 表示されたリストで、データベース名をクリックします。データベースのページが表示されます。

  4. 「管理」メニューで、「セキュリティ」→「エンタープライズ・ユーザー・セキュリティ」を選択します。「Oracle Internet Directoryログイン」ページが表示されます。

  5. 「ユーザー」フィールドに、エンタープライズ・ユーザーを管理できるディレクトリ・ユーザーの識別名(DN)を入力します。「パスワード」フィールドに、ユーザー・パスワードを入力します。「ログイン」をクリックします。

    「エンタープライズ・ユーザー・セキュリティ」ページが表示されます。

  6. 「エンタープライズ・ドメインの管理」をクリックします。

    「エンタープライズ・ドメインの管理」ページが表示されます。このページには、アイデンティティ管理レルム内のエンタープライズ・ドメインが一覧表示されます。

  7. 構成するエンタープライズ・ドメインを選択します。構成をクリックします。

    「ドメインの構成」ページが表示されます。

  8. 「プロキシ権限」タブをクリックします。

  9. 「作成」をクリックして新しいプロキシ権限を作成します。

    「プロキシ権限の作成」ページが表示されます。

  10. 「名前」フィールドに、プロキシ権限の名前としてSH_Proxyと入力します。

  11. 「ターゲットDBユーザー」タブが選択されていることを確認します。「追加」をクリックします。

    「検索と選択」ウィンドウが表示されます。

  12. SHユーザーを含むデータベースにログインします。エンタープライズ・ユーザー・プロキシを許可するように変更されているすべてのデータベース・ユーザーのリストが表示されます。

  13. SHユーザーを選択します。「選択」をクリックします。

    「プロキシ権限の作成」ページの「ターゲットDBユーザー」にSHユーザーが追加されます。

  14. 「権限受領者」タブをクリックします。

  15. 「追加」をクリックします。

    「選択: ユーザーまたはグループ」ウィンドウが表示されます。

  16. 「検索ベース」で「cn=users,dc=us,dc=oracle,dc=com」を選択します。「表示」「ユーザー」を選択します。実行をクリックします。

    サブツリーcn=users,dc=us,dc=oracle,dc=comの下のユーザーのリストが表示されます。

  17. cn=joe,cn=users,dc=us,dc=oracle,dc=comを選択します。「選択」をクリックします。

    「プロキシ権限の作成」ページの「権限受領者」にユーザーjoeが追加されます。

  18. 「プロキシ権限の作成」ページで「続行」をクリックします。

    「ドメインの構成」ページにプロキシ権限SH_Proxyが追加されます。

  19. 「OK」をクリックします。

これで、エンタープライズ・ユーザーjoeは、ローカル・データベース・ユーザーSHとしてログインできます。次のSQL文は、そのことを示しています。

SQL> REMARK Joe uses his own password to connect as the local database user, SH.
SQL> CONNECT joe[SH]
Enter password:
Connected.
SQL> SELECT * FROM SH.sales WHERE cust_id=4;

   PROD_ID    CUST_ID TIME_ID   CHANNEL_ID   PROMO_ID QUANTITY_SOLD AMOUNT_SOLD
---------- ---------- --------- ---------- ---------- ------------- -----------
        37          4 31-MAY-00          3        999             1       60.43
        39          4 31-MAY-00          3        999             1       38.45
        40          4 31-MAY-00          3        999             1        48.1
...
...
72 rows selected.

2.9 プラガブル・データベースの使用

エンタープライズ・ユーザー・セキュリティは、Oracle Database 12cリリース1 (12.1)に導入されたプラガブル・データベース(PDB)で使用できます。各PDBには、エンタープライズ・ユーザー・セキュリティのメタデータ(グローバル・ユーザー、グローバル・ロールなど)が個別に用意されています。PDBごとに個別の識別情報がディレクトリに格納されています。PDBは、ディレクトリに登録されている通常のデータベースと同じですが、次の制限があります。

  • クライアント側のSSL認証では、リスナー用に構成されたコンテナ・データベース(CDB)全体のウォレットを使用します。データベースとディレクトリ間の認証には、PDB固有のウォレットが使用されます。

  • クライアントとデータベース間の認証にSSLを使用し、データベースとディレクトリ間の認証でもSSLを使用する場合は、データベースに対して2つのウォレットを証明書とともに構成する必要があります。最初のウォレットはCDB全体のウォレットで、2番目のウォレットはPDB固有のウォレットです。

  • 現行ユーザーのデータベース・リンクはCDB環境ではサポートされません。

ノート:

各PDBには、それ固有のLDAP_DIRECTORY_ACCESSパラメータ値があります。LDAP_DIRECTORY_ACCESSパラメータの値は、PDBから設定する必要があります。

2.9.1 プラガブル・データベースのウォレット・ロケーション

プラガブル・データベースでは、PDBがディレクトリに登録されると、Database Configuration Assistant (DBCA)によって次の場所にウォレットが作成されます。

  • ORACLE_BASE環境変数が設定されている場合:

    ORACLE_BASE/admin/db_unique_name/pdb_GUID/wallet 
    
  • ORACLE_BASEが設定されていない場合:

    ORACLE_HOME/admin/db_unique_name/pdb_GUID/wallet
    

    PDB名は変更される可能性があり、GUIDは変更されないため、PDBのGUIDが使用されます。そのため、PDBのウォレット・ロケーションは、 PDB名が変更されても引き続き有効です。

ノート:

Microsoft Windows x64プラットフォームでは、listener.oraファイルおよびサーバー・サイドのsqlnet.oraファイルにWALLET_LOCATIONパラメータを指定しなければ、 サーバーはシステムのデフォルトの場所からウォレットを取り込みませんが、その場所とは%USERPROFILE%\ORACLE\WALLETSです。したがって、SSL接続を使用してログインしようとすると、次のエラーのためログインに失敗します。ORA-28864: SSL接続は正常にクローズしましたこの問題に有効な回避方法はありません。

2.9.2 プラガブル・データベースのウォレット・ルート

WALLET_ROOTにより、プラガブル・データベース(PDB)ごとに1つのサブディレクトリを含む、ディレクトリ・ツリーのルートへのパスを指定します。このディレクトリ構造は、そのPDBに関連付けられた様々なウォレットの格納に使用される、Oracle ASMウォレット・ストレージのディレクトリ構造と似ています。

この例では、ORACLE_BASE環境変数の値を使用してウォレット・ディレクトリ階層のルートを設定します。

WALLET_ROOT=$ORACLE_BASE/admin/orcl/wallet

WALLET_LOCATIONを使用してご希望のウォレット・ロケーションを指定することもできます。WALLET_ROOTパラメータとWALLET_LOCATIONパラメータを両方とも指定した場合は、WALLET_ROOTのほうが優先されます。どちらのパラメータも指定されていない場合は、デフォルトのウォレット・ロケーションが使用されます。

ノート:

このパラメータは、Oracle Databaseリリース18c, バージョン18.1以降で使用可能です。

関連項目:

WALLET_ROOT

2.9.3 ディレクトリ・サービスへの接続

以前は、マルチテナント・データベースでは、コンテナはすべて、単一のディレクトリ・サービスに接続するために使用されていました。プラガブル・データベース(PDB)ごとに異なるディレクトリ・サービスを接続できるようになりました。

2.9.3.1 dsi.oraファイルとldap.oraファイルの比較

エンタープライズ・ユーザー・セキュリティのために、およびOracle Internet Directory (OID)との統合のために、dsi.oraまたはldap.oraのどちらかを使用できます。

エンタープライズ・ユーザー・セキュリティ用にldap.oraを使用する場合は、データベース内のすべてのコンテナ(PDB)に対して1つのOIDサーバーのみを指定できます。ただし、同一ディレクトリ・サービスを使用している場合とそうでない場合がある複数のネット・ネーミング・サービス用にldap.oraを使用することもできます。dsi.oraを使用すると、必要に応じて各PDBを異なるOIDサーバーに統合できます。DBCAを使用してldap.oraを構成できますが、dsi.oraは手動で作成する必要があります。

2.9.3.2 dsi.oraファイルの使用について

dsi.oraファイルを使用してOracle Internet Directory (OID)サーバーを指定します。

OIDサーバーを識別するには、dsi.oraファイルを手動で作成する必要があります。dsi.oraファイルは、ldap.oraファイルを配置できる場所にある場合には、すべてのプラガブル・データベースのディレクトリ接続情報を含んでいます。PDB固有のウォレット・ロケーションにあるdsi.oraファイルは、そのPDBのみのメインのdsi.oraファイルより優先されます。

ノート:

ネーミング・サービス用にldap.oraを使用している場合は、ディレクトリ構成についてldap.oraに変更を加えないでください。OIDの構成にはdsi.oraのみを使用してください。

dsi.oraの配置

$ORACLE_HOMEの下でなく、$ORACLE_BASEの下の書き込み可能なファイルのディレクトリを使用することをお薦めします。Oracle Database18c以降、オプションで$ORACLE_HOMEディレクトリを読取り専用に設定できます。したがって、dsi.oraファイルを$ORACLE_HOME外のディレクトリに置いて、将来のリリースのdsi.ora構成に対応する必要があります。

dsi.oraの検索順序

dsi.oraファイルを作成すると、Oracle Databaseでは次の順序で検索されます。

  1. PDBの場合は、そのPDB固有のウォレット・ロケーションでそれが検索されます。
    1. WALLET_ROOTinit.oraに指定されている場合は、PDB固有のウォレット・ロケーションはWALLET_ROOT/pdb_guid/eus/になります。
    2. WALLET_ROOTinit.oraに指定されておらず、WALLET_LOCATIONsqlnet.oraに指定されている場合は、PDB固有のウォレット・ロケーションはWALLET_LOCATION/pdb_guid/になります。
    3. WALLET_ROOTWALLET_LOCATIONも指定されていない場合は、PDB固有のウォレット・ロケーションはデフォルトの場所であり、次のようになります。
      1. ORACLE_BASE環境変数が設定されている場合は、デフォルトの場所は次のとおりです。
        ORACLE_BASE/admin/db_unique_name/pdb_guid/wallet/
      2. ORACLE_BASEが設定されていない場合は、デフォルトの場所は次のとおりです。
        ORACLE_HOME/admin/db_unique_name/pdb_guid/wallet/
  2. Oracle Databaseがウォレット・ロケーションでdsi.oraを検出できない場合、Oracle Databaseは次の順序で検索します。これらは、Oracle Databaseがldap.oraファイルを検索する場所と同じです。
    1. $LDAP_ADMIN環境変数設定
    2. $ORACLE_HOME/ldap/adminディレクトリ
    3. $TNS_ADMIN環境変数設定
    4. $ORACLE_HOME/network/adminディレクトリ

dsi.oraを使用する場合

PDBごとに異なるOIDサービスに接続する場合は、dsi.oraのみを使用することをお薦めします。dsi.oraldap.oraの両方が同一データベース内で構成されており同一ディレクトリにある場合は、dsi.oraldap.oraファイルよりも優先されます。それらが別々のディレクトリにある場合は、前述の場所優先順位リスト内の上位にあるほうのディレクトリでディレクトリ・サーバーが検索されます。

PDBのデフォルト・ウォレット・ロケーションは、$ORACLE_BASE/admin/db_unique_name/pdb_guid/wallet/ディレクトリです。

db_unique_nameを検索するには、CDBルートに接続して次の問合せを実行します。

SELECT DB_UNIQUE_NAME FROM V$DATABASE;

CDBルートからpdb_guidを検索するには、次の問合せを実行します。

SELECT PDB_NAME,GUID FROM DBA_PDBS;
2.9.3.3 dsi.oraファイルの作成

dsi.ora構成ファイルにより、ディレクトリ・サーバーを見つけるための情報を設定します。

dsi.ora構成ファイルを使用するには:
  1. Oracleデータベースが存在するホストにログインします。
  2. dsi.oraファイルを配置するウォレット・ロケーション・ディレクトリを見つけます。ウォレット・ロケーションの詳細は、dsi.oraの検索順序を参照してください。ウォレット・ロケーションのディレクトリが存在しない場合は、それを作成します。ウォレット・ロケーションのディレクトリに移動してdsi.oraファイルを作成します。
  3. dsi.oraファイルに次のパラメータを追加します。
    • DSI_DIRECTORY_SERVERS。これで、ディレクトリ・サーバーのホストおよびポート番号、および代替ディレクトリ・サーバーを設定します。ディレクトリ・サーバー名は完全修飾名である必要があります。次に例を示します。
      DSI_DIRECTORY_SERVERS =  (ldap-server.examplecorp.com:389:636, raffles.examplecorp.com:389:636)
    • DSI_DEFAULT_ADMIN_CONTEXT。これで、接続識別子の作成、変更または検索に使用するデフォルト・ディレクトリを指定します。次に例を示します。
      DSI_DEFAULT_ADMIN_CONTEXT = "o=OracleSoftware,c=US"
    • DSI_DIRECTORY_SERVER_TYPE。これで、ディレクトリ・サーバー・アクセスを決定します。Oracle Internet Directoryの場合はこれをOIDに設定する必要があります。この値は大文字で入力してください。
      DSI_DIRECTORY_SERVER_TYPE = OID
2.9.3.4 ldap.oraファイルの使用について

ldap.oraファイルを使用してディレクトリ・サーバーを指定できます。

ネット・ネーミング・サービス用など別の目的ですでにldap.oraファイルを使用している場合は、dsi.oraファイルを使用して、ユーザー認証および認可に使用するディレクトリを構成する必要があります。データベースが現在、別のサービスにldap.oraを使用していない場合でも、今後ネット・ネーミング・サービスにldap.oraを使用する場合はdsi.oraを使用することをお薦めします。

ldap.oraがネーミング・サービスに使用されている場合は、ldap.oraを変更しないでください。ディレクトリの構成にはdsi.oraのみを使用してください。

ldap.oraを使用する利点

ldap.oraを使用する利点は、DBCAグラフィカル・インタフェースまたはDBCAサイレント・モードを使用してディレクトリ・サーバーへの接続を構成できるということです。dsi.oraを使用する場合は、ディレクトリへの接続を構成する手順を個別に行う必要があります。

DBCAを使用してldap.oraでPDBを構成した後、そのPDB固有のウォレット・ロケーションに個別のdsi.oraを作成できます。ldap.oraの内容を、対応するdsi.oraに移動し、dsi.ora内の各パラメータにはDSI_接頭辞を追加します。

後でldap.oraを更新して別のOIDサーバーを含めることができます。ldap.oraを更新した後、DBCAを使用して別のPDBを構成し、ldap.oraの内容をそのPDB固有のウォレット・ロケーションにあるdsi.oraに移動します。このプロセスを繰り返して、各PDBが別々のOIDサーバーに接続できるように、すべてのPDBを構成します。

ldap.oraの配置

通常、ldap.oraファイルは$ORACLE_HOME/network/adminディレクトリに格納されます。

ldap.oraの検索順序

ldap.oraファイルを作成すると、Oracle Databaseでは次の順序で検索されます。

  1. $LDAP_ADMIN環境変数設定

  2. $ORACLE_HOME/ldap/adminディレクトリ

  3. $TNS_ADMIN環境変数設定

  4. $ORACLE_HOME/network/adminディレクトリ

ldap.oraの内容の変更

データベースの起動後にldap.oraの内容を変更した場合は、データベース・インスタンスを再起動するか、次のDDLを再実行して、ldap.oraの更新された内容を有効にする必要があります。

ALTER SYSTEM SET LDAP_DIRECTORY_ACCESS = 'PASSWORD';
2.9.3.5 ldap.oraファイルの作成

このステップは、ldap.oraがネット・ネーミング・サービス用に使用されておらずディレクトリとの接続を設定するために使用できるということが前提となっています。

  1. Oracleデータベースが存在するホストにログインします。
  2. ldap.oraファイルの検索順序に基づいて、ldap.oraファイルを使用するディレクトリを選択します。(「関連項目」を参照)。このディレクトリが存在しない場合は、作成します。次に、このディレクトリに移動してldap.oraファイルを作成します。
  3. ldap.oraファイルが存在しない場合、テキスト・エディタを使用して作成します。
    ldap.oraファイルが存在する場合は、このファイルのバックアップを作成してから、ldap.oraを開きます。
  4. ldap.oraファイルに次のパラメータを追加します。
    • DSI_DIRECTORY_SERVERS。これで、ディレクトリ・サーバーのホストおよびポート番号、および代替ディレクトリ・サーバーを設定します。ディレクトリ・サーバー名は完全修飾名である必要があります。次に例を示します。
      DIRECTORY_SERVERS = (ldap-server.examplecorp.com:389:636, raffles.examplecorp.com:389:636)
    • DEFAULT_ADMIN_CONTEXT。これで、接続識別子の作成、変更または検索に使用するデフォルト・ディレクトリを指定します。次に例を示します。
      DEFAULT_ADMIN_CONTEXT = "o=OracleSoftware,c=US"
    • DIRECTORY_SERVER_TYPE、LDAPサーバー・アクセスを決定します。エンタープライズ・ユーザー・セキュリティ用では、これをOIDに設定する必要があります。この値は大文字で入力してください。
      DIRECTORY_SERVER_TYPE = OID

2.9.4 デフォルトのデータベースDNの形式

DBCAを使用してPDBをディレクトリに登録すると、 デフォルトのPDB識別名(DN)が次の形式で生成されます。

cn=PDB_NAME.DB_UNIQUE_NAME,cn=oraclecontext,realm

デフォルトのcn (PDB_NAME.DB_UNIQUE_NAME)は、DBCAの登録画面でカスタム値に変更できます。登録後は変更できません。

2.9.5 PDBの接続および切断

既存の登録済データベースはCDBに接続できます。PDBを再登録する必要はありませんが、次のステップを実行する必要があります。

  • 元の場所からウォレット・ファイルを取得して、PDBの新しいデフォルトのウォレット・ロケーションに配置します。

  • PDBでLDAP_DIRECTORY_ACCESSパラメータを目的の値に設定します。

同様に、ディレクトリに登録済のPDBを切断する場合、データベースを再登録する必要はありません。切断した後に新しいデフォルトの場所にウォレットをコピーする必要があります。デフォルトの場所は次のとおりです。

  • ORACLE_BASE環境変数が設定されている場合:

    ORACLE_BASE/admin/db_unique_name/pdb_guid/wallet 
    
  • ORACLE_BASEが設定されていない場合:

    ORACLE_HOME/admin/db_unique_name/pdb_guid/wallet
    

2.9.6 コンテナの切替え

エンタープライズ・ユーザーは共通ユーザーではないので、ALTER SESSION SET CONTAINER target-CDBコマンドを実行できません。