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

LDAP ディレクトリと MySQL データベースの結合

ここでの手順は、LDAP ディレクトリと MySQL データベースを結合する仮想設定の例について説明しています。LDAP ディレクトリは、一次データソースとして、ユーザー情報のほとんどが含まれています。mySQL データベースには、ユーザーについての追加情報が含まれています。結果として得られる設定を次の図に示します。

図 23–1 仮想設定の例

図は、LDAP データビューおよび JDBC データビューから成る結合データビューを示しています。

install-path /ds6/ldif/Example.ldif のサンプルデータを使用して、この例を複製したり、サンプルデータを独自のデータに置き換えられます。

この設定は、3 つの部分に分割できます。

わかりやすいように、ここでのコマンドはすべて Directory Proxy Server が /local/dps のローカルホストで実行されていることを前提としています。コマンドは、次の環境変数が設定されていることも前提としています。

DIR_PROXY_PORT

1389

LDAP_ADMIN_PWF

pwd.txt、管理者パスワードを含むファイル

DIRSERV_PORT

4389

LDAP_ADMIN_USER

cn=Directory Manager

LDAP データビューの設定とテスト

ProcedureLDAP データビューを設定する

始める前に

ここでの作業は次の情報を前提としています。

  1. Directory Server インスタンスに対して、myds1 という名前の LDAP データソースを作成します。


    % dpconf create-ldap-data-source myds1 host1:4389
  2. データソースを有効にして、データソースへの書き込み操作を許可します。


    % dpconf set-ldap-data-source-prop myds1 is-enabled:true is-read-only:false
  3. myds1-pool という名前の LDAP データソースプールを作成します。


    % dpconf create-ldap-data-source-pool myds1-pool
  4. LDAP データソースを LDAP データソースプールに接続します。


    % dpconf attach-ldap-data-source myds1-pool myds1
  5. データソースがそのデータソースプールからのバインド、追加、検索、および変更操作の 100% を受け取るように指定します。


    % dpconf set-attached-ldap-data-source-prop myds1-pool myds1 add-weight:100 \
     bind-weight:100 modify-weight:100 search-weight:100
  6. ベース DN が dc=example,dc=commyds1–view という名前のデータソースプールの LDAP データビューを作成します。


    % dpconf create-ldap-data-view myds1-view myds1-pool dc=example,dc=com

ProcedureLDAP データビューをテストする

  1. dc=example,dc=com のユーザーとして、LDAP データソース内のエントリをすべて検索して、データビューから読み取りができることを確認します。


    % ldapsearch -p 1389 -D "uid=kvaughan,ou=people,dc=example,dc=com" -w bribery \
     -b dc=example,dc=com "objectclass=*"

    注 –

    dc=example,dc=com のユーザーの資格を使用します。cn=Directory Manager を使用する場合は、この DN を処理するようにデータビューを定義する必要があります。


  2. dc=example,dc=com のユーザーとして、userPassword 属性を変更して、データビューに書き込みができることを確認します。


    % ldapmodify -p 1389 -D "uid=kvaughan,ou=people,dc=example,dc=com" -w bribery
    dn: uid=kvaughan,ou=people,dc=example,dc=com
    changetype: modify
    replace: userPassword
    userPassword: myNewPassword

    注 –

    Directory Server 内のデフォルト ACI はユーザーが自分自身のパスワードを変更することを許可しています。


JDBC データビューの設定とテスト

次の作業は、mySQL データベースがインストールされて実行中であり、データベースにデータが存在し、mySQL データベースが次のように設定されていることが前提となっています。

次の表は、データベース内のテーブルと複合フィールドを説明しています。JDBC データビューを設定するためにこの情報が必要です。

mySQL テーブル 

フィールド 

EMPLOYEE

IDSURNAMEPASSWORD ROOMCOUNTRY_ID

COUNTRY

IDNAME

PHONE

USER_IDNUMBER

