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

ProcedureJDBC テーブル、属性、オブジェクトクラスを設定する

JDBC データビューを設定する場合、次のオブジェクトも設定する必要があります。

  1. リレーショナルデータベースの各テーブルの JDBC テーブルを作成します。


    % dpconf create-jdbc-table jdbc-table-name db-table
    

    db-table の名前は大文字と小文字を区別します。リレーショナルデータベースで使用したのと同じ文字 (大文字または小文字) を使用してください。異なる文字を使用すると、そのテーブルをターゲットとする操作は失敗する場合があります。

  2. 各リレーショナルデータベーステーブル内で各列の JDBC 属性を作成します。


    % dpconf add-jdbc-attr table-name attr-name sql-column
    

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

  3. (省略可能) リレーショナルデータベース内の列が大文字と小文字を区別する場合、JDBC 属性の LDAP 構文を変更します。


    % dpconf set-jdbc-attr-prop table-name attr-name ldap-syntax:ces

    ldap-syntax の値は、デフォルトで cis です。これは、jdbc-attr が大文字と小文字を区別しないことを意味します。リレーショナルデータベースが大文字と小文字を区別する場合、値を ces に変更します。

    Oracle や DB2 など、特定のリレーショナルデータベースはデフォルトで大文字と小文字を区別します。LDAP はデフォルトで大文字と小文字を区別しません。Directory Proxy Server はリレーショナルデータベーステーブルの列が大文字と小文字を区別することを検出すると、フィルタ内の対応する属性の ldapsearch クエリーが UPPER 関数を使用して SQL クエリーに変換されます。

    たとえば、クエリー ldapsearch -b "dc=mysuffix" "(attr=abc)" は次の SQL クエリーに変換されます。


    SELECT * FROM mytable WHERE (UPPER(attr)='ABC')

    デフォルトで、この種類のクエリーはインデックスが生成されません。このため、このようなクエリーは、パフォーマンスに大きな影響を与える可能性があります。

    次の 2 つの方法でパフォーマンスへの影響を緩和できます。

    • jdbc-attr の ldap-syntax プロパティーを ces に設定する。

    • LDAP フィルタで使用されている可能性のある各 jdbc-attrUPPER 関数でインデックスを作成する。


    注 –

    リレーショナルデータベースが大文字と小文字を区別しない場合は、ldap-syntax をデフォルト値の cis に設定します。ldap-syntax:ces は、大文字と小文字を区別しないデータベースではサポートされません。


  4. LDAP リレーショナルデータベーステーブルの JDBC オブジェクトクラスを作成します。


    % dpconf create-jdbc-object-class view-name objectclass primary-table \
      [secondary-table... ] DN-pattern
    

    JDBC オブジェクトクラスを作成すると、原則的にこれらのテーブルが関連付けられる LDAP オブジェクトクラスが指定されます。JDBC オブジェクトクラスは、一次テーブルと二次テーブルが存在する場合、これらも指定します。

    JDBC オブジェクトクラスを作成する場合、DN パターンを指定します。DN パターンは、エントリの DN の構築にどの属性を使用するかを示します。たとえば、DN パターンを uid として指定すると、エントリの DN は、データビューの属性 uid とビューベースを使用して構築されます。たとえば、uid=bjensen,ou=people,dc=example,dc=com のようになります。DN パターンは複数の属性で構成されることがあります。その場合は、属性を , (カンマ) で区切るようにしてください。たとえば、DN パターンを uid,country として指定した場合、データビューによって返されるエントリの DN は uid=bjensen,country=America,ou=people,dc=example,dc=com となります。

    JDBC オブジェクトクラスの DN パターンに定義されたサブツリーコンポーネントにはすべて、それらのサブツリーコンポーネント用に定義された JDBC オブジェクトクラスを設定するようにしてください。たとえば、JDBC オブジェクトクラスに uid,ou という DN パターンがある場合、JDBC オブジェクトクラス定義に DN パターン ou を設定するようにしてください。これは、Directory Proxy Server で正しい構造の DIT を構築するために必要です。この設定を行わないと、ou=xxx,base-DN のような値を持つサブツリーが検索結果で返されません。

  5. 二次テーブルが存在する場合、一次テーブルと二次テーブル間の結合ルールを定義します。


    % dpconf set-jdbc-table-prop secondary-table-name filter-join-rule:join-rule
    

    結合ルールは二次テーブルで定義され、そのテーブルからのデータが一次テーブルのデータにリンクされる方法を決定します。オブジェクトクラスの一次テーブルと二次テーブル間の関係の定義方法は重要です。詳細については、「JDBC テーブル間の関係の定義」を参照してください。

  6. JDBC オブジェクトクラスのスーパークラスを指定します。


    % dpconf set-jdbc-object-class-prop view-name objectclass super-class:value
    

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