プライマリ・コンテンツに移動
Oracle® Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド
12cリリース1 (12.1)
B72970-03
目次へ移動
目次
索引へ移動
索引

前
次

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

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

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

エンタープライズ・ユーザー・セキュリティの構成の第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ファイルには、ディレクトリに関する接続情報の詳細が格納されます。

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

次のステップは、データベースをディレクトリ・サービスに登録することです。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-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.

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

エンタープライズ・ユーザー・セキュリティは、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)を入力します。「パスワード」フィールドに、ユーザー・パスワードを入力します。「ログイン」をクリックします。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

SQL> CONNECT orcladmin
Enter password:
Connected.

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

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

例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-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.

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

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

  • デフォルトのウォレット・ロケーションを使用する必要があります。これは、データベースとディレクトリ間の接続がSSLベースまたはパスワード・ベースのどちらの場合も該当します。wallet_locationパラメータがsqlnet.oraファイルに存在する場合、エンタープライズ・ユーザーのログインは失敗します。

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

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

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

注意:

LDAP_DIRECTORY_ACCESSパラメータはすべてのPDBで同一です。PDBのサブセットのみがディレクトリに登録されている場合でも、各PDBは、PDBが登録されているものとしてLDAP_DIRECTORY_ACCESS値を処理します。

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

プラガブル・データベースでは、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接続は正常にクローズしましたこの問題に有効な回避方法はありません。

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

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

cn=PDB_NAME.DB_UNIQUE_NAME,cn=oraclecontext,realm

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

PDBの接続および切断

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

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

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

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

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

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

    ORACLE_HOME/admin/db_unique_name/wallet
    

コンテナの切替え

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