Sun Java System Directory Server Enterprise Edition 6.0 管理指南

第 13 章 目錄伺服器屬性值唯一性

UID 唯一性外掛程式可確保指定的屬性值,在目錄或子樹狀結構的所有項目中是唯一的。若有任何作業嘗試增加含有現有指定屬性值的項目,此外掛程式均會加以阻止。此外掛程式也會阻止任何增加或修改目錄中已有之屬性值的作業。

UID 唯一性外掛程式預設為停用。此外掛程式啟用時,預設會確保 uid 屬性的唯一性。您可以建立新的外掛程式實例,以執行其他屬性值的唯一性。UID 唯一性外掛程式可確保單一伺服器上的屬性值唯一性。

本章包含下列主題:

屬性值唯一性簡介

UID 唯一性外掛程式是一種作業前外掛程式。它可在伺服器執行目錄的更新前,檢查 LDAP 增加、修改與修改 DN 作業。外掛程式可判斷作業是否會造成兩個項目具有相同屬性值。若是,伺服器即會終止作業,並傳回錯誤 19 LDAP_CONSTRAINT_VIOLATION 至用戶端。

您可以配置外掛程式,以在目錄的一或多個子樹狀結構中,或在特定物件類別的項目間執行唯一性。此配置可決定要執行唯一屬性值的項目集。

若要執行其他屬性的唯一性,您可以定義數個 UID 唯一性外掛程式實例。每個需要具備唯一值的屬性,各須定義一個外掛程式實例。您也可以為同一個屬性設定數個外掛程式實例,而在數個項目集內執行「個別的」唯一性。一個指定的屬性值在每個子樹狀結構集內只能允許一次。

當您在現有的目錄上啟用屬性唯一性時,伺服器並不會檢查現有項目間的唯一性。只有在增加項目,或於增加或修改屬性時,才會執行唯一性。

UID 唯一性外掛程式預設為停用,因為此外掛程式會影響多重主伺服器複寫。您可以在使用複寫時啟用 UID 唯一性外掛程式,但應留意對複寫使用唯一性外掛程式中所述的運作方式。

執行 uid 與其他屬性的唯一性

節說明如何啟用及配置 uid 屬性的預設唯一性外掛程式,以及如何執行任何其他屬性的唯一性。

Procedure執行 uid 屬性的唯一性

此程序說明如何使用 dsconf 指令,啟用及配置 UID 唯一性外掛程式。外掛程式配置項目的 DN 為 cn=uid uniqueness,cn=plugins,cn=config

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

使用 DSCC 期間,不可於執行其他屬性的唯一性時,修改預設 UID 唯一性外掛程式。若不需要 UID 唯一性外掛程式,請如執行其他屬性的唯一性中所述,將該外掛程式保留為停用,再為其他屬性建立新的外掛程式實例。

  1. 啟用外掛程式。


    $ dsconf enable-plugin -h host -p port "uid uniqueness"
  2. 根據您對要執行唯一性的子樹狀結構所將進行的指定,修改外掛程式引數。

    • 若要指定單一子樹狀結構的基底 DN,請鍵入:


      $ dsconf set-plugin-prop -h host -p port "uid uniqueness" argument:uid argument:subtreeBaseDN
      

      例如:


      $ dsconf set-plugin-prop -h host1 -p 1389 "uid uniqueness" argument:uid \
       argument:dc=People,dc=example,dc=com
    • 若要指定多個子樹狀結構,請以子樹狀結構的完整基底 DN,將更多引數增加為各個引數的值。


      $ dsconf set-plugin-prop -h host -p port "uid uniqueness" argument:uid \
       argument:subtreeBaseDN argument:subtreeBaseDN
      
    • 若子樹狀結構要根據其基底項目的物件類別進行指定,請將引數設為下列值。uid 屬性的唯一性會在每個具有 baseObjectClass 之項目的子樹狀結構中執行。您可以選擇在第三個引數中指定 entryObjectClass,使外掛程式僅在以具有此物件類別的項目為目標的作業中,執行唯一性。


      $ dsconf set-plugin-prop -h host -p port "uid uniqueness" argument:attribute=uid \
       argument:markerObjectClass=baseObjectClass argument:entryObjectClass=baseObjectClass
      
  3. 重新啟動伺服器,使變更生效。