ProcedureJDBC データビューを設定する

  1. SQL データベース用の mysql1 という名前の JDBC データソースを作成します。


    % dpconf create-jdbc-data-source -b sample_sql \
     -B jdbc:mysql://host2.example.com:3306/ \
     -J file:/net/host2.example/local/mysql/lib/jdbc.jar \
     -S com.mysql.jdbc.Driver mysql1
  2. SQL データベースのユーザー名とパスワードファイルを指定します。


    % dpconf set-jdbc-data-source-prop mysql1 db-pwd-file:sqlpwd.txt db-user:root
  3. プロキシサーバーを再起動します。


    % dpadm restart /local/dps
  4. データソースを有効にして、データソースへの書き込み操作を許可します。


    % dpconf set-jdbc-data-source-prop mysql1 is-enabled:true is-read-only:false
  5. mysql1–pool という名前の JDBC データソースプールを作成します。


    % dpconf create-jdbc-data-source-pool mysql1-pool
  6. JDBC データソースをデータソースプールに接続します。


    % dpconf attach-jdbc-data-source mysql1-pool mysql1
  7. ベース DN が o=sqlmyjdbc1–view という名前のデータソースプールの JDBC データビューを作成します。


    % dpconf create-jdbc-data-view mysql1-view mysql1-pool o=sql
  8. MySQL データベースの各テーブルの JDBC テーブルを作成します。


    % dpconf create-jdbc-table employee1 EMPLOYEE
    % dpconf create-jdbc-table country1 COUNTRY
    % dpconf create-jdbc-table phone1 PHONE

    SQL データベースのテーブル名は大文字と小文字を区別します。SQL データベースの場合と同じ文字 (大文字または小文字) を使用していることを確認してください。

  9. 各テーブルの各列の JDBC 属性を作成します。

    JDBC 属性を作成すると、MySQL 列が LDAP 属性にマップされます。


    % dpconf add-jdbc-attr employee1 uid ID
    % dpconf add-jdbc-attr employee1 sn SURNAME
    % dpconf add-jdbc-attr employee1 userPassword PASSWORD
    % dpconf add-jdbc-attr employee1 roomNumber ROOM
    % dpconf add-jdbc-attr phone1 telephoneNumber NUMBER
    % dpconf add-jdbc-attr country1 countryName NAME

    phone1 user_id 列と country1 id 列には、LDAP 属性 uid がすでに作成されている EMPLOYEE.ID に存在する値だけが含まれるため、これらの列の JDBC 属性を必ずしも作成する必要はありません。

  10. LDAP person オブジェクトクラスに対して JDBC オブジェクトクラスを作成します。

    ここでは、employee1 テーブルを一次テーブル、country1 テーブルと phone1 テーブルを二次テーブルとします。JDBC オブジェクトクラスの作成にも DN が必要です。この例では、DN は uid 属性とデータビューのベース DN から構築されます。


    % dpconf create-jdbc-object-class mysql1-view person employee1 country1 phone1 uid
  11. 一次テーブルと二次テーブル間の結合ルールを定義します。

    結合ルールは二次テーブルで定義され、そのテーブルからのデータが一次テーブルのデータにリンクされる方法を決定します。


    % dpconf set-jdbc-table-prop country1 filter-join-rule:ID=\${EMPLOYEE.COUNTRY_ID}
    % dpconf set-jdbc-table-prop phone1 filter-join-rule:USER_ID=\${EMPLOYEE.ID}
  12. JDBC オブジェクトクラスのスーパークラスを指定します。

    スーパークラスは、JDBC オブジェクトクラスが属性を継承した LDAP オブジェクトクラスを示します。


    % dpconf set-jdbc-object-class-prop mysql1-view person super-class:top

Procedure必要な ACI を作成する

JDBC データビューをテストする前に、ACI を設定してデータビューへの書き込みアクセスを有効にします。デフォルトで、LDAP データビュー以外への書き込みアクセスは拒否されます。この例では、ユーザーに自分のパスワードの変更を許可するグローバル ACI を 1 つ追加するだけで十分です。

  1. プロキシマネージャーとして、ACI のプールを JDBC データソースに追加し、ユーザーに自分のエントリの変更を許可するグローバル ACI を追加します。


    % ldapmodify -p 1389 -D "cn=proxy manager" -w password
    dn: cn=mysql1,cn=virtual access controls
    changetype: add
    objectclass: acisource
    dpsaci: (targetattr="*") (target = "ldap:///o=sql") 
    (version 3.0; acl "enable all access for all users "; allow(all) 
    userdn="ldap:///uid=kvaughan,o=sql";)
    cn: mysql1
  2. o=sql ドメインへの接続を処理するために接続ハンドラを作成します。


    % dpconf create-connection-handler mysql1-handler
  3. 接続ハンドラを有効にして、o=sql ドメイン内のユーザーからのバインドをすべて処理するように設定します。


    % dpconf set-connection-handler-prop mysql1-handler is-enabled:true \
     bind-dn-filters:"uid=.*,o=sql"
  4. 前の手順で追加した ACI のプールを使用するように接続ハンドラを設定します。


    % dpconf set-connection-handler-prop mysql1-handler aci-source:mysql1

