2 エンタープライズ・ユーザー・セキュリティの準備
エンタープライズ・ユーザー・セキュリティを使用すると、エンタープライズ全体でデータベース・ユーザーを一元的に管理できます。エンタープライズ・ユーザーは、Oracle Internet Directoryに作成され、ディレクトリに登録された様々なエンタープライズ・データベースに対するロールや権限を割り当てることができます。
2.1 ディレクトリを使用するためのデータベースの構成
エンタープライズ・ユーザー・セキュリティの構成の第1ステップは、ディレクトリを使用するようにデータベースを構成することです。Net Configuration Assistant (NetCA)ツールを実行すると、データベースで使用する必要があるディレクトリのホスト名およびポートを構成できます。
ディレクトリを使用するようにデータベースを構成するには:
2.2 ディレクトリへのデータベースの登録
次のステップは、データベースをディレクトリ・サービスに登録することです。Database Configuration Assistant (DBCA)ツールを使用すると、データベースをOracle Internet Directoryに登録できます。
データベースをディレクトリに登録するには:
注意:
データベースをディレクトリに登録した後に、データベース・ウォレットの自動ログインが有効になっていることを確認します。デフォルトのウォレットは、$ORACLE_BASE
/admin/
database_sid
/wallet
ディレクトリに作成されます。
ウォレット・ディレクトリにcwallet.sso
ファイルが存在することをチェックすることで、ウォレットに対する自動ログインが有効であることを確認できます。このファイルが存在しない場合は、Oracle Wallet Managerを使用してウォレットを開き、ウォレットに対する自動ログインを有効にするオプションを使用して、自動ログインを有効にできます。
2.3 ディレクトリへのOracle RACデータベースの登録
Oracle RAC環境でOracle Internet Directory (OID)を構成するには、特定の追加のステップが必要です。
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 共有スキーマへのエンタープライズ・ユーザーのマッピング
ユーザー・スキーマ・マッピングを作成するには、次のようにします。
-
Enterprise Manager Cloud Controlに管理ユーザーとしてログインします。
-
使用するデータベースに移動するには、「ターゲット」メニューから「データベース」を選択します。
-
表示されたリストで、データベース名をクリックします。データベースのページが表示されます。
-
「管理」メニューで、「セキュリティ」→「エンタープライズ・ユーザー・セキュリティ」を選択します。「Oracle Internet Directoryログイン」ページが表示されます。
-
「ユーザー」フィールドに、エンタープライズ・ユーザーを管理できるディレクトリ・ユーザーの識別名(DN)を入力します。「パスワード」フィールドに、ユーザー・パスワードを入力します。「ログイン」をクリックします。
関連項目:
ディレクトリへのデータベースの登録、特に以前にユーザーDNおよびパスワードを入力し、ディレクトリ・サービスを使用してデータベースを登録したステップ6
「エンタープライズ・ユーザー・セキュリティ」ページが表示されます。
-
「エンタープライズ・ドメインの管理」をクリックします。
「エンタープライズ・ドメインの管理」ページが表示されます。
-
データベースを含むエンタープライズ・ドメインを選択します。構成をクリックします。
「ドメインの構成」ページが表示されます。
-
「ユーザー・スキーマ・マッピング」タブをクリックします。エンタープライズ・ドメインに適用されているユーザー・スキーマ・マップがすべて表示されます。
-
「作成」をクリックします。
「マッピングの作成」ページが表示されます。
-
「自」セクションで、「サブツリー」を選択します。検索アイコンをクリックします。DNのcn=Users, dc=us,dc=oracle,dc=comを選択します。
-
「至」セクションで、「スキーマ」フィールドにglobal_ident_schema_userと入力します。「続行」をクリックします。
「ドメインの構成」ページにユーザー・スキーマ・マッピングが追加されます。
-
「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を作成する手順:
-
Oracle Internet Directoryセルフ・サービス・コンソールに接続します。次のURLを使用します。
http://
hostname
:port
/oiddas/
hostname
は、Oracle Internet Directoryサーバーが稼働しているホストの名前です。port
番号は、Oracle Internet Directoryセルフ・サービス・コンソールが稼働しているTCPポート番号です。デフォルトは7777です。 -
「ディレクトリ」タブをクリックします。
「サインイン」ページが表示されます。
-
Oracle Internet Directoryにユーザーを作成できるユーザーとしてログインします。
「ユーザー」ページが表示されます。
-
「作成」をクリックします。
「ユーザーの作成」ページが表示されます。
-
「ユーザー名」にjoeと入力します。その他の必須フィールドに値を入力します。「有効」で「有効」を選択します。
-
発行をクリックします。
-
「別のユーザーの作成」をクリックします。
「ユーザーの作成」ページが表示されます。
-
「ユーザー名」にNinaと入力します。その他の必須フィールドに値を入力します。「有効」で「有効」を選択します。
-
発行をクリックします。「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を作成する手順:
-
Enterprise Manager Cloud Controlに管理ユーザーとしてログインします。
-
使用するデータベースに移動するには、「ターゲット」メニューから「データベース」を選択します。
-
表示されたリストで、データベース名をクリックします。データベースのページが表示されます。
-
「管理」メニューで、「セキュリティ」→「エンタープライズ・ユーザー・セキュリティ」を選択します。「Oracle Internet Directoryログイン」ページが表示されます。
-
「ユーザー」フィールドに、エンタープライズ・ユーザーを管理できるディレクトリ・ユーザーの識別名(DN)を入力します。「パスワード」フィールドに、ユーザー・パスワードを入力します。「ログイン」をクリックします。
「エンタープライズ・ユーザー・セキュリティ」ページが表示されます。
-
「エンタープライズ・ドメインの管理」をクリックします。
「エンタープライズ・ドメインの管理」ページが表示されます。このページには、アイデンティティ管理レルム内のエンタープライズ・ドメインが一覧表示されます。
-
データベースを含むエンタープライズ・ドメインを選択します。構成をクリックします。
「ドメインの構成」ページが表示されます。
-
「エンタープライズ・ロール」タブをクリックします。
-
「作成」をクリックします。
「エンタープライズ・ロールの作成」ページが表示されます。
-
「名前」フィールドにhr_accessと入力します。
-
「追加」をクリックし、データベース・グローバル・ロールをエンタープライズ・ロールに追加します。
「検索と選択: データベース・グローバル・ロール」ウィンドウが表示されます。
-
データベースの
hr_access
グローバル・ロールを選択します。「選択」をクリックします。注意:
グローバル・ロールを選択するには、データベースにログインする必要があります。
-
「権限受領者」タブをクリックします。「追加」をクリックします。
「選択: ユーザーまたはグループ」ウィンドウが表示されます。
-
ユーザーNinaを選択します。「選択」をクリックします。
-
「エンタープライズ・ロールの作成」ページで「続行」をクリックします。
-
「ドメインの構成」ページで「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
に対してプロキシ権限を構成する手順:
-
Enterprise Manager Cloud Controlに管理ユーザーとしてログインします。
-
使用するデータベースに移動するには、「ターゲット」メニューから「データベース」を選択します。
-
表示されたリストで、データベース名をクリックします。データベースのページが表示されます。
-
「管理」メニューで、「セキュリティ」→「エンタープライズ・ユーザー・セキュリティ」を選択します。「Oracle Internet Directoryログイン」ページが表示されます。
-
「ユーザー」フィールドに、エンタープライズ・ユーザーを管理できるディレクトリ・ユーザーの識別名(DN)を入力します。「パスワード」フィールドに、ユーザー・パスワードを入力します。「ログイン」をクリックします。
「エンタープライズ・ユーザー・セキュリティ」ページが表示されます。
-
「エンタープライズ・ドメインの管理」をクリックします。
「エンタープライズ・ドメインの管理」ページが表示されます。このページには、アイデンティティ管理レルム内のエンタープライズ・ドメインが一覧表示されます。
-
構成するエンタープライズ・ドメインを選択します。構成をクリックします。
「ドメインの構成」ページが表示されます。
-
「プロキシ権限」タブをクリックします。
-
「作成」をクリックして新しいプロキシ権限を作成します。
「プロキシ権限の作成」ページが表示されます。
-
「名前」フィールドに、プロキシ権限の名前としてSH_Proxyと入力します。
-
「ターゲットDBユーザー」タブが選択されていることを確認します。「追加」をクリックします。
「検索と選択」ウィンドウが表示されます。
-
SH
ユーザーを含むデータベースにログインします。エンタープライズ・ユーザー・プロキシを許可するように変更されているすべてのデータベース・ユーザーのリストが表示されます。 -
SHユーザーを選択します。「選択」をクリックします。
「プロキシ権限の作成」ページの「ターゲットDBユーザー」に
SH
ユーザーが追加されます。 -
「権限受領者」タブをクリックします。
-
「追加」をクリックします。
「選択: ユーザーまたはグループ」ウィンドウが表示されます。
-
「検索ベース」で「
cn=users,dc=us,dc=oracle,dc=com
」を選択します。「表示」で「ユーザー」
を選択します。実行をクリックします。サブツリー
cn=users,dc=us,dc=oracle,dc=com
の下のユーザーのリストが表示されます。 -
cn=joe,cn=users,dc=us,dc=oracle,dc=com
を選択します。「選択」をクリックします。「プロキシ権限の作成」ページの「権限受領者」にユーザー
joe
が追加されます。 -
「プロキシ権限の作成」ページで「続行」をクリックします。
「ドメインの構成」ページにプロキシ権限
SH_Proxy
が追加されます。 -
「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_ROOT2.9.3 デフォルトのデータベースDNの形式
DBCAを使用してPDBをディレクトリに登録すると、 デフォルトのPDB識別名(DN)が次の形式で生成されます。
cn=PDB_NAME.DB_UNIQUE_NAME,cn=oraclecontext,realm
デフォルトのcn
(PDB_NAME.DB_UNIQUE_NAME)は、DBCAの登録画面でカスタム値に変更できます。登録後は変更できません。
2.9.4 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