Sun Java System Directory Server Enterprise Edition 6.3 管理ガイド

複数の異種データソースの結合

この設定は、仮想ディレクトリの機能のいくつかが特定のディレクトリサービス要件を満たしている Example.com という組織で説明します。

データストレージシナリオ

Example.com は複数の異種データソースに組織データを保存しています。過去の経緯により、ユーザーデータは LDAP ディレクトリ、フラット LDIF ファイル、SQL データベースに分散されています。HR 部門は o=example.com のベース DN でユーザーデータを LDAP ディレクトリに保存しています。給与部門はデータを SQL データベースに保存しています。部門やビルの番号などの管理データはdc=example,dc=com のベース DN で管理部門の LDIF ファイルに保存されています。

さらに、Example.com は Company22 という名前の企業を買収しました。Company 22 もユーザーデータを dc=company22,dc=com のベース DN で LDAP ディレクトリに保存しています。

次の図は、Example.com のユーザーデータがどのように保存されているかをまとめたものです。

図 23–2 異種ソースのデータストレージ

図は、Example.com のユーザーデータがどのように異種のデータソースに保存されているかを示しています。

クライアントアプリケーション要件

Example.com には、異種データソースに保存されたデータにアクセスする必要のある LDAP クライアントアプリケーションがいくつかあります。クライアントアプリケーションの要件はすべて同じではありません。異なるデータビューは必要です。場合によっては、クライアントはデータを集約する必要があります。さらに、Example.com の新しい従業員を以前からの従業員とともに管理できるように、一部のクライアントアプリケーションは Company22 のユーザーデータにアクセスする必要があります。

次の図は、Example.com のクライアントアプリケーション要件をまとめたものです。

図 23–3 クライアントアプリケーション要件

図は、Example.com の LDAP アプリケーションの要件を示しています。

次の節では、Directory Proxy Server データビューがこのサンプルシナリオで説明したクライアントアプリケーション要件を十分満たすことができる設定について見ていきます。データビューの機能方法については、『Sun Java System Directory Server Enterprise Edition 6.3 Reference』の第 17 章「Directory Proxy Server Distribution」および『Sun Java System Directory Server Enterprise Edition 6.3 Reference』の第 18 章「Directory Proxy Server Virtualization」を参照してください。

サンプルシナリオの設定は次のセクションで構成されています。

HR LDAP ディレクトリと管理 LDIF ファイルのデータの集約

HR 部門は従業員名、職務開始データ、職務レベルなどの情報を保存しています。管理部門は、建築基準法や会社の電話番号などの追加データを保存しています。HR データを処理するクライアントアプリケーションは、両方のソースからの複合データにアクセスする必要があります。各エントリ内の属性 employeeNumber は両方のデータソースに共通です。

次の図は、クライアントアプリケーションの要件を示しています。

図 23–4 LDAP ディレクトリと LDIF ファイルのデータの集約

図は、LDAP ディレクトリと LDIF ファイルの結合ビューを示しています。

このアプリケーション要件を満たすために、給与ディレクトリと管理 LDIF ファイル用にデータビューが作成されます。これらの 2 つのデータビューは、その後、集約されたデータにアクセスできるよう結合されます。この共通属性によって、Directory Proxy Server は各ユーザーのデータを集約できます。

わかりやすいように、ここで使用するコマンドは次の情報を前提としています。

各コマンドの完全な構文を取得するために、オプションを使用せずにコマンドを実行します。次に例を示します。

$ dpconf create-ldap-data-view
Operands are missing
Usage: dpconf create-ldap-data-view VIEW_NAME POOL_NAME SUFFIX_DN

