エンタープライズ・ユーザー・セキュリティを使用すると、エンタープライズ全体でデータベース・ユーザーを一元的に管理できます。エンタープライズ・ユーザーは、Oracle Internet Directoryに作成され、ディレクトリに登録された様々なエンタープライズ・データベースに対するロールや権限を割り当てることができます。
この章では、エンタープライズ・ユーザー・セキュリティを簡単に使用できるようにチュートリアル方式を採用します。次の各手順では、エンタープライズ・ユーザー・セキュリティの構成について説明します。
エンタープライズ・ユーザー・セキュリティの構成の第1ステップは、ディレクトリを使用するようにデータベースを構成することです。Net Configuration Assistant(NetCA)ツールを実行すると、データベースで使用する必要があるディレクトリのホスト名およびポートを構成できます。
ディレクトリを使用するようにデータベースを構成する手順:
netcaコマンドを使用してNetCAを起動します。
Windowsでは、「スタート」メニューからNetCAを起動することもできます。
「スタート」→「すべてのプログラム」→「Oracle - OracleHomeName」→「Configuration and Migration Tools」→「Net Configuration Assistant」の順にクリックします。
UNIXシステムでは、次のコマンドを使用してNetCAを起動できます。
$ORACLE_HOME/bin/netca
「ようこそ」画面が表示されます。

「ディレクトリ使用構成」を選択します。「次へ」をクリックします。
「ディレクトリ使用構成-ディレクトリ・タイプ」画面が表示されます。

「次へ」をクリックします。
「ディレクトリ使用構成-ディレクトリの場所」画面が表示されます。

Oracle Internet Directoryサーバーが稼働しているホストの名前を入力します。また、LDAPの非SSLポート番号およびSSLポート番号も入力します。これらのポート番号のデフォルトは389および636です。「次へ」をクリックします。
「ディレクトリ使用構成-Oracleコンテキストの選択」画面が表示されます。

使用するデフォルトのOracleコンテキストを選択します。ディレクトリ・サーバーに複数のアイデンティティ管理レルムがある場合は、これを選択する必要があります。「次へ」をクリックします。
「ディレクトリ使用構成-完了」画面が表示されます。
ディレクトリ使用構成が正常に完了したことを確認します。「次へ」をクリックします。
「終了」をクリックします。
ldap.oraファイルが$ORACLE_HOME/network/adminディレクトリに作成されます。Windowsでは、このディレクトリは$ORACLE_HOME\network\adminディレクトリです。ldap.oraファイルには、ディレクトリに関する接続情報の詳細が格納されます。
次のステップは、データベースをディレクトリ・サービスに登録することです。Database Configuration Assistant(DBCA)ツールを使用すると、データベースをOracle Internet Directoryに登録できます。
データベースをディレクトリに登録する手順:
dbcaコマンドを使用してDBCAを起動します。
Windowsでは、「スタート」メニューからDBCAを起動することもできます。
「スタート」→「すべてのプログラム」→「Oracle - OracleHomeName」→「Configuration and Migration Tools」→「Database Configuration Assistant」の順にクリックします。
UNIXシステムでは、次のコマンドを使用してDBCAを起動できます。
$ORACLE_HOME/bin/dbca
「ようこそ」画面が表示されます。
「次へ」をクリックします。
「操作」画面が表示されます。

「データベース・オプションの構成」を選択します。「次へ」をクリックします。
「データベース」画面が表示されます。
構成するデータベース名を選択します。オペレーティング・システムの認証を使用していない場合は、SYSユーザー資格証明の入力を求められることもあります。「次へ」をクリックします。
「管理オプション」画面が表示されます。
Database Controlを使用してデータベースの管理を続行する場合は、「Database Controlで構成済のデータベースを維持」を選択します。また、Grid Controlを使用したデータベースの管理を選択することもできます。「次へ」をクリックします。
「セキュリティ設定」画面が表示されます。
11gのセキュリティ設定を維持する場合は、「11gのデフォルトの高度セキュリティ設定を維持」を選択します。「次へ」をクリックします。
「ネットワーク構成」画面が表示されます。

「データベースを登録する」を選択してデータベースをディレクトリに登録します。Oracle Internet Directoryへのデータベースの登録を許可されたユーザーの識別名(DN)を入力します。また、ディレクトリ・ユーザーのパスワードも入力します。ウォレット・パスワードを入力します。「パスワードの確認」フィールドに、同じパスワードを再入力します。「次へ」をクリックします。
|
注意: データベースでは、ランダムに生成されたパスワードを使用してディレクトリにログインします。このデータベース・パスワードは、Oracleウォレットに格納されます。また、このウォレットを使用して、SSL接続に必要な証明書を格納することもできます。指定するウォレット・パスワードは、データベース・パスワードとは異なります。ウォレット・パスワードは、ウォレットの保護に使用します。 |
「データベース・コンポーネント」画面が表示されます。
「次へ」をクリックします。
「接続モード」ページが表示されます。
「専用サーバー・モード」または「共有サーバー・モード」を選択します。「終了」をクリックします。
「確認」ダイアログ・ボックスが表示されます。
「OK」をクリックします。
|
注意: データベースをディレクトリに登録した後に、データベース・ウォレットの自動ログインが有効になっていることを確認します。デフォルトのウォレットは、$ORACLE_BASE/admin/database_sid/walletディレクトリに作成されます。
ウォレット・ディレクトリに |
データベースに共有スキーマを作成すると、複数のエンタープライズ・ユーザーを同じスキーマにマップできます。例2-1では、共有スキーマglobal_ident_schema_userを作成し、CONNECTロールを付与します。
エンタープライズ・ユーザー・セキュリティは、Enterprise Managerを使用して管理できます。例2-2では、DN cn=users, dc=us, dc=oracle, dc=comを共有データベース・スキーマglobal_ident_schema_userにマップします。
例2-2 共有スキーマへのエンタープライズ・ユーザーのマッピング
ユーザー・スキーマ・マッピングを作成するには、次のようにします。
Enterprise Managerにログインします。

