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

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

第 9 章
延伸目錄模式

Directory Server 隨附標準模式,此模式包括上百種物件類別和屬性。雖然標準物件類別和屬性應該可以符合大部分的需求,但您仍可能需要建立新的物件類別和屬性以延伸您的模式。如需標準模式的概述,以及有關設計模式以符合您部署的說明,請參閱 Directory Server Deployment Planning Guide

本章描述如何在下列章節中延伸您的模式:


模式檢查

當模式檢查處於開啟狀態時,Directory Server 會確保所有匯入、加入和修改作業都符合目前定義的目錄模式:

依預設值,模式檢查是開啟的,執行 Directory Server 時應始終開啟模式檢查。許多用戶端應用程式會假設如果模式檢查處於開啟狀態,就表示所有項目都符合模式。但是,開啟模式檢查將不會驗證目錄中現有的內容。 唯一保證所有目錄內容都符合模式的方法是在加入任何項目或重新初始化所有項目前就開啟模式檢查。

通常您不會希望關閉模式檢查,唯一可能例外的狀況是要從已知符合模式的 LDIF 檔案匯入時,可以關閉模式檢查以加快匯入速度。但是這樣難免會有風險,萬一匯入不符合模式的項目,將無法偵測出來。

當項目不符合模式時,還是可以搜尋此項目,但對此項目執行的修改作業將會失敗。若要使項目符合模式,您必須執行下列操作:

  1. 如果伺服器位於實際執行環境中,您最好先將整部伺服器設成唯讀狀態,以防模式檢查處於關閉狀態時發生任何修改。請參閱設定全域唯讀模式
  2. 依下述方式關閉模式檢查。
  3. 擷取項目,並以人工方式跟目前定義的模式做比較,以判定不符合的原因。請參閱檢視屬性檢視物件類別
  4. 修改項目,使它符合模式。
  5. 如果有許多不符合的項目,而這些項目呈現某種模式或是資料的新格式,您可以考慮改為修改模式。但是您應該在部署之前預先規劃模式,將模式變更減到最少的程度。如需詳細資訊,請參閱 Directory Server Deployment Planning Guide

  6. 依下述方式開啟模式檢查。
  7. 如果已設定全域唯讀模式,請取消設定。

使用主控台設定模式檢查

  1. 在 Directory Server Console 最上層的 [配置] 標籤上,選取配置樹狀目錄中的模式節點。
  2. 右面板中包含模式的定義。

  3. 面板上方的狀態訊息指示目前已啟用或已停用模式檢查。按一下右邊的按鈕即可開啟或關閉模式檢查:
    • 按鈕標示為 [停用],即可關閉模式檢查。
    • 當您可以開啟模式檢查時,按鈕將標示為 [啟用]。
    • 新的模式檢查策略會立即生效。

從指令行設定模式檢查

您也可以設定 cn=config 項目的 nsslapd-schemacheck 屬性來開啟或關閉模式檢查:

ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:cn=config
changetype:modify
replace:nsslapd-schemacheck
nsslapd-schemacheck:on or off
^D

伺服器將立刻強制執行新的模式檢查策略。


延伸模式概貌

將新屬性加入模式中時,您必須建立新的物件類別以包含這些屬性。雖然這樣看起來似乎很方便,只要將所需的屬性加入現有的物件類別中即可,而且此類別已經包含您所需要的大部分屬性,但是這樣做會危及與 LDAP 用戶端的交互操作性。

Directory Server 與現有 LDAP 用戶端的交互操作性依賴標準的 LDAP 模式。如果您變更標準模式,則在升級伺服器時也會遇到困難。基於相同的原因,您不能夠刪除標準模式元素。

如需關於物件類別、屬性、目錄模式與延伸模式規則的詳細資訊,請參閱 Directory Server Deployment Planning Guide。如需關於標準屬性和物件類別的資訊,請參閱 Directory Server Administration Reference

