Sun Java logo     上一頁      目錄      索引      下一頁     

Sun logo
Sun Java(TM) System Directory Server 5.2 2005Q1 管理指南 

第 15 章
強制屬性值唯一性

UID 唯一性外掛程式能確保所指定的屬性值,在目錄或樹狀子目錄內的所有項目中是唯一的。當有任何作業嘗試加入含有指定屬性現有值的項目,或有任何作業加入或修改屬性成為目錄中的現有值時,外掛程式會停止這些作業。

依預設值停用 UID 唯一性外掛程式。啟用後,可依預設值確保 uid 屬性的唯一性。您可以建立新的外掛程式實例,以在其他屬性上強制執行唯一值。UID 唯一性外掛程式的限制是:它只能確保單一伺服器上屬性值的唯一性。

本章包含下列章節:


概述

UID 唯一性外掛程式是一個前置作業外掛程式,它會在伺服器更新目錄之前,檢查所有的 LDAP 作業。外掛程式會判斷該作業是否會導致兩個項目擁有相同的屬性值,當發生這種情況時,伺服器會中止作業並傳回錯誤 19 LDAP_CONSTRAINT_VIOLATION 至用戶端。

您可以配置外掛程式在目錄內一個或多個樹狀子目錄中,或是在特定物件類別的項目之間,強制執行唯一性。這個配置決定將強制執行唯一屬性值的項目組。只有當作業的目標是這個項目組中的項目時,且該屬性值在這組所有項目之間不是唯一值時,作業才會被中止。

如果您希望強制執行其他屬性的唯一性,您可以定義多個 UID 唯一性外掛程式的實例。定義您要其值為唯一的每個屬性和項目組的一個外掛程式實例。您也可以讓同一個屬性擁有多個外掛程式實例,以在多個項目組中強制執行「不同」的唯一性。每一組中只允許一次指定屬性。

當您在現有目錄上啟用屬性唯一值時,伺服器並不會在現有項目間檢查唯一值。而只有在加入項目,或者是加入或修改屬性時,才會強制執行唯一性。

依預設值,UID 唯一性外掛程式是停用的,因為它會影響多重主機複製的作業。您可以在使用複製時啟用 UID 唯一性外掛程式,但您應該要注意使用有複製的唯一性外掛程式中所描述的行為。


強制執行 uid 屬性的唯一性

本節說明如何啟用和配置 uid 屬性的預設唯一性外掛程式。若要強制執行其他屬性的唯一性,請參閱強制執行其他屬性的唯一性

使用主控台配置外掛程式

使用主控台時,您必須修改預設的 uid 唯一性外掛程式,以強制執行其他屬性唯一性。如果不希望擁有 uid 唯一性外掛程式,請將它維持在停用狀態,並為其他屬性建立新的外掛程式實例,如強制執行其他屬性的唯一性所述。

  1. 在 Directory Server Console 最上層 [配置] 標籤上,展開外掛程式節點,並選取 uid uniqueness 外掛程式。
  2. 在右窗格中,選取核取方塊以啟用外掛程式。
  3. 請勿修改初始化功能或外掛程式模組路徑的欄位。

  4. 根據您指定已強制執行唯一性之樹狀子目錄的方式,修改外掛程式引數。
    • 若要指定單一樹狀子目錄的 Base DN,請編輯引數 2 的值。若要指定一個以上的樹狀子目錄,請按一下 [加入] 以加入更多引數,並在每個新文字欄位中輸入樹狀子目錄的 Base DN。
    • 若要依基礎項目的物件類別來指定樹狀子目錄,請將引數設定成下列的值:
    • 引數 1:attribute=uid
      引數 2:markerObjectClass=baseObjectClass

      外掛程式將在目錄內每個項目下的樹狀子目錄中強制執行 uid 唯一性,該目錄具有指定的 baseObjectClass。例如,如果您在許多分支中都有使用者項目,如 ou=Employeesou=Contractors,則請指定 markerObjectClass=organizationalUnit

      因為標示物件類別下的分支範圍可能相當大,您可能需要進一步限制屬性唯一性的執行,以根據項目的物件類別來確認項目。按一下 [加入] 加入第三個外掛程式引數,並將它設定為下列的值:

      引數 3:requiredObjectClass=entryObjectClass

      在具有 baseObjectClass 之項目的樹狀子目錄中,只有當作業以具有 entryObjectClass 的項目為目標時,外掛程式才會強制執行唯一性。例如,如果您有傳統的使用者項目,請指定 requiredObjectClass=inetorgperson

  5. 當您編輯完 uid 唯一性外掛程式後,請按一下 [儲存]。系統會提醒您必須重新啟動伺服器才能使變更生效。
  6. 重新啟動伺服器以開始強制執行 uid 屬性的唯一值。

從指令行配置外掛程式

