Red Hat Training

A Red Hat training course is available for Red Hat Directory Server

7.4. 一意の数値属性値の割り当ておよび管理

エントリー属性によっては、uidNumbergidNumber などの一意の番号が必要です。Directory Server は、DNA (Distributed Numeric Assignment) プラグインを使用して、指定された属性に一意の番号を自動的に生成して提供できます。
注記
属性の一意性 は、DNA プラグインで維持されるとは限りません。プラグインは、重複しない範囲のみを割り当てますが、管理属性に手動で数字を割り当てることができ、手動で割り当てられた番号が一意であることを検証したり要求したりすることはありません。
一意の数字を割り当てる問題は、数字の生成ではなく、レプリケーションの競合を回避することで問題となります。DNA プラグインは、単一 のバックエンド全体に一意の番号を割り当てます。マルチマスターレプリケーションの場合、各マスターがローカル DNA プラグインインスタンスを実行しているときに、各インスタンスが真に一意の番号セットを使用していることを確認する方法が必要です。これは、割り当てる各サーバーに異なる 範囲 を割り当てることで行われます。

7.4.1. 動的番号の割り当ての概要

サーバーの DNA プラグインは、インスタンスが発行することのできる利用可能な番号の範囲を割り当てます。範囲の定義は非常にシンプルで、サーバーの次に利用可能な番号 (範囲の下限) と最大値 (範囲の最後) の 2 つの属性で設定されます。初期の下限範囲は、プラグインインスタンスを設定する際に設定されます。その後、下部の値はプラグインによって更新されます。利用可能な数を各レプリカの複数の範囲に分割することで、サーバーはすべて、互いに重複することなく、継続的に番号を割り当てることができます。

7.4.1.2. 範囲および割り当て番号

Directory Server が属性値の生成を処理する方法は複数あります。
  • 最も単純なケースでは、属性がない場合に、unique-number 属性を必要とするオブジェクトクラスを持つディレクトリーにユーザーエントリーが追加されます。管理属性に値を持たないエントリーを追加すると、DNA プラグインによる値の割り当てが発生します。このオプションは、一意の値を 1 つの属性に割り当てるように DNA プラグインが設定されている場合に限り機能します。
  • 同様の管理可能なオプションは、マジック番号 を使用することです。このマジックナンバーは、管理対象属性のテンプレート値であり、サーバーの範囲外のもの、数字、または単語でさえあり、プラグインは新しい割り当て値に置き換える必要があると認識します。マジック値でエントリーが追加され、エントリーが設定された DNA プラグインの範囲およびフィルター内にある場合は、プラグインでマジック番号を使用した新しい値の生成が自動的に発生します。下の例では、ldapmodify の使用に基づいて、0 をマジックナンバーとして追加します。
    dn: uid=jsmith,ou=people,dc=example,dc=com
     changetype: add
     objectClass: top
     objectClass: person
     objectClass: posixAccount
     uid: jsmith
     cn: John Smith
     uidNumber: 0
     gidNumber: 0
     ....
    DNA プラグインは、新規の一意の値のみを生成します。DNA プラグインが制御する属性に特定の値を使用するためにエントリーを追加または変更した場合には、指定した番号が使用されます。DNA プラグインは、その番号を上書きしません。

7.4.1.3. 同じ範囲の複数の属性

DNA プラグインは、1 つの属性タイプに、または 1 つの範囲の一意の番号から複数の属性タイプに一意の番号を割り当てることができます。
これにより、属性に一意の数字を割り当てるためのオプションが複数提供されます。
  • 一意の番号の 1 つの範囲から、1 つの属性タイプに割り当てられた 1 つの番号。
  • 1 つのエントリーの 2 つの属性に割り当てられた同じ一意の番号。
  • 2 つの異なる属性は、同じ範囲の一意の数字から 2 つの異なる数字を割り当てていました。
多くの場合は、属性タイプごとに一意の番号を割り当てるだけで十分です。新しい従業員エントリーに employeeID を割り当てる際には、各従業員エントリーに一意の employeeID が割り当てられます。
ただし、同じ範囲の数字から複数の属性に一意の番号を割り当てることが役に立つ場合もあります。たとえば、uidNumbergidNumberposixAccount エントリーに割り当てると、DNA プラグインは同じ数を両方の属性に割り当てます。これを行うには、マジック値を指定して、両方の管理属性を変更操作に渡します。ldapmodify の使用:
#  ldapmodify -D "cn=Directory Manager" -W -x

dn: uid=jsmith,ou=people,dc=example,dc=com
changetype: modify
add: uidNumber
uidNumber: 0
-
add:gidNumber
gidNumber: 0
DNA プラグインで複数の属性を処理する場合は、オブジェクトクラスが 1 つしか許可されない場合、プラグインはこれらの属性の 1 つにのみ一意の値を割り当てることができます。たとえば、posixGroup オブジェクトクラスは uidNumber 属性を許可しませんが、gidNumber を許可します。DNA プラグインが uidNumbergidNumber の両方を管理する場合は、posixGroup エントリーが作成されると、gidNumber の一意の番号が uidNumber 属性および gidNumber 属性と同じ範囲から割り当てられます。プラグインが管理するすべての属性に同じプールを使用すると、一意の数字の割り当てを維持し、異なるエントリーの uidNumbergidNumber が異なる範囲から割り当てられ、同じ 一意 の番号になる状況を防ぐことができます。
複数の属性が DNA プラグインで処理される場合は、1 つの変更操作のエントリーで指定の管理属性のすべてに同じ値が割り当てられます。同じ範囲から の数字を割り当てるには、別の変更操作を実施する必要があります。以下の例では、ldapmodify を使用してこれを行います。
# ldapmodify -D "cn=Directory Manager" -W -x
dn: uid=jsmith,ou=people,dc=example,dc=com
changetype: modify
add: uidNumber
uidNumber: 0
^D

# ldapmodify -D "cn=Directory Manager" -W -x
dn: uid=jsmith,ou=people,dc=example,dc=com
changetype: modify
add: employeeId
employeeId: magic
重要
DNA プラグインが一意の数字を複数の属性に割り当てるように設定する場合は、一意の番号を必要とする各属性にマジック値を指定する必要があります。1 つの属性に一意の番号を提供するように DNA プラグインが設定されている場合には、これは必須ではありませんが、複数の属性に必要です。エントリーが範囲に対して定義された各タイプの属性を許可しない場合や、さらに重要なことに、定義されたすべての属性タイプをエントリーが許可しますが、属性のサブセットのみが一意の値を必要とする場合があります。

例7.7 DNA および一意の銀行口座番号

銀行の例では、顧客の primaryAccount 属性および customerID 属性に同じ一意の番号を使用します。銀行の例の管理者は、DNA プラグインが同じ範囲から両方の属性に一意の値を割り当てるよう設定していました。
また、銀行では、顧客 ID とプライマリーの口座番号と同じ範囲のセカンダリー口座に番号を割り当てますが、これらの数字をプライマリーの口座番号と同じにすることはできません。銀行の例の管理者は、DNA プラグインも secondaryAccount 属性を管理するように設定しますが、エントリーの作成、secondaryAccount 属性および primaryAccount 属性の割り当ての にのみ customerID 属性を追加します。これにより、primaryAccount および customerID は、同じ一意の番号を共有し、secondaryAccount 番号は完全に一意ですが、それでも同じ範囲の番号からのものです。