ProcedureJDBC データビューをテストする

  1. o=sql のユーザーとして JDBC データソースを検索し、データビューから読み取りができることを確認します。


    % ldapsearch -p 1389 -D "uid=kvaughan,o=sql" -w mypwd -b o=sql "objectclass=*"

    注 –

    o=sql のユーザーの資格を使用する必要があります。


  2. o=sql のユーザーとして、 userPassword 属性を変更して、データビューに書き込みができることを確認します。


    % ldapmodify -p 1389 -D "uid=kvaughan,o=sql" -w mypwd
    dn: uid=kvaughan,o=sql
    changetype: modify
    replace: userPassword
    userPassword: myNewpwd

結合データビューの作成とテスト

Procedure結合データビューを作成する

  1. myjoin1–view という名前の結合データビューを作成します。

    LDAP データビューを一次データビュー、JDBC データビューを二次データビューに指定します。


    % dpconf create-join-data-view myjoin1-view myds1-view mysql1-view o=join
  2. 二次データビューで結合ルールを定義します。

    次の結合ルールは、二次データビューのエントリの uid 属性が一次データビューのエントリの uid 属性に一致することを指定します。


    % dpconf set-jdbc-data-view-prop mysql1-view filter-join-rule:uid=\${myds1-view.uid}
  3. 結合データビューでフィルタ結合ルールが設定されている場合は、二次データビューで仮想変換ルールを設定して、その結合データビューでエントリを追加できるようにする必要があります。


    dpconf add-virtual-transformation secondary-view-name \
    write add-attr-value dn uid=\${uid}

    注 –

    このルールを設定しなければ、結合データビューにエントリを追加できません。


  4. 結合データビューを使用して、一次データビューに対して読み書きができる属性のセットを定義します。


    % dpconf set-ldap-data-view-prop myds1-view viewable-attr:dn \
    viewable-attr:cn viewable-attr:sn viewable-attr:givenName \
    viewable-attr:objectClass viewable-attr:ou viewable-attr:l \
    viewable-attr:uid viewable-attr:mail viewable-attr:telephoneNumber \
    viewable-attr:facsimileTelephoneNumber viewable-attr:roomNumber \
    viewable-attr:userPassword
    % dpconf set-ldap-data-view-prop myds1-view writable-attr:dn \
    writable-attr:cn writable-attr:sn writable-attr:givenName \
    writable-attr:objectClass writable-attr:ou writable-attr:l \
    writable-attr:uid writable-attr:mail writable-attr:telephoneNumber \
     writable-attr:facsimileTelephoneNumber writable-attr:roomNumber \
    writable-attr:userPassword

    これらの定義は、結合ビューのコンテキストにのみ適用されます。LDAP データビューに直接アクセスした場合、デフォルトでは、すべての属性が読み書きできます。

  5. 結合データビューを使用して、二次データビューに対して読み書きができる属性のセットを定義します。


    % dpconf set-jdbc-data-view-prop mysql1-view viewable-attr:dn \
     viewable-attr:objectclass viewable-attr:sn viewable-attr:roomNumber \
     viewable-attr:userpassword viewable-attr:jobtitle viewable-attr:countryName \
     viewable-attr:telephoneNumber
    % dpconf set-jdbc-data-view-prop mysql1-view writable-attr:dn \
    writable-attr:objectclass writable-attr:sn writable-attr:roomNumber \
    writable-attr:userpassword writable-attr:jobtitle \
    writable-attr:countryName writable-attr:telephoneNumber

    これらの定義は、結合ビューのコンテキストにのみ適用されます。JDBC データビューに直接アクセスした場合、デフォルトでは、すべての属性が読み書きできます。

Procedure必要な ACI を作成する

  1. プロキシマネージャーとして、結合データビューへの匿名アクセスを許可するグローバル ACI を追加します。


    % ldapmodify -p 1389 -D "cn=proxy manager" -w password
    dn: cn=myjoin1,cn=virtual access controls
    changetype: add
    objectclass: acisource
    dpsaci: (targetattr="*") (target = "ldap:///o=join") 
    (version 3.0; acl "anonymous_access"; allow(all) userdn="ldap:///anyone";)
    cn: myjoin1
  2. 前の手順で追加した ACI のプールを使用するように接続ハンドラを設定します。


    % dpconf set-connection-handler-prop default-connection-handler aci-source:myjoin1

Procedure結合データビューをテストする

  1. 匿名ユーザーとして、結合データビューを検索します。

    ここでは、Kirsten Vaughan のエントリを検索し、両方の結合ビューからのデータが取得されるかどうかを確認します。


    % ldapsearch -p 1389 -b o=join "uid=kvaughan"

    返されるエントリには、LDAP データビューと JDBC データビューの両方からの属性が含まれていることに注意してください。

  2. o=join のユーザーとして、userPassword 属性を変更して、結合データビューに書き込みができることを確認します。


    % ldapmodify -p 1389
    dn: uid=kvaughan,ou=people,o=join
    changetype: modify
    replace: userPassword
    userPassword: myPassword