Directory Server 模式儲存在 cn=schema 項目的屬性中。如同配置項目一樣,這是模式的 LDAP 檢視,而且是在伺服器啟動期間從檔案中讀取得來。模式檔案是 LDIF 檔案,位於:

ServerRoot/slapd-serverID/config/schema

此目錄包含 Directory Server 及其他依靠 Directory Server 的 Sun Java System 伺服器所用的標準模式檔案。這些檔案及標準模式在 Directory Server Administration Reference 中描述。

修改模式檔案

伺服器只在啟動時讀取一次模式檔案。檔案的 LDIF 內容會加入 cn=schema 中模式的記憶體 LDAP 檢視。因為模式定義的順序至關重要,所以模式檔案名稱前會加上編號字首,並依文數字順序載入。只有安裝期間定義的系統使用者可寫入此目錄中的模式檔案。

若要修改檔案中的模式定義,您必須建立或修改所要的檔案,然後重新啟動伺服器。模式檔案中的定義語法描述於 RFC 2252 (http://www.ietf.org/rfc/rfc2252.txt) 中。

直接在 LDIF 檔案中定義模式時,X-ORIGIN 欄位的值不得使用 "user defined"。因為這是保留值,專供透過 cn=schema 的 LDAP 檢視定義的模式描述元素,以及出現在檔案 99user.ldif 中的模式描述元素使用。

99user.ldif 檔案包含 cn=schema 項目以及從指令行或用主控台加入的所有模式定義的額外 ACI。加入新的模式定義時,將覆寫 99user.ldif 檔案。如果想修改此檔案,您必須立即重新啟動伺服器,以確保將成為永久性變更。

您不應該修改在其他模式檔案中定義的標準模式。但是您可以加入新檔案,以定義新屬性和物件類別。例如,若要在許多伺服器上定義新的模式描述元素,您可以在 98mySchema.ldif 檔案內定義模式描述元素,再將此檔案複製到所有伺服器的模式目錄中。然後您必須重新啟動所有伺服器,以載入新的模式檔案。

從指令行修改模式

因為模式由 cn=schema 中的 LDAP 檢視定義,所以您可以用 ldapsearchldapmodify 公用程式在線上檢視及修改模式。但是,您只能修改 X-ORIGIN 欄位的值是 "user defined" 的模式描述元素。伺服器將拒絕其他定義的任何修改。

使用 ldapmodify 可新增及刪除 attributeTypesobjectClasses 屬性的個別值。若要修改其中一個值,您必須刪除特定的值,再加入新值,因為這些屬性是多重值屬性 (請參閱修改多重值屬性的一個值)。所用的語法必須是 RFC 2252 (http://www.ietf.org/rfc/rfc2252.txt) 中所述用於定義模式描述元素的語法。

任何新的元素定義,以及您對使用者定義元素所做的變更,都將儲存在 99user.ldif 檔案中。

從指令行修改模式定義容易發生錯誤,因為您必須輸入完全一致的冗長數值。但是您可以在必須更新目錄模式的程序檔中使用此功能。

使用主控台修改模式

若要自訂目錄模式,建議採用的方法是使用以下各節中所述的 Directory Server Console 介面。主控台可讓您檢視標準模式,並提供圖形介面用於定義新的屬性和物件類別,及編輯已定義的元素。

任何新的元素定義,以及您對使用者定義元素所做的變更,都將儲存在 99user.ldif 檔案中。

若要延伸目錄模式,您必須依下列順序進行:

  1. 先依建立屬性所述,建立新的屬性。
  2. 然後建立包含新屬性的物件類別,並將屬性加入物件類別。如需資訊,請參閱建立物件類別


管理屬性定義

Directory Server Console 提供介面可檢視模式中的所有屬性,也可以建立、編輯與刪除您自己的屬性定義。

檢視屬性

若要檢視目前存在於目錄模式中所有屬性的相關資訊:

  1. 在 Directory Server Console 最上層的 [配置] 標籤上,選取配置樹狀目錄中的 [模式] 節點,然後選取右面板中的 [屬性] 標籤。
  2. 此標籤包含模式中所有標準 (唯讀) 與使用者定義屬性的表格。在表格中的線上按住滑鼠不放,可以顯示對應屬性的描述字串。

    下列表格描述屬性表的欄位。

    表 9-1 屬性標籤中的表格欄位 

    欄標題

    描述

    名稱

    屬性名稱 (有時候稱為屬性類型)。

    OID

    屬性的物件識別碼。OID 是字串,通常為含有小數點的十進位數字,可唯一識別模式物件。

    如需關於 OID 的詳細資料,或要為您的企業要求字首,請傳送郵件至 iana@iana.org 給 IANA (Internet Assigned Number Authority,網際網路編號中心),或瀏覽 IANA 網站,網址是 http://www.iana.org/

    語法

    語法描述此屬性所允許的數值格式,可能的語法列於表 9-2 中。

    Multivalued

    此欄的核取方塊指定屬性是否為多重值。多重值屬性可以在一個項目中出現多次,但單值屬性則只能出現一次。

    表 9-2 屬性語法定義 

    語法名稱

    定義

    Binary (之前為 bin)

    表示此屬性的值被視為二進位資料。

    Boolean

    表示此屬性只能是這兩個值中的一個:TrueFalse

    Country String

    表示此屬性的值僅限於 ISO 3166 所指定的兩個字母國碼,例如 FR

    DN (之前為 dn)

    表示此屬性的值為 DN (辨別名稱)。

    DirectoryString
    (之前為 cis)

    表示此屬性的值可包含任何 UTF-8 編碼字元,並視為不區分大小寫。

    GeneralizedTime

    表示此屬性的值被編碼為可列印字串。必須指定時區。強烈建議使用 GMT。

    IA5String (之前為 ces)

    表示此屬性的值只可包含 ASCII 字元的子集,而且視為要區分大小寫。

    Integer (之前為 int)

    表示此屬性的有效值是整數。

    OctetString

    與 Binary 行為相同。

    Postal Address

    表示此屬性的值被編碼為

    dstring[$ dstring]*

    其中每個 dstring 元件均使用 DirectoryString 語法加以編碼成數值。在 dstring 中的反斜線和貨幣字元都必須加上括號,如此才不會與行分隔符號混淆。許多伺服器都將郵寄地址限制為 6 行,每行不超過 30 個字元。例如:

    1234 Main St.$Anytown, CA 12345$USA

    TelephoneNumber (之前為 tel)

    表示此屬性的值為電話號碼格式。建議電話號碼使用國際格式。

    URI

    表示此屬性的值包含 URL (全球資源定位器),加上選用的字首,如 http://https://ftp://ldap://ldaps://。URI 值的行為與 IA5String (參閱 RFC 2396, http://www.ietf.org/rfc/rfc2396.txt) 相同。

建立屬性

若要在模式中加入您自己的屬性定義。

  1. 在 Directory Server Console 最上層的 [配置] 標籤上,選取配置樹狀目錄中的 [模式] 節點,然後選取右面板中的 [屬性] 標籤。
  2. 按一下 [建立] 以顯示 [建立屬性] 對話方塊。
  3. 在文字欄位中輸入資訊,以定義新的屬性。只有屬性名稱和語法是必要的:
    • 屬性名稱 - 輸入屬性的唯一名稱,也稱為它的屬性類型。屬性名稱必須以字母開頭,而且只包含 ASCII 字母、數字和連字號。

    • 備註

      屬性名稱可包含大寫字母、但 LDAP 用戶端都不應該依賴這一點。根據 RFC 2251 (http://www.ietf.org/rfc/rfc2251.txt) 的 4.1.4 節,屬性名稱必須以不區分大小寫的方式處理。


    • 屬性 OID (選用) - 輸入屬性的物件識別碼。在表 9-1 中描述 OID。如果不指定 OID,Directory Server 會自動使用 attributeName-oid。請注意,為嚴格遵守 LDAP v3,您必須提供有效的數字 OID。
    • 屬性別名 (選用) - 使用以逗號分隔的清單輸入屬性的替代名稱。
    • 屬性描述 (選用) - 輸入簡短的描述文字以解釋屬性的用途。
    • 語法 - 從描述屬性內含資料的下拉式清單中選取語法。在 表 9-2 中描述可用的語法。
    • 多重值 - 依預設設值,屬性將為多重值。如果每個項目中此屬性只能有一個值,請取消選取此核取方塊。
  4. 在 [建立屬性] 對話方塊中,按一下 [確定],以定義新的屬性。它將出現在使用者定義的屬性表中。
  5. 在目錄項目中為此屬性定義值之前,您必須先建立或編輯需要或允許此屬性的物件類別,如管理物件類別定義所述。

編輯屬性

使用主控台只可以編輯使用者定義的屬性。修改屬性的名稱、語法或多重值定義之前,您必須確定目錄中沒有任何項目目前正在使用此屬性,否則用戶端將無法存取該項目。

若要修改屬性的模式定義:

  1. 在 Directory Server Console 最上層的 [配置] 標籤上,選取配置樹狀目錄中的 [模式] 節點,然後選取右面板中的 [屬性] 標籤。
  2. 在 [使用者定義的屬性] 表中,選取要編輯屬性,並按一下 [編輯]。
  3. 修改 [編輯屬性] 對話方塊中的欄位,以重新定義屬性。
  4. 如果 OID 字串是以屬性名稱為基礎,則每次變更名稱時就應該變更 OID。在表 9-1 中描述 OID。在表 9-2 中描述可用的語法。

  5. 完成編輯屬性後,按一下 [確定] 以儲存變更。

刪除屬性

使用主控台只可以刪除使用者定義的屬性。刪除屬性定義之前,您必須確定目錄中沒有任何項目目前正在使用此屬性,否則用戶端將無法存取該項目。

若要刪除屬性的模式定義:

  1. 在 Directory Server Console 最上層的 [配置] 標籤上,選取配置樹狀目錄中的 [模式] 節點,然後選取右面板中的 [屬性] 標籤。
  2. 在 [使用者定義的屬性] 表中,選取屬性,並按一下 [刪除]。
  3. 出現提示時,確認要刪除。
  4. 伺服器將立即刪除屬性。您無法復原此動作。


管理物件類別定義

Directory Server Console 也提供介面可檢視模式中的所有物件類別,也可以建立、編輯與刪除您自己的物件類別定義。

檢視物件類別

若要檢視有關所有目前定義物件類別的資訊:

  1. 在 Directory Server Console 最上層的 [配置] 標籤上,選取配置樹狀目錄中的 [模式] 節點,然後選取右面板中的 [物件類別] 標籤。
  2. 這個標籤包含模式中所有標準 (唯讀) 和使用者定義屬性的清單。

  3. 從任一個清單中選取要檢視的物件類別。
  4. 標籤中的其他欄位顯示有關選取物件類別的下列資訊:

    表 9-3 物件類別標籤的欄位 

    欄位

    描述

    必要的屬性

    包含必須出現在使用此物件類別之項目中的屬性清單。此清單包括繼承的屬性。

    允許的屬性

    包含可能出現在使用此物件類別之項目中的屬性清單。此清單包括繼承的屬性。

    父項

    父項可識別物件類別繼承其屬性和模式的物件類別。物件類別自動繼承其父項物件類別的必要及允許的屬性。

    OID

    物件類別的物件識別碼。OID 是字串,通常為含有小數點的十進位數字,可唯一識別模式物件。

    如需關於 OID 的詳細資料,或要為您的企業要求字首,請傳送郵件至 iana@iana.org 給 IANA (Internet Assigned Number Authority,網際網路編號中心),或瀏覽 IANA 網站,網址是 http://www.iana.org/

建立物件類別

如果要建立繼承另一個物件類別的數個物件類別,您必須先建立父項物件類別。如果新的物件類別將使用自訂屬性,您也必須先定義這些屬性。


備註

主控台只允許您建立模式物件類別。這些物件類別必須繼承自父項。若要定義輔助及抽象物件類別,您必須使用指令行公用程式。


若要在模式中加入您自己的物件類別定義:

  1. 在 Directory Server Console 最上層的 [配置] 標籤上,選取配置樹狀目錄中的 [模式] 節點,然後選取右面板中的 [物件類別] 標籤。
  2. 按一下 [建立] 以顯示 [建立物件類別] 對話方塊。
  3. 在文字欄位中輸入下列資訊以定義新的物件類別:
    • 名稱 - 輸入物件類別的唯一名稱。
    • 父項 - 選取要做為父項的現有物件類別。預設狀況下會選取 top,而且如果您的物件類別不是繼承其他任何物件類別,就必須使用此父項。對應的清單中會顯示繼承自父項及其父項的必要和允許的屬性。
    • 一般而言,如果您想要為使用者項目加入新屬性,其父項必須是 inetOrgPerson 物件類別。如果您想要為合併的項目加入新屬性,其父項通常是 organizationorganizationalUnit。如果您想要為群組項目加入新屬性,其父項通常是 groupOfNamesgroupOfUniqueNames

    • OID (選用) - 輸入物件類別的物件識別碼。在表 9-3 中描述 OID。如果不指定 OID,Directory Server 會自動使用 objectClassName-oid。請注意,為嚴格遵守 LDAP v3,您必須提供有效的數字 OID。
  4. 定義使用您的新物件類別的項目將包含的屬性:
    • 若要定義必須出現的屬性,請在 [可用的屬性] 清單中選取一或多個屬性,然後按一下 [必要的屬性] 方塊左側的 [加入] 按鈕。
    • 若要定義出現的屬性,請在 [可用的屬性] 清單中選取一或多個屬性,然後按一下 [允許的屬性] 方塊左側的 [加入] 按鈕。
    • 若要移除先前加入的屬性,請反白顯示任一個清單中的屬性,然後按一下對應的 [移除] 按鈕。您不可以移除繼承自父項物件類別的允許或必要的屬性。
  5. 在 [建立物件類別] 對話方塊中,按一下 [確定],以定義新的物件類別。它將出現在使用者定義的物件類別表中,而且現在您可以用此物件類別定義項目。

編輯物件類別

使用主控台只可以編輯使用者定義的物件類別。修改物件類別的定義之前,您必須確定目錄中沒有任何項目目前正在使用此物件類別,否則用戶端將無法存取該項目。

若要修改物件類別的模式定義:

  1. 在 Directory Server Console 最上層的 [配置] 標籤上,選取配置樹狀目錄中的 [模式] 節點,然後選取右面板中的 [物件類別] 標籤。
  2. 從 [使用者定義的物件類別] 清單中,選取要編輯的物件類別,並按一下 [編輯]。
  3. 修改 [編輯物件類別] 對話方塊的欄位,以重新定義您的物件類別。
  4. 您無法重新命名物件類別,也無法變更其 OID。若要修改這兩項,請刪除該物件類別,並建立新的物件類別。

    • 父項 - 選取要做為父項的現有物件類別。對應的清單中會顯示繼承自父項及其父項的必要和允許的屬性。
    • 若要定義必須出現的屬性,請在 [可用的屬性] 清單中選取一或多個屬性,然後按一下 [必要的屬性] 方塊左側的 [加入] 按鈕。
    • 若要定義出現的屬性,請在 [可用的屬性] 清單中選取一或多個屬性,然後按一下 [允許的屬性] 方塊左側的 [加入] 按鈕。
    • 若要移除先前加入的屬性,請反白顯示任一個清單中的屬性,然後按一下對應的 [移除] 按鈕。您不可以移除繼承自父項物件類別的允許或必要的屬性。
  5. 完成編輯物件類別後,按一下 [確定] 以儲存變更。

刪除物件類別

使用主控台只可以刪除使用者定義的物件類別。刪除物件類別定義之前,您必須確定目錄中沒有任何項目目前正在使用此物件類別,否則用戶端將無法存取該項目。

若要刪除物件類別的模式定義:

  1. 在 Directory Server Console 最上層的 [配置] 標籤上,選取配置樹狀目錄中的 [模式] 節點,然後選取右面板中的 [物件類別] 標籤。
  2. 在使用者定義的物件類別清單中,選取物件類別名稱,並按一下 [刪除]。
  3. 出現提示時,確認要刪除。
  4. 伺服器將立即刪除物件類別定義。您無法復原此動作。


複製模式定義

當您配置在兩部伺服器之間複製一或多個尾碼時,也會自動複製模式。這可確保所有複本都有完整、完全一樣的模式,以定義可複製到用戶的所有物件類別與屬性。因此,主機伺服器也包含主機模式。

若要在所有複本上強制模式,您必須在所有主機上啟用模式檢查。因為模式是在執行 LDAP 作業的主機上進行檢查,所以更新用戶時不需要檢查模式。為改善效能,複製機制在用戶複本上會跳過模式檢查。


備註

集線器和專屬用戶上不應該關閉模式檢查。模式檢查不會影響用戶的執行效能,所以應該保持開啟狀態,以表示複本內容符合其模式。


在用戶初始化期間,以及透過主控台或指令行工具修改模式時,主機伺服器會自動將模式複製給它的各個用戶。預設狀況下會複製整個模式,而且會建立還不存在用戶上的任何額外模式描述元素,並儲存在 99user.ldif 檔案中。

例如,假設主機伺服器在啟動時將模式定義放在 98mySchema.ldif 檔案中,然後您定義與其他伺服器 (可能是主機、集線器或專屬用戶) 的複製協議。隨後,當您從這個主機初始化複本時,複製的模式將包含來自 98mySchema.ldif 的定義,但模式會儲存在複本伺服器上的 99user.ldif 中。

在用戶初始化期間複製過模式之後,只要在主機上的 cn=schema 中修改模式,則整個模式也將會複製到用戶。因此,透過指令行公用程式或主控台對主機模式所做的任何修改都會複製到用戶。這些修改將儲存在主機的 99user.ldif 中,而且藉由上述的相同機制,它們也會儲存在用戶的 99user.ldif 中。

修改複製模式檔案

複製機制無法偵測您直接對包含模式的 LDIF 檔案所做的任何變更。因此,如果依修改模式檔案所述更新模式,則即使重新啟動主機,變更還是不會複製到用戶。

Directory Server 5.2 提供以下程序檔,可將模式檔案中的變更「推送」給用戶:

 

# ServerRoot/slapd-serverID/schema_push.pl

以下程序可用來修改主機伺服器上的模式檔案:

  1. 在模式目錄中,加入新的模式檔案,或修改現有的模式檔案:
  2. ServerRoot/slapd-serverID/config/schema

    只有安裝期間定義的系統使用者可寫入此目錄中的模式檔案。如需詳細資訊,請參閱修改模式檔案

  3. 如上所述,執行 schema_push.pl 程序檔。這個程序檔不會實際將模式「推送」給用戶,而是在模式檔案中寫入一個特殊的屬性,使得只要一載入模式檔案,就會立即複製模式。
  4. 重新啟動伺服器。伺服器將載入所有模式檔案,而且複製機制將複製新的模式到其用戶。

限制模式複製

依預設值,每當複製機制複製模式時,它會將整個模式傳給其用戶。但有兩種情況,不需要這種作法:

以下指令可用來限制模式複製,使得只複製使用者定義的模式:

ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:cn=config
changetype:modify
replace:nsslapd-schema-repl-useronly
nsslapd-schema-repl-useronly:on
^D

預設值 off 會在必要時複製整個模式。



上一頁      目錄      索引      下一頁     


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