Procedure給与ディレクトリの LDAP データビューの作成と有効化

  1. 給与ディレクトリの LDAP データソースを作成します。

    $ dpconf create-ldap-data-source payroll-directory payrollHost:2389
  2. 給与ディレクトリの LDAP データソースプールを作成します。

    $ dpconf create-ldap-data-source-pool payroll-pool
  3. 給与データソースをデータソースプールに接続します。

    $ dpconf attach-ldap-data-source payroll-pool payroll-directory
  4. 接続済みデータソースのウェイトを設定します。

    $ dpconf set-attached-ldap-data-source-prop -h payrollHost -p 2389 \
    payroll-pool payroll-directory add-weight:2 \
    bind-weight:2 compare-weight:2 delete-weight:2 \
    modify-dn-weight:2 modify-weight:2 search-weight:2
  5. 給与ディレクトリの LDAP データビューを作成します。

    $ dpconf create-ldap-data-view payroll-view payroll-pool o=example.com
  6. クライアント要求がこのデータビューに経路指定できるように LDAP データビューを有効にします。

    $ dpconf set-ldap-data-view-prop payroll-view is-enabled:true
  7. 変更を有効にするために、Directory Proxy Server を再起動します。

    $ dpadm restart /local/myDPS

Procedure管理データの LDIF データビューの作成と有効化

  1. 管理データの LDIF データビューを作成します。

    $ dpconf create-ldif-data-view admin-view example.ldif dc=example,dc=com
  2. 管理データの LDIF データビューを有効にします。

    $ dpconf set-ldif-data-view-prop admin-view is-enabled:true
  3. 管理ビューに給与ビューの複数のエントリで使用されるエントリが含まれるように指定します。

    $ dpconf set-ldif-data-view-prop admin-view contains-shared-entries:true

    このプロパティーが TRUE に設定されている場合、給与データビューのエントリを削除しても、管理データビューの共有エントリは削除されません。給与データビューにエントリを追加すると、それがすでに存在していなければ、二次データビューのエントリのみが追加されます。

  4. 変更を有効にするために、Directory Proxy Server を再起動します。

    $ dpadm restart /local/myDPS

Procedure給与データビューと管理データビューの結合

  1. データの集約方法を指定するフィルタ結合ルールを管理データビューで作成します。

    次の結合ルールは、ユーザーエントリの employeeNumber 属性に基づいてデータが結合されるよう指定します。

    $ dpconf set-ldif-data-view-prop admin-view \
    filter-join-rule:employeeNumber=\${payroll-view.employeeNumber}
  2. 2 つのデータビューを集約する結合データビューを作成します。

    結合データビューに対して、組織はサフィックス DN dc=example,dc=com を使用します。

    $ dpconf create-join-data-view example-join-view payroll-view admin-view \
    dc=example,dc=com

DN の名前を変更して Company 22 からのデータを Example.Com の DIT に追加

Company 22 のユーザーデータは、DN dc=company22,dc=com で保存されています。Example.com はこのユーザーデータをほとんどの場合に区別しておきたいと考えていますが、あるクライアントアプリケーションは Company 22 の従業員を Example.com の残りの従業員とともに管理する必要があります。このクライアントアプリケーションは Company 22 のユーザーデータが Example.com のデータのように見えることを必要としています。

次の図は、クライアントアプリケーションの要件を示しています。

図 23–5 DN の名前の変更

図は、データを DIT に追加するための DN の名前の変更を示しています。

このアプリケーション要件を満たすために、仮想 DN の dc=example,dc=com のデータビューが Company 22 ディレクトリに対して作成されます。

わかりやすいように、ここで使用するコマンドは次の情報を前提としています。