「サーバー」タブをクリックします。「セキュリティ」セクションで「エンタープライズ・ユーザー・セキュリティ」をクリックします。
「Oracle Internet Directoryログイン」ページが表示されます。

「ユーザー」フィールドに、エンタープライズ・ユーザーを管理できるディレクトリ・ユーザーの識別名(DN)を入力します。「パスワード」フィールドに、ユーザー・パスワードを入力します。「ログイン」をクリックします。
「エンタープライズ・ユーザー・セキュリティ」ページが表示されます。

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

データベースを含むエンタープライズ・ドメインを選択します。「構成」をクリックします。
「ドメインの構成」ページが表示されます。
「ユーザー・スキーマ・マッピング」タブをクリックします。エンタープライズ・ドメインに適用されているユーザー・スキーマ・マップがすべて表示されます。
「作成」をクリックします。
「マッピングの作成」ページが表示されます。

「自」セクションで、「サブツリー」を選択します。「検索」アイコンをクリックします。DNのcn=Users, dc=us,dc=oracle,dc=comを選択します。
「至」セクションで、「スキーマ」フィールドにglobal_ident_schema_userと入力します。「続行」をクリックします。
「ドメインの構成」ページにユーザー・スキーマ・マッピングが追加されます。

「OK」をクリックします。
この時点で、マップされたOracle Internet Directoryサブツリー内のすべてのユーザーは、エンタープライズ・ユーザーとしてデータベースに接続できます。例2-3に、データベースに接続するcn=orcladmin, cn=users, dc=us,dc=oracle,dc=comユーザーを示します。
エンタープライズ・ロールはディレクトリに作成されます。エンタープライズ・ロールには、エンタープライズ・ドメインに属する様々なデータベースのグローバル・ロールが格納されます。エンタープライズ・ロールは、エンタープライズ・ユーザーにデータベース権限を割り当てるために使用します。
例2-4では、2人のエンタープライズ・ユーザーのJoeとNinaを作成します。この2人のユーザーはいずれもサブツリーcn=Users, dc=us,dc=oracle,dc=comに作成されます。このサブツリーはすでにEUSDBデータベースのglobal_ident_schema_userにマップされています。
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にログインします。
「サーバー」タブをクリックします。「セキュリティ」セクションで「エンタープライズ・ユーザー・セキュリティ」をクリックします。
「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-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にログインします。
「サーバー」タブをクリックします。「セキュリティ」セクションで「エンタープライズ・ユーザー・セキュリティ」をクリックします。
「Oracle Internet Directoryログイン」ページが表示されます。
「ユーザー」フィールドに、エンタープライズ・ユーザーを管理できるディレクトリ・ユーザーの識別名(DN)を入力します。「パスワード」フィールドに、ユーザー・パスワードを入力します。「ログイン」をクリックします。
「エンタープライズ・ユーザー・セキュリティ」ページが表示されます。
「エンタープライズ・ドメインの管理」をクリックします。
「エンタープライズ・ドメインの管理」ページが表示されます。このページには、アイデンティティ管理レルム内のエンタープライズ・ドメインが一覧表示されます。
構成するエンタープライズ・ドメインを選択します。「構成」をクリックします。
「ドメインの構成」ページが表示されます。
「プロキシ権限」タブをクリックします。

「作成」をクリックして新しいプロキシ権限を作成します。
「プロキシ権限の作成」ページが表示されます。
「名前」フィールドに、プロキシ権限の名前としてSH_Proxyと入力します。

「ターゲットDBユーザー」タブが選択されていることを確認します。「追加」をクリックします。
「検索と選択」ウィンドウが表示されます。
SHユーザーを含むデータベースにログインします。エンタープライズ・ユーザー・プロキシを許可するように変更されているすべてのデータベース・ユーザーのリストが表示されます。
SHユーザーを選択します。「選択」をクリックします。
「プロキシ権限の作成」ページの「ターゲットDBユーザー」にSHユーザーが追加されます。

「権限受領者」タブをクリックします。
「追加」をクリックします。
「選択: ユーザーまたはグループ」ウィンドウが表示されます。
「検索ベース」で「cn=users,dc=us,dc=oracle,dc=com」を選択します。「表示」で「USER」を選択します。「実行」をクリックします。
サブツリー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.