下列程式描述如何使用 ldapmodify 指令啟用和配置 uid 唯一性外掛程式。外掛程式配置項目的 DN 為 cn=uid uniqueness,cn=plugins,cn=config

  1. nsslapd-pluginEnabled 屬性設定為 onoff,可分別啟用或停用外掛程式。
  2. ldapmodify -h host -p port -D "cn=Directory Manager" -w password
    dn:cn=uid uniqueness,cn=plugins,cn=config
    changetype:modify
    replace:nsslapd-pluginEnabled
    nsslapd-pluginEnabled:on or off
    ^D

  3. 根據您指定已強制執行唯一性之樹狀子目錄的方式,修改外掛程式引數。
  4. 若要指定單一樹狀子目錄的 Base DN,請修改 nsslapd-pluginarg1 的值:
  5. ldapmodify -h host -p port -D "cn=Directory Manager" -w password
    dn:cn=uid uniqueness,cn=plugins,cn=config
    changetype:modify
    replace:nsslapd-pluginArg1
    nsslapd-pluginArg1:subtreeBaseDN
    ^D

    若要指定一個以上的樹狀子目錄,請加入更多引數,並以樹狀子目錄的完整 Base DN 作為每個引數的值:

    ldapmodify -h host -p port -D "cn=Directory Manager" -w password
    dn:cn=uid uniqueness,cn=plugins,cn=config
    changetype:modify
    add:nsslapd-pluginArg2
    nsslapd-pluginArg2:subtreeBaseDN
    -
    add:nsslapd-pluginArg3
    nsslapd-pluginArg3:subtreeBaseDN
    -
    ...
    ^D

  6. 若要根據樹狀子目錄的基礎項目中之類別物件來指定該樹狀子目錄,請將引數設定成下列的值:外掛程式會在具有 baseObjectClass 的每個項目下的樹狀子目錄中,強制執行 uid 屬性的唯一性。或者,您可以在第三個引數中指定 entryObjectClass,如此只有在作業以具有此物件類別的項目為目標時,外掛程式才會強制執行唯一性。
  7. ldapmodify -h host -p port -D "cn=Directory Manager" -w password
    dn:cn=uid uniqueness,cn=plugins,cn=config
    changetype:modify
    replace:nsslapd-pluginArg0
    nsslapd-pluginArg0:attribute=uid
    -
    replace:nsslapd-pluginArg1
    nsslapd-pluginArg1:markerObjectClass=baseObjectClass
    -
    replace:nsslapd-pluginArg2
    nsslapd-pluginArg2:requiredObjectClass=entryObjectClass
    ^D

  8. 重新啟動伺服器以使變更生效。


強制執行其他屬性的唯一性

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

  1. 使用 ldapmodify 指令來加入新外掛程式實例的配置項目。指令的第一部分如下所示。指令的其他部分則顯示在下列步驟中。
  2. ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
    dn:cn=plug-in_name,cn=plugins,cn=config
    objectClass:top
    objectClass:nsSlapdPlugin
    objectClass:extensibleObject
    cn:plug-in_name
    nsslapd-pluginDescription:Enforce unique attribute values
    nsslapd-pluginType:preoperation
    nsslapd-plugin-depends-on-type:database
    nsslapd-pluginPath:ServerRoot/lib/uid-plugin.soextension
    nsslapd-pluginVersion: 5.2
    nsslapd-pluginVendor:Sun Microsystems, Inc.
    nsslapd-pluginId:NSUniqueAttr
    nsslapd-pluginInitfunc:NSUniqueAttr_Init
    nsslapd-pluginEnabled:on or off
    ...
    ^D

    在指令的第一個部分中,plug-in_name 應該是包含屬性名稱的簡短描述性名稱,例如 cn=mail uniquenessServerRoot 和程式庫 extension 則視您的平台而定。當伺服器重新啟動後,將新實例的啟用狀態指定為 onoff

  3. 指令的其他部分會指定外掛程式引數,這些引數視您決定要強制執行唯一性的樹狀子目錄之方式而定:
  4. 若要根據其 Base DN 來定義一或多個樹狀子目錄,則第一個引數必須是屬性的名稱,且應該具有唯一值,而後續的引數則是樹狀子目錄基礎項目的完整 DN:
  5. nsslapd-pluginarg0: attribute_name
    nsslapd-pluginarg1:subtreeBaseDN
    nsslapd-pluginarg2:subtreeBaseDN
    ...
    ^D

  6. 若要根據樹狀子目錄的基礎項目內物件類別來定義該樹狀子目錄,則第一個引數必須包含 attribute=attribute_name,以指定應該具有唯一值的屬性名稱。第二個引數必須是 baseObjectClass,此引數決定要強制執行唯一性之樹狀子目錄的基礎項目。或者,您可以在第三個引數中指定 entryObjectClass,如此只有當作業以具有此物件類別的項目為目標時,外掛程式才會強制執行唯一性。
  7. nsslapd-pluginarg0:attribute=attribute_name
    nsslapd-pluginarg1:markerObjectClass=baseObjectClass
    nsslapd-pluginarg2:requiredObjectClass=entryObjectClass
    ^D

    在所有的外掛程式引數中,等號 ( = ) 前後都不可以有空格。

  8. 重新啟動伺服器,將這個唯一性外掛程式的新實例載入伺服器中。


使用有複製的唯一性外掛程式

當更新作業是複製作業的一部分時,UID 唯一性外掛程式並不會對屬性值進行任何檢查。這不會影響單一主機的複製,但外掛程式無法自動對多重主機複製強制執行屬性唯一性。

單一主機複製案例

因為用戶端應用程式所做的所有修改都是在主機複本上執行,所以主機伺服器上應該啟用 UID 唯一性外掛程式。此外,應該配置外掛程式以強制執行複製尾碼中的唯一性。因為主機會確定所需屬性的值是唯一的,所以不需要在用戶伺服器上啟用外掛程式。

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

多重主機複製案例

UID 唯一性外掛程式的設計,並不適用於多重主機複製案例。因為多重主機複製對複製模型的一致性要求不嚴謹,所以同時在兩台伺服器上加入相同的屬性值並不會被刪除,即使這兩台伺服器都已經啟用外掛程式。

但是,您可以在下列情況中使用 UID 唯一性外掛程式:

遇到這些情況時,系統會在複製期間將唯一性衝突報告為命名衝突。命名衝突需要以手動方式解決。如需關於解決複製衝突的資訊,請參閱解決一般複製衝突



上一頁      目錄      索引      下一頁     


文件號碼 819-2014。   Copyright 2005 Sun Microsystems, Inc. 版權所有。