エンタープライズ・ユーザー・セキュリティを使用すると、エンタープライズ全体でデータベース・ユーザーを一元的に管理できます。エンタープライズ・ユーザーは、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.