5.2. 属性の一意性について

Attribute Uniqueness プラグインは、preoperation プラグインです。つまり、サーバーが LDAP 操作を行う に、プラグインがすべての更新操作をチェックすることを意味します。プラグインは、その操作が、監視するように設定されている属性と接尾辞に適用されるかどうかを判断します。
更新操作がプラグインによって監視される属性および接尾辞に適用され、2 つのエントリーが同じ属性値を持つと、サーバーは操作を終了し、クライアントに LDAP_CONSTRAINT_VIOLATION エラーを返します。
Attribute Uniqueness プラグインの各インスタンスは、1 つ以上のサブツリーの 1 つの属性に対してチェックを行います。複数の属性の一意性を確認するには、チェックする属性ごとに、プラグインの個別のインスタンスを作成する必要があります。
Attribute Uniqueness プラグインは、ユーザーが定義した特定の方法で操作することができます。
  • 指定されたサブツリーのすべてのエントリーを確認できます。
    たとえば、会社 example.com が example_a.com および example_b.com のディレクトリーをホストしている場合、uid=jdoe,ou=people,o=example_a,dc=example,dc=com などのエントリーが追加された場合、o=example_a,dc=example,dc=com サブツリーでのみ一意性を適用する必要があります。これは、Attribute Uniqueness プラグイン設定にサブツリーの DN を明示的にリスト表示することで実施されます。
  • 更新されたエントリーの DN のエントリーに関連するオブジェクトクラスを指定し、その下のすべてのエントリーで一意性チェックを実行します。
    このオプションはホスト環境で役に立ちます。たとえば、uid=jdoe,ou=people,o=example_a,dc=example,dc=com などのエントリーを追加する場合、o=example_a,dc=example,dc=com サブツリーの下で一意性を強制しますが、このサブツリーを明示的に設定内に一覧表示するのではなく、marker オブジェクトクラス を示します。マーカーオブジェクトクラスが organization に設定されている場合、一意性チェックアルゴリズムは、このオブジェクトクラス(o=example_a)を持つ DN のエントリーを見つけ、その下のすべてのエントリーでチェックを実行します。
    また、更新されたエントリーに指定のオブジェクトクラスが含まれる場合に限り、一意性を確認することもできます。たとえば、更新されたエントリーに objectclass=inetorgperson が含まれている場合にのみ、チェックを実行できます。
Directory Server は、Directory Server の初回設定時に、uid 属性の Attribute Uniqueness プラグインのデフォルトインスタンスを提供します。このプラグインインスタンスは、uid 属性に指定された値がルート接尾辞( userRoot データベースに対応する接尾辞)で一意になるようにします。
このプラグインは、マルチサプライヤーのレプリケーションの操作に影響するため、デフォルトでは無効になっています。
レプリケーション操作の一部として更新が実行されると、Attribute Uniqueness プラグインは属性値のチェックを実行しません。
クライアントアプリケーションによる変更はすべて、サプライヤーサーバーで実行されるため、サプライヤーで Attribute Uniqueness プラグインを有効にする必要があります。コンシューマーサーバーで有効にする必要はないです。
コンシューマーで Attribute Uniqueness プラグインを有効にしても、Directory Server の正常な操作を妨げることはありませんが、パフォーマンスが低下する可能性はあります。
マルチサプライヤーのレプリケーションシナリオでは、サプライヤーは同じレプリカのサプライヤーとコンシューマーの両方として機能します。マルチサプライヤーのレプリケーションでは、大まかに一貫性のあるレプリケーションモデルを使用しているため、サーバーの 1 つで Attribute Uniqueness プラグインを有効化するだけでは、属性値が両方のサプライヤーサーバー間でいつでも一意になるようにするには十分とは言えません。したがって、1 つのサーバーで Attribute Uniqueness プラグインを有効化すると、各レプリカに保持されるデータに不整合が生じる可能性があります。
ただし、以下の両方の条件を満たす場合は、Attribute Uniqueness プラグインを使用することが可能です。
  • 一意性のチェックが行われる属性は、ネーミング属性です。
  • Attribute Uniqueness プラグインは、両方のサプライヤーサーバーで有効化されます。
これらの条件が満たされると、属性の一意性の競合は、レプリケーション時に命名の競合として報告されます。命名の競合は、手動で解決する必要があります。