Procedure仮想 DN を持つ Company 22 のディレクトリに対するデータビューの作成

  1. Company 22 のディレクトリの LDAP データソースを作成します。

    $ dpconf create-ldap-data-source company22-directory company22Host:2389
  2. Company 22 のディレクトリの LDAP データソースプールを作成します。

    $ dpconf create-ldap-data-source-pool company22-pool
  3. Company 22 のデータソースをデータソースプールに接続します。

    $ dpconf attach-ldap-data-source company22-pool company22-directory
  4. 接続済みデータソースのウェイトを設定します。

    $ dpconf set-attached-ldap-data-source-prop -h company22Host -p 2389 \
    company22-pool company22-directory add-weight:2 \
    bind-weight:2 compare-weight:2 delete-weight:2 \
    modify-dn-weight:2 modify-weight:2 search-weight:2
  5. 仮想 DN の dc=example,dc=com で Company 22 のディレクトリの LDAP データビューを作成します。

    $ dpconf create-ldap-data-view company22-view company22-pool dc=example,dc=com
  6. この仮想 DN を Company 22 のディレクトリの実際の DN にマップするよう Directory Proxy Server に命令します。

    $ dpconf set-ldap-data-view-prop company22-view \
    dn-mapping-source-base-dn:dc=company22,dc=com
  7. クライアント要求がこのデータビューに経路指定できるように、Company 22 のディレクトリの LDAP データビューを有効にします。

    $ dpconf set-ldap-data-view-prop company22-view is-enabled:true
  8. 変更を有効にするために、Directory Proxy Server を再起動します。

    $ dpadm restart /local/myDPS

Company 22 のデータの HR データへの追加

HR 部門は Example.com と新しく買収した Company 22 の HR データの集約されたビューを必要としています。次の図は、グローバル HR アプリケーションの要件を示しています。

図 23–6 結合データビューと LDAP データビューからのデータの集結

図は、LDAP ディレクトリとほかの結合ビューの複合的な結合ビューを示しています。

Procedure結合データビューの例と Company 22 データビューの結合

  1. データの集約方法を指定するフィルタ結合ルールを Company 22 データビューで作成します。

    次の結合ルールは、ユーザーエントリの employeeNumber 属性に基づいてデータが結合されるよう指定します。

    $ dpconf set-ldif-data-view-prop company22-view \
    filter-join-rule:employeeNumber=\${example-join-view.employeeNumber}
  2. Company 22 のデータビューと Example.com の結合データビューを集約する結合データビューを作成します。

    $ dpconf create-join-data-view global-join-view example-join-view \
    company22-view dc=example,dc=com

LDAP クライアントによる SQL データベース内の給与データへのアクセスの有効化

Example.com の給与部門は給与データを SQL データベースに保存しています。データベースには、employee テーブルと salary テーブルの 2 つのテーブルがあります。Example.com には、このデータへのアクセスを必要とする LDAP クライアントアプリケーションがあります。クライアントアプリケーションは SQL データが LDAP データのように見えることを必要としています。

次の図は、クライアントアプリケーションの要件を示しています。

図 23–7 SQL データベースへのアクセスを提供する JDBC データビュー

図は、SQL データベースへのアクセスを提供する JDBC データビューを示しています。

このアプリケーション要件を満たすために、SQL テーブル内の列を LDAP 属性にマップする JDBC データビューが作成されます。

わかりやすいように、ここで使用するコマンドは次の情報を前提としています。

ProcedureExample.com の給与データベースに対する JDBC データビューの作成

  1. 給与データベース用の JDBC データソースを作成します。

    $ dpconf create-jdbc-data-source -b payrollsqldb \
      -B jdbc:payrollsqldb:payrollsql://localhost/ \
      -J file://payrollsqldb.jar \
      -S org.payrollsqldb.jdbcDriver payroll-src 
  2. SQL データベースのプロパティーで JDBC データソースを設定します。

    $ dpconf set-jdbc-data-source-prop payroll-src \
      db-user:proxy db-pwd-file:password-file-location/myPasswordFile
  3. JDBC データソースを有効にします。

    $ dpconf set-jdbc-data-source-prop payroll-src is-enabled:true
  4. 給与データベース用の JDBC データソースプールを作成します。

    $ dpconf create-jdbc-data-source-pool payroll-pool
  5. 給与データソースをデータソースプールに接続します。

    $ dpconf attach-jdbc-data-source payroll-pool payroll-src
  6. 仮想 DN の o=payroll で給与データベースの JDBC データビューを作成します。

    $ dpconf create-jdbc-data-view payroll-view payroll-pool o=payroll
  7. SQL データベースの各テーブルの JDBC テーブルを作成します。

    $ dpconf create-jdbc-table jdbc-employee employee
    $ dpconf create-jdbc-table jdbc-salary salary
  8. 各 SQL テーブルの各列の JDBC 属性を作成します。

    $ dpconf add-jdbc-attr jdbc-employee eid employee_id
    $ dpconf add-jdbc-attr jdbc-employee first firstname
    $ dpconf add-jdbc-attr jdbc-employee last lastname
    $ dpconf add-jdbc-attr jdbc-employee description description
    $ dpconf add-jdbc-attr jdbc-employee spouse spousename
    $ dpconf add-jdbc-attr jdbc-salary salary salary
    $ dpconf add-jdbc-attr jdbc-salary social ssn
  9. JDBC データビューで表示できる属性と書き込める属性を指定します。

    $ dpconf set-jdbc-data-view-prop payroll-view \
     viewable-attr:eid \
     viewable-attr:first \
     viewable-attr:last \
     viewable-attr:desc \
     viewable-attr:spouse \
     viewable-attr:salary \
     viewable-attr:social 
     $ dpconf set-jdbc-data-view-prop payroll-view \
     writable-attr:eid \
     writable-attr:first \
     writable-attr:last \
     writable-attr:description \
     writable-attr:spouse \
     writable-attr:salary \
    writable-attr:social
  10. LDAP オブジェクトクラスにマップされる JDBC オブジェクトクラスを作成します。

    次のコマンドは、LDAP person オブジェクトクラスにマップされるオブジェクトクラスを作成します。オブジェクトクラスは、従業員テーブルは一次テーブルとして使用され、給与テーブルが二次テーブルとして使用されるよう指定します。eid 属性は、DN を構築するために使用されます。

    $ dpconf create-jdbc-object-class payroll-view \
     person jdbc-employee jdbc-salary eid
  11. 二次テーブルからのデータが一次テーブルからのデータにリンクされる方法を指定したフィルタ結合ルールを二次テーブル上で作成します。

    次の結合ルールは、employee_id 属性に基づいてデータが結合されるよう指定します。

    $ dpconf set-jdbc-table-prop jdbc-salary \
    filter-join-rule:employee_id=\${employee.employee_id}
  12. JDBC オブジェクトクラス上のスーパークラスを作成します。

    $ dpconf set-jdbc-object-class-prop payroll-view person super-class:extensibleObject

仮想アクセス制御の追加

LDAP ディレクトリ上のアクセス制御は、ディレクトリ自体で ACI を定義することで処理されます。仮想データビューによってデータソースにアクセスされる場合、これらのデータビューで表示されるデータのみに適用される ACI を定義する必要があります。

Directory Proxy Server を経由するアクセスはすべて、接続ハンドラによって制御されます。接続ハンドラについては、第 26 章「クライアントと Directory Proxy Server の接続」を参照してください。

Procedure匿名アクセスを許可する ACI の追加

  1. ACI を追加します。

    $ ldapadd -v -D "cn=proxy manager" -w password -p 389
    dn: cn=ldifonly-acis,cn=virtual access controls
    objectclass: top
    objectclass: aciSource
    cn: ldifonly-acis
    dpsaci: (targetattr="*")(version 3.0; acl "anonymous_access"; allow(all) \
    (userdn="ldap:///anyone");)
  2. 接続ハンドラで仮想 ACI をポイントします。

    $ dpconf set-connection-handler-prop anonymous aci-source:ldifonly-acis
  3. 接続ハンドラを有効にします。

    $ dpconf set-connection-handler-prop anonymous is-enabled:true