Procedure執行其他屬性的唯一性

UID 唯一性外掛程式可用以執行任何屬性的唯一性。您必須在目錄中的 cn=plugins,cn=config 下建立新項目,以建立新的外掛程式實例。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 建立新的外掛程式。


    $ dsconf create-plugin -h host -p port -H lib-path -F init-func \
     -Y type plugin-name 
    

    plugin-name 應為簡短同時包含屬性名稱的說明性名稱。例如,若要建立郵件 ID 屬性的唯一性外掛程式,請使用此指令:


    $ dsconf create-plugin -h host1 -p 1389 -H /opt/SUNWdsee/ds6/lib/uid-plugin.so \
     -F NSUniqueAttr_Init -Y preoperation "mail uniqueness"
  2. 設定外掛程式特性:


    $ dsconf set-plugin-prop -h host -p port plugin-name property:value
    

    例如,若要設定郵件唯一性外掛程式的特性:


    $ dsconf set-plugin-prop -h host1 -p 1389 "mail uniqueness" \
     desc:"Enforce unique attribute values..." version:6.0 \
     vendor:"Sun Microsystems, Inc." depends-on-type:database
  3. 啟用外掛程式。


    $ dsconf enable-plugin -h host -p port plugin-name
    
  4. 指定外掛程式引數。

    這些引數取決於您對要執行唯一性的子樹狀結構將要進行的指定。

    • 若一或多個子樹狀結構要根據其基底 DN 進行定義,則第一個引數必須是應具有唯一值之屬性的名稱。後續引數為子樹狀結構的基底項目之完整 DN。


      $ dsconf set-plugin-prop -h host -p port plugin-name argument:attribute-name \
       argument:subtreeBaseDN argument:subtreeBaseDN...
    • 若子樹狀結構要根據其基底項目的物件類別進行定義,則第一個引數必須包含 attribute= attribute-name,用以指定應具有唯一值之屬性的名稱。第二個引數必須是 baseObjectClass,用以決定要執行唯一性之子樹狀結構的基底項目。您可以選擇在第三個引數中指定 entryObjectClass,使外掛程式僅在以具有此物件類別的項目為目標的作業中,執行唯一性。


      $ dsconf set-plugin-prop -h host -p port plugin-name argument:attribute=attribute-name \
       argument:markerObjectClass=baseObjectClass argument:requiredObjectClass=entryObjectClass
      

    在所有外掛程式引數中,= 符號之前或之後皆不可有空格。

  5. 重新啟動伺服器,使變更生效。

對複寫使用唯一性外掛程式

在複寫作業中執行更新時,UID 唯一性外掛程式不會對屬性值執行任何檢查。這並不會影響單一主伺服器複寫,但外掛程式無法為多重主伺服器複寫自動執行屬性的唯一性。

單一主伺服器複寫案例

由於用戶端應用程式所做的所有修改都會在主伺服器複本上執行,因此 UID 唯一性外掛程式應在主伺服器上啟用。外掛程式應配置成在複寫的尾碼中執行唯一性。由於主伺服器可確保所需屬性的值皆是唯一的,因此您無需在用戶伺服器上啟用外掛程式。

在單一主伺服器的用戶上啟用 UID 唯一性外掛程式,並不會干擾複寫作業或正常的伺服器作業。但它可能會使效能稍微降低。

多重主伺服器複寫案例

根據設計,UID 唯一性外掛程式並不適用於多重主伺服器複寫作業。由於多重主伺服器複寫所使用的複寫模式不具嚴謹的一致性,即使在兩部伺服器上同時增加相同的屬性值,甚至雙方都啟用外掛程式,也無法偵測出此相同值。

然而,若要執行唯一性檢查的屬性是命名屬性,且已在所有主伺服器上為相同子樹狀結構中的同一屬性啟用唯一性外掛程式,則可使用 UID 唯一性外掛程式。

當這些條件都符合時,在複寫時所發生的唯一性衝突,將會報告為命名衝突。命名衝突必須以手動方式解決。如需更多資訊,請參閱解決常見複寫衝突