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

Sun logo
Sun Java(TM) System Directory Server 5 2004Q2 管理指南 

第 2 章
管理目錄項目

本章討論如何使用 Directory Server Console 和 LDAP 指令行公用程式管理您的目錄內容。並且也描述如何使用選用的屬性加密功能儲存屬性,以及如何使用 DSML 存取您的目錄。在規劃您的目錄佈署時,應該描述自己的目錄所要包含的資料類型特徵。建立項目及修改預設結構前,請先閱讀《Directory Server Deployment Planning GuideChapter 2 的 "Planning and Accessing Directory Data"

本章假設您已瞭解了一些 LDAP 結構及其定義的物件類別和屬性知識。如需 Directory Server 所提供的結構及所有物件類別與屬性的定義簡介,請參閱《Directory Server Administration Reference》中的 "Object Class Reference""Attribute Reference" 各章。

您必須定義適當的存取控制指示 (ACI) 才能修改您的目錄。如需詳細資訊,請參閱第 6 章「管理存取控制」

本章包含下列章節:


組態項目

Directory Server 將所有的組態資訊儲存在下列檔案內:

ServerRoot/slapd-serverID/config/dse.ldif

此檔案使用 LDAP 資料交換格式 (LDIF)。LDIF 是項目、屬性及其值的文字表示方式,而且是 RFC2849 (http://www.ietf.org/rfc/rfc2849) 中描述的標準格式。dse.ldif 檔案中的 Directory Server 組態的組成有:

Directory Server 讓所有組態設定值都可透過 LDAP 進行讀寫。依預設值,目錄的 cn=config 分支只能由 Administration Server 中定義的目錄管理員 (directory administrator) 及目錄管理員 (directory manager) 存取。這些管理使用者可以檢視及修改組態項目,就如同其他任何目錄項目一樣。

您應該避免在 cn=config 項目下建立項目,因為這樣的項目會儲存在 dse.ldif 檔案內,而這個檔案不像普通項目的資料庫一樣具有高度調整性。因此,如果有許多項目 (特別是可能需要經常更新的項目) 儲存在 cn=config 下,可能會降低效能。然而,將特定的使用者項目,例如 [複製管理員] (供應商連結 DN) 項目儲存在 cn=config 下很有用,因為這樣可集中管理組態資訊。

使用主控台修改組態

建議您使用 Directory Server Console 最上層的 [組態] 標籤來修改組態。此標籤的面板與對話方塊提供以工作為基礎的控制項,可幫助您快速、有效率地設定組態。此外,主控台介面會為您管理組態的複雜性與相互依存性。

在本文件「使用主控台...」程序中會加以說明主控台的組態介面,這些程序說明如何使用 [組態] 標籤的面板與對話方塊完成特定的管理工作。介面本身會清楚指示儲存組態的方式以及重新啟動伺服器讓變更生效的時機。

從指令行修改組態

因為 cn=config 樹狀子目錄可透過 LDAP 存取,所以可以用 ldapsearchldapmodifyldapdelete 指令檢視及修改伺服器組態。cn=config 項目及其下所有項目都可利用「從指令行管理項目」中說明的程序與 LDIF 格式進行修改。

但是您必須了解這些項目的意義、其屬性的用途以及允許的值等。本文件的「從指令行...」程序中會解釋這些重要的考慮事項,該程序會舉例說明您可以設定的組態項目與屬性。如需所有組態項目與屬性的完整描述,包括允許值的範圍,請參閱《Directory Server Administration Reference》。

因此,從主控台修改組態會比從指令行修改更加容易。但是,有少數組態設定無法透過主控台進行,因此只提供指令行程序。您也可以撰寫使用指令行工具的指令檔,利用指令行程序將組態工作自動化。

修改 dse.ldif 檔案

dse.ldif 檔案包含伺服器啟動或重新啟動時將讀取及使用的組態。這個檔案的 LDIF 內容是 cn=config 項目及其樹狀子目錄。只有安裝期間所定義的系統使用者可讀寫此檔案。

直接編輯此檔案內容來修改組態比較容易出錯,因此不建議這種作法。您應該知道下列運作方式:


使用主控台管理項目

您可以用 Directory Server Console 上的 [目錄] 標籤及項目編輯器對話方塊個別加入、修改或刪除項目。如果要同時操作幾個項目,請參閱「使用主控台執行大量作業」

如需關於啟動 Directory Server Console 與瀏覽使用者介面的詳細資訊,請參閱「使用 Directory Server Console」

建立目錄項目

Directory Server Console 提供數個可建立目錄項目的自訂範本。每個範本是特定類型之物件類別的自訂編輯器。表 2-1 顯示每個自訂編輯器所用的物件類別。

表 2-1 項目範本與對應的物件類別 

範本

物件類別

使用者

inetOrgPerson (用於建立與編輯)
organizationalPerson (用於編輯)
person (用於編輯)

群組

groupOfUniqueNames 及其他可能用於動態群組與憑證群組的物件類別

組織單位

organizationalUnit

角色

nsRoleDefinition 及其他 (依選擇受管理、篩選或巢式角色而定)

服務類別

cosSuperDefinition 及其他 (依服務類別的類型而定)

密碼策略

passwordPolicy

參照

referral

這些自訂編輯器所包含的欄位代表所有強制屬性,以及個別物件類別常用的部分選用屬性。若要用這些範本建立項目,請依照「使用自訂編輯器建立項目」中的說明進行。若要建立任何其他類型的項目,請參閱「建立其他類型的項目」

使用自訂編輯器建立項目

  1. 在 Directory Server Console 最上層的 [目錄] 標籤上,展開樹狀目錄,以顯示要作為新項目父項的項目。
  2. 以滑鼠右鍵按一下父項,選擇 [新增] 功能表項目,再從子功能表中選擇項目類型:使用者、群組、組織單位、角色、服務類別、密碼策略或參照。或者,您可以在父項上按一下滑鼠左鍵以選擇父項,再從 [物件] > [新增] 功能表中選擇項目類型。出現您選擇之項目類型的自訂編輯器對話方塊。
  3. 自訂編輯器的左欄有一連串的標籤,每個標籤的欄位則顯示在右邊。依預設值,所有自訂編輯器開啟時會選擇最上層的 [使用者] 或 [一般] 標籤,上面包含新項目的名稱和說明欄位。

    例如,下圖顯示使用者項目的自訂編輯器:

    圖 2-1 Directory Server Console - 使用者項目的自訂編輯器
    標題為「建立新使用者」的視窗顯示輸入諸如名稱、使用者 ID、密碼、電話號碼和其他等使用者資訊的欄位。

  4. 在自訂編輯器的欄位中為您要提供的屬性輸入值。凡是欄位名稱旁有星號 (*) 的強制屬性都必須輸入值;其他欄位則可以保留空白。在允許多重值的欄位中,您可以按 Return 以分隔值。
  5. 如需各項目類型的自訂編輯器中有關特定欄位進一步的協助,請按一下 [說明] 按鈕。如需 [使用者] 與 [組織單位] 編輯器上 [語言] 標籤的說明,請參閱「設定語言支援的屬性」

    如需建立群組、角色及服務類別項目的進一步說明,請參閱第 5 章「管理身份和角色」。如需建立密碼策略的說明,請參閱第 7 章「管理使用者帳戶和密碼」。如需建立參照的說明,請參閱「設定參照」

  6. 按一下 [確定] 建立新的項目,並關閉自訂編輯器對話方塊,新項目出現在樹狀目錄中。
  7. 自訂編輯器對話方塊並不會為個別物件類別的所有選用屬性提供欄位。如果希望加入不顯示在自訂編輯器上的選用屬性,請依照「以標準編輯器修改項目」中的說明進行。

建立其他類型的項目

請依照以下步驟為任何不在表 2-1 中列出的物件類別建立項目。此程序也可用來建立目錄結構中已定義之任何自訂物件類別的項目:

  1. 在 Directory Server Console 最上層的 [目錄] 標籤上,展開樹狀目錄,以顯示要作為新項目父項的項目。
  2. 以滑鼠右鍵按一下父項,再從子功能表中選擇 [新增] > [其他] 項目。或者,您可以在父項上按一下滑鼠左鍵以選擇父項,再選擇 [物件] > [新增] > [其他] 功能表項目。
  3. 出現 [新增物件] 對話方塊。

  4. 在 [新增物件] 對話方塊的物件類別清單中,選擇定義新項目的物件類別,再按一下 [確定]。
  5. 如果選擇列在表 2-1 中的物件類別,將顯示對應的自訂編輯器 (參閱「使用自訂編輯器建立項目」)。在其他情況中,則均顯示標準編輯器。

  6. 建立新項目時,標準編輯器中會為您選擇的物件類別中所有必要的屬性各提供一個欄位。所有必要屬性都必須輸入值。有些欄位有標準的預留位置值,例如 New,您應該用對您的項目有意義的值取代預留位置值。
  7. 若要定義所選物件類別允許的其他屬性,您必須明確加入。若要為選用屬性輸入值:
    1. 按一下 [加入屬性] 按鈕以顯示允許的屬性清單。
    2. 從 [加入屬性] 對話方塊中選擇一或多個屬性,再按一下 [確定]。
    3. 在標準編輯器中新屬性名稱旁輸入值。
    4. 如需關於此對話方塊中其他控制項進一步的詳細資料,請參閱「以標準編輯器修改項目」

  8. 依照預設,會選擇其中一個必要屬性作為命名屬性,該必要屬性會出現在標準編輯器中所顯示的項目 DN 中。若要變更命名屬性:
    1. 按一下 [變更] 按鈕以顯示 [變更命名屬性] 對話方塊。
    2. 在屬性表中,選擇要用在新項目 DN 中的一或多個屬性旁的核取方塊。
    3. 在 [變更命名屬性] 對話方塊中按一下 [確定]。標準編輯器中的 DN 就會以選取的命名屬性顯示新的 DN。
  9. 在標準編輯器中按一下 [確定],以儲存新項目。
  10. 新項目在樹狀目錄中顯示為父項的子項。

用自訂編輯器修改項目

對於列在表 2-1 中的物件類別,您可以選擇使用對應的自訂編輯器或標準編輯器來編輯項目。使用自訂編輯器,可以很容易地存取最常用的欄位,而且介面會幫助您為複雜的屬性 (例如角色或服務類別定義中的屬性) 定義值。

標準編輯器可讓您對項目執行比較進階的作業,例如加入物件類別、加入允許的屬性以及處理多重值屬性等。若要以標準編輯器編輯項目,請參閱「以標準編輯器修改項目」


備註

自訂編輯器可用來編輯列在表 2-1 中的物件類別。至於包含其他結構物件類別的項目 (例如從 inetorgperson 繼承得來的自訂類別),則只能透過標準編輯器進行編輯。

若項目除了列示的物件類別之外還包含輔助物件類別,則該項目可以用自訂編輯器進行管理。但自訂編輯器中不顯示輔助類別所定義的任何屬性。如需輔助物件類別的定義,請參閱《Directory Server Administration Reference》Chapter 8 的 "Object Classes"


啟動自訂編輯器

若要編輯表 2-1 中所列物件類別的項目:

  1. 在 Directory Server Console 最上層 [目錄] 標籤上,展開樹狀目錄,以顯示要編輯的項目。
  2. 連按兩下項目。有幾個替代動作也可以啟動項目的自訂編輯器:
    • 以滑鼠右鍵按一下項目,再選擇 [以自訂編輯器編輯] 項目。
    • 以滑鼠左鍵按一下以選擇項目,再選擇 [物件] > [以自訂編輯器編輯] 功能表項目。
    • 以滑鼠左鍵按一下以選擇項目,再使用鍵盤快速鍵 Control-P。
    • 顯示項目的物件類別所使用的自訂編輯器。例如,圖 2-1 中顯示 [使用者] 項目的自訂編輯器。

  3. 依預設值,所有自訂編輯器開啟時會選擇最上層的 [使用者] 或 [一般] 標籤,上面包含新項目的名稱和說明欄位。針對您要修改的屬性,在自訂編輯器的欄位中編輯或移除值。欄位名稱旁以星號 (*) 標示的屬於強制屬性,您可以修改但無法移除這類屬性的值。其他欄位則可以保留空白。在允許多重值的欄位中,您可以按 Return 以分隔數值。
  4. 選取左欄中的其他標籤,以修改對應面板上的值。如需各項目類型的自訂編輯器中有關特定欄位進一步的協助,請按一下 [說明] 按鈕。

    如需 [使用者] 與 [組織單位] 編輯器上 [語言] 標籤的說明,請參閱「設定語言支援的屬性」。在第 7 章「管理使用者帳戶和密碼」中說明了使用者與群組項目的 [帳戶] 標籤上的各欄位。為「Directory Server 同步化服務」提供了 [NT 使用者] 與 [Posix 使用者] 標籤,如需詳細資料,請洽詢 Sun 代表。

    如需修改群組、角色與服務類別項目的進一步說明,請參閱第 5 章「管理身份和角色」;如需修改密碼策略的說明,請參閱第 7 章「管理使用者帳戶和密碼」。如需修改參照的說明,請參閱「設定參照」

  5. 按一下 [確定] 儲存項目的變更,並關閉自訂編輯器對話方塊。如果修改了命名屬性 (例如使用者項目的一般名稱),樹狀目錄中將反映該變更。

設定語言支援的屬性

使用者與組織單位項目的自訂編輯器都提供國際化目錄的語言支援。

  1. 「啟動自訂編輯器」所述開啟您的項目的自訂編輯器。
  2. 按一下左欄中的 [語言] 標籤。
  3. 對於使用者項目,您可以用下拉式清單設定喜好的語言。
  4. 對於使用者與組織單位項目,您可以在清單顯示的任何語言的指定欄位中輸入本地化的值。選擇語言,然後以該語言輸入一或多個值。定義本地化值之後,清單中的語言名稱會以粗體顯示。
  5. 某些語言也有發音欄位,您可以在其中輸入本地化值的語音表示法。

  6. 按一下 [確定] 儲存項目的變更,並關閉自訂編輯器對話方塊。

以標準編輯器修改項目

標準編輯器可根據登入主控台所用的連結 DN,允許您查看項目的所有可讀取屬性,並編輯可寫入屬性。它可讓您加入並移除屬性、設定多重值屬性以及管理項目的物件類別。加入屬性時,您可以定義二進位屬性與語言支援的子類別。

啟動標準編輯器

若要為目錄中的任何項目啟動標準編輯器:

  1. 在 Directory Server Console 最上層的 [目錄] 標籤上,展開樹狀目錄,以顯示要編輯的項目。
  2. 以滑鼠右鍵按一下項目,再選擇 [以標準編輯器編輯] 項目。有幾個替代動作也可以啟動項目的自訂編輯器:
    • 以滑鼠左鍵按一下以選擇項目,再選擇 [物件] > [用標準編輯器編輯] 功能表項目。
    • 如果項目未列在表 2-1 中,則連按兩下項目。依預設值,沒有自訂編輯器的物件類別會使用標準編輯器。
    • 顯示如下圖所示的標準編輯器。

      圖 2-2 Directory Server Console - 標準編輯器
      標題為「標準編輯器 - uid=bjensen,ou=People,dc=example,dc=com」的視窗顯示適用於此使用者項目和控制項以便修改的屬性欄位。

      在標準編輯器中,項目的屬性依字母順序排列,而且每個屬性值均各有一個文字方塊。所有屬性,包括唯讀與作業屬性都會顯示出來。右邊的控制項可讓您修改編輯器中的顯示,以及編輯屬性清單。

  3. 或者,您可以用 [檢視] 方塊中的控制項修改標準編輯器的顯示:
    • 選擇 [顯示屬性名稱] 選項以檢視屬性最初在結構中定義的名稱。屬性清單將重新排列,以依名稱字母順序排列。
    • 選擇 [顯示屬性描述] 選項將屬性依替代名稱排列 (如果曾在結構中定義替代名稱)。替代名稱通常可以更清楚地描述屬性。屬性清單將重新排列,以依照描述字母順序排列。
    • 取消選取 [僅顯示含值的屬性] 核取方塊可列出項目的物件類別中由結構明確允許的所有屬性。如果項目包含 extensibleObject 物件類別,所有屬性都是隱含允許的,但不會列出來。預設狀況下只顯示有定義值的屬性。
    • 選擇或取消選取 [顯示 DN] 核取方塊,以切換是否在屬性清單下顯示項目的辨別名稱。
    • [重新整理] 按鈕將存取伺服器,以根據項目目前的內容更新所有屬性的值。

    • 小心

      按一下 [重新整理] 按鈕將立即移除您在標準編輯器中所做的任何修改,不會儲存它們。


下列各節描述設定屬性值、管理物件類別及變更項目命名屬性的控制方式。

修改屬性值

  1. 「啟動標準編輯器」所述開啟標準編輯器。
  2. 捲動屬性清單,並按一下要修改的值。
  3. 選取的屬性會反白顯示,而且在包含選取值的文字欄位內會出現編輯游標。

  4. 使用滑鼠與鍵盤將文字編輯成所要的值。您可以用系統剪貼簿在此欄位中複製、剪下及貼上文字。
  5. 如果無法編輯文字欄位的內容,表示屬性是唯讀的,或您沒有修改屬性的寫入權限。

  6. 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。

編輯多重值屬性

若屬性在目錄結構中定義為多重值,則該屬性在標準編輯器中可以有多個欄位。如需更多資訊,請參閱第 9 章「延伸目錄結構」

若要為多重值屬性加入新值:

  1. 「啟動標準編輯器」所述開啟標準編輯器。
  2. 捲動屬性清單,並按一下屬性或其中一個值。選取的屬性會反白顯示,並啟動 [加入值] 按鈕。如果未啟動此按鈕,表示選取的屬性不是定義為多重值,或屬性是唯讀的,或是您沒有修改屬性的寫入權限。
  3. 按一下 [加入值] 按鈕。清單中屬性名稱旁出現新的空白文字欄位。
  4. 在新的文字欄位中輸入此屬性的新值。您可以用系統剪貼簿在此欄位中複製、剪下及貼上文字。
  5. 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。

若要移除多重值屬性的值:

  1. 「啟動標準編輯器」所述開啟標準編輯器。
  2. 捲動屬性清單,並按一下要移除的特定值。選取的屬性會反白顯示,並啟動 [刪除值] 按鈕。如果未啟動此按鈕,表示選取的屬性是唯讀的,或您沒有修改屬性的寫入權限。
  3. 按一下 [刪除值] 按鈕。就會移除包含選取值的文字欄位。
  4. 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。

加入屬性

在您可將屬性加入項目中之前,該項目必須已經包含需要或允許屬性的物件類別。如需詳細資訊,請參閱「管理物件類別」第 9 章「延伸目錄結構」

若要將屬性加入項目中:

  1. 「啟動標準編輯器」所述開啟標準編輯器。
  2. 確定已核取 [僅顯示含值的屬性] 選項。
  3. 按一下 [加入屬性] 按鈕以顯示包含屬性清單的對話方塊。此清單只包含針對項目所定義之物件類別允許的屬性。
  4. 在 [加入屬性] 對話方塊中選擇要加入的一或多個屬性。
  5. 或者,您可以從對話方塊上方的下拉式清單中選擇下列兩個子類型或其中之一:
    • [語言] 子類型 ─ 此子類型可用來指出屬性值所用的語言。您可以用不同語言將屬性加入許多次,以在目錄中儲存本地化資訊。

      或者,您可以在語言之外再選擇 [拼音] 子類型以表示此屬性的值包含指定語言中數值的對等發音。

    • 二進位子類型 ─ 指定二進位子類型至屬性,表示值應透過 LDAP 以二進位資料 (資料的不透明區塊) 傳輸,而不管其實際語法。應小心使用此選項。它的設計主要是針對沒有 LDAP 字串表示法的複雜語法,例如 userCertificate。請勿使用其值已作為二進位的屬性之二進位子類型。
  6. 選擇屬性及其選用子類型後按一下 [確定]。屬性會依字母順序加入標準編輯器的清單中。
  7. 在新屬性名稱旁的空白文字欄位中輸入此屬性的新值。您可以用系統剪貼簿在此欄位中複製、剪下及貼上文字。
  8. 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。

移除屬性

若要從項目中移除屬性及其所有值:

  1. 「啟動標準編輯器」所述開啟標準編輯器。
  2. 捲動屬性清單,並按一下要移除的屬性名稱。選取的屬性會反白顯示,並啟動 [刪除屬性] 按鈕。如果未啟動此按鈕,表示選取的屬性是唯讀的,或您沒有修改屬性的寫入權限。

  3. 備註

    標準編輯器允許您移除可為此屬性定義之物件類別所需的屬性。如果嘗試儲存沒有必要屬性的項目,伺服器將回應物件類別違規。請確認您的項目包含它定義之所有物件類別的必要屬性。


  4. 按一下 [刪除屬性] 按鈕。就會移除屬性及其所有文字欄位值。
  5. 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。

管理物件類別

項目的物件類別是由多重值的 objectclass 屬性所定義。修改此屬性時,標準編輯器會提供特殊的對話方塊,幫助您管理定義的物件類別。

若要為項目加入物件類別:

  1. 「啟動標準編輯器」所述開啟標準編輯器。
  2. 捲動屬性清單,並選擇 objectclass 屬性。就會啟動 [加入值] 按鈕。如果未啟動此按鈕,表示您沒有權限,無法修改此項目的物件類別。
  3. 按一下 [加入值] 按鈕。
  4. 出現 [加入物件類別] 對話方塊。此視窗顯示您可加入項目中的物件類別清單。

  5. 請選擇您想要加入此項目中的一或多個物件類別,再按一下 [確定]。您所選取的物件類別即顯示在 objectclass 屬性值清單中。
  6. 如果新物件類別擁有還不存在項目中的必要屬性,標準編輯器將自動幫您加入。您必須為所有必要屬性提供值。
  7. 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。

若要從項目中移除物件類別:

  1. 「啟動標準編輯器」所述開啟標準編輯器。
  2. 捲動屬性清單,並按一下要移除之 objectclass 屬性的特定值。如果結構允許移除選取的物件類別,而且您有權限可修改此項目的物件類別,就會啟動 [刪除值] 按鈕。
  3. 按一下 [刪除值] 按鈕。就會移除特定的物件類別。
  4. 當您移除物件類別時,標準編輯器將自動移除其餘物件類別不允許或必要的任何屬性。如果移除命名屬性之一,將自動選擇另一個命名屬性,而且主控台將通知您確認此變更。

  5. 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。

重新命名項目

命名屬性是出現在項目辨別名稱 (DN) 中的屬性值配對。命名屬性是從項目現有的屬性中選擇而來。修改命名屬性即可重新命名項目:

  1. 「啟動標準編輯器」所述開啟標準編輯器。
  2. [變更] 按鈕旁的文字會顯示此項目目前的命名屬性。如果選擇 [顯示 DN] 核取方塊,您可以在屬性值清單下看到 DN 中的這些屬性。

  3. 按一下 [變更] 按鈕。如果未啟動此按鈕,表示您沒有權限,無法重新命名此項目。
  4. 出現 [變更命名屬性] 對話方塊。

  5. 捲動屬性清單,選擇要放在此項目的 DN 中的屬性。選擇或取消選取屬性旁的核取方塊,以分別在命名屬性中加入或移除屬性。
  6. 在同一父項下各項目的 DN 必須是唯一的。因此,您必須選擇其值或數值組合是唯一的命名屬性。如果 DN 不是唯一的,伺服器將拒絕儲存其項目。在慣例上,代表使用者的所有項目應使用相同的命名屬性。

  7. 在 [變更命名屬性] 對話方塊中按一下 [確定]。標準對話方塊中的顯示會顯示此項目的新 DN。
  8. 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。

刪除目錄項目

若要使用 Directory Server Console 來刪除項目:

  1. 在 Directory Server Console 最上層的 [目錄] 標籤上,展開樹狀目錄,以顯示要移除的項目。
  2. 您也可以選擇樹狀子目錄的根節點,以刪除目錄的整個分支。

  3. 以滑鼠右鍵按一下項目,再選擇 [刪除] 項目。數個替代動作也會刪除項目:
    • 以滑鼠左鍵按一下以選擇項目,再選擇 [編輯] > [刪除] 功能表項目。如果要將此項目貼到目錄的其他位置,您也可以使用 [編輯] > [剪下] 功能表項目。
    • 以滑鼠左鍵按一下以選擇項目,再使用鍵盤快速鍵 Control-D。
    • 當您選擇 [檢視] > [佈局] 選項以在 Directory Server Console 右面板中顯示子項後,您可以用 Control+按一下或 Shift+按一下的按鍵組合選擇多個要刪除的項目。

  4. 確認您要刪除項目,或樹狀子目錄及其所有內容。
  5. 伺服器可立即刪除一或多個項目。沒有復原。如果刪除多個項目,主控台將顯示資訊對話方塊,列出刪除項目數及發生的任何錯誤。

使用主控台執行大量作業

您可以用 LDIF 檔案加入多個項目、執行混合作業或匯入整個尾碼。若要使用 LDIF 檔案及 Directory Server Console 加入項目:

  1. 用以上各節所顯示的語法在 LDIF 檔案中定義項目或作業。如果只要加入項目或初始化尾碼,就不需要 changetype 關鍵字,而且 LDIF 檔案可以只包含項目。如果要執行混合的作業,每個 DN 其後都應該跟著一個 changetype,而且視需要加上特定作業或屬性值。
  2. 從 Directory Server 主控台匯入 LDIF 檔案。如需更多資訊,請參閱「匯入 LDIF 檔案」
  3. 如果要執行混合的作業,務必取消選取 [匯入 LDIF] 對話方塊上的 [僅加入],讓伺服器會執行所有 LDIF 作業。


從指令行管理項目

ldapmodifyldapdelete 指令行公用程式提供加入、編輯與刪除目錄項目的完整功能。您可以用它們管理伺服器的組態項目和使用者項目中的資料。這兩個公用程式也可用來撰寫指令檔,以執行一或多個目錄的大量管理工作。

ldapmodifyldapdelete 指令用在本書各處的程序中。下列各節描述執行這些管理程序所需的所有基本作業。更進一步的功能、所有的指令行選項及這些指令的傳回值說明於《Directory Server Resource Kit Tools Reference》中的 Chapter 4 的 "ldapmodify"Chapter 5 的 "ldapdelete"

指令行公用程式的輸入始終採用 LDIF,您可以直接從指令行輸入,或透過輸入檔提供。下節提供有關 LDIF 輸入的資訊,隨後各節描述每種修改類型的 LDIF。

提供 LDIF 輸入

為指令行公用程式提供 LDIF 輸入時,針對指令行輸入、特殊字元、結構檢查及項目的順序與大小等,有一些特殊考慮事項必須記住。所有目錄資料使用 Unicode 的 UTF-8 編碼儲存。因此您提供的任何 LDIF 輸入也必須以 UTF-8 編碼。LDIF 格式的詳細描述在《Directory Server Administration Reference》的 Chapter 7 "LDAP Data Interchange Format Reference"中。


備註

請勿在 LDIF 屬性值字串的末尾不小心留下空格。Directory Server 讀取以空格作為結束的屬性值時,它以 base64 對值進行編碼。


在指令行中止 LDIF 輸入

ldapmodifyldapdelete 公用程式讀取您在指令後輸入的 LDIF 陳述式跟從檔案讀取是完全一樣的方式。當您完成提供輸入時,請輸入自己的 Shell 會辨識為檔案結束 (end of file,EOF) 逸出順序的字元。

以下範例顯示如何中止 ldapmodify 指令的輸入:

prompt> ldapmodify -h host -p port -D bindDN -w password
dn:cn=Barry Nixon,ou=People,dc=example,dc=com
changetype:modify
delete:telephonenumber
^D
prompt>

為了簡化及可攜性,本文件中的範例不顯示提示或 EOF 順序。

使用特殊字元

在指令行輸入指令選項時,您可能必須忽略一些對指令行解譯器具有特殊意義的字元,如空格 ( )、星號 (*)、反斜線 (\) 等。例如,許多 DN 包含空格,要用在大部分 UNIX Shell 中,您必須將值置於雙引號 ("") 內:

-D "cn=Barbara Jensen,ou=Product Development,dc=example,dc=com"

依指令行解譯器而定,您應該使用單引號或雙引號做此用途。如需更多資訊,請參閱您的作業系統文件。

此外,如果您使用包含逗號的 DN,必須以反斜線 (\) 忽略逗號。例如:

-D "cn=Patricia Fuentes,ou=People,o=example.com Bolivia\,S.A."

請注意,ldapmodify 指令後的 LDIF 陳述式是由指令解譯,而非由 Shell 解譯,因此不需要特殊的考慮事項。

結構檢查

加入或修改項目時,所使用的屬性必須是項目中的物件類別必要或允許的屬性,而且您的屬性必須包含與定義語法相符的值。

修改項目時,Directory Server 會在整個項目上執行結構檢查,而不僅在被修改的屬性上進行檢查。因此,如果項目中的任何物件類別或屬性不符合結構,作業都可能會失敗。如需詳細資訊,請參閱「結構檢查」

排列 LDIF 項目的順序

在加入項目的任何 LDIF 文字順序中,不論是在指令行或在檔案中,父項都必須列在子項前。如此一來,當伺服器處理 LDIF 文字時,就會先建立父項再建立子項。

例如,如果要在 People 樹狀子目錄中建立不存在目錄中的項目,必須先列出代表 People 容器的項目,再列出樹狀子目錄中的項目:

dn:dc=example,dc=com
dn:ou=People,dc=example,dc=com
...
People subtree entries
...
dn:ou=Group,dc=example,dc=com
...
Group subtree entries
...

您可以使用 ldapmodify 指令行公用程式建立目錄中的任何項目,但是尾碼或子尾碼的根部是特殊項目,必須與必要的組態項目產生關聯。若要加入新的根尾碼或子尾碼及其相關的組態項目,請參閱「從指令行建立尾碼」

管理大型項目

加入或修改含有極大型屬性值的項目前,伺服器可能必須經過配置才能接受這類項目。為保護伺服器以防負載過重,用戶端預設為僅能傳送不超過 2 MB 的資料。

如果加入的項目大於此限制,或修改的屬性值大於此限制,伺服器將拒絕執行作業,並立即關閉連線。例如,在項目的一或多個屬性中如果有多媒體內容等二進位資料,就可能超過此限制。

而且,定義大型靜態群組的項目可能包含太多成員,以致於其表示法超過限制。但基於效能的原因,並不建議使用這樣的群組,您應該考慮重新設計目錄結構。如需更多資訊,請參閱「管理群組」

若要修改伺服器對用戶端傳送的資料強制的大小限制:

  1. cn=config 項目的 nsslapd-maxbersize 屬性設定新值。
  2. 若要使用主控台執行此動作,請以管理員或目錄管理員的身份登入,並根據「以標準編輯器修改項目」中的程序編輯 cn=config 項目。將 nsslapd-maxbersize 屬性設為用戶端可一次傳送的最大位元數。
  3. 若要從指令行執行此動作,請使用下列指令:
  4. ldapmodify -h host -p port -D "cn=Directory Manager" -w password
    dn:cn=config
    changetype:modify
    replace:nsslapd-maxbersize
    nsslapd-maxbersize:sizeLimitInBytes
    ^D

    如需詳細資訊,請參閱《Directory Server Administration Reference》Chapter 2 的 "nsslapd-maxbersize"

  5. 「啟動和停止目錄伺服器」所述,重新啟動伺服器。

錯誤處理

指令行工具會循序處理 LDIF 輸入中的所有項目或修改。當第一個錯誤發生時,預設的運作方式是會停止處理。使用 -c 選項可不理會任何錯誤繼續處理所有輸入。您會在工具的輸出中看到錯誤狀況。

除了上述考慮事項之外,常見的錯誤包括:

如需關於錯誤狀況及迴避方式的詳細資訊,請參閱《Directory Server Resource Kit Tools Reference》中的 Chapter 4 "ldapmodify"Chapter 5 "ldapdelete"

使用 ldapmodify 加入項目

您可以用 ldapmodify-a 選項在目錄中加入一或多個項目。下列範例建立一個結構項目以包含使用者,然後再建立使用者項目:

ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn:ou=People,dc=example,dc=com
objectclass:top
objectclass:organizationalUnit
ou:People
description:Container for user entries

dn:uid=bjensen,ou=People,dc=example,dc=com
objectclass:top
objectclass:person
objectclass:organizationalPerson
objectclass:inetorgPerson
uid:bjensen
givenName:Barbara
sn:Jensen
cn:Babs Jensen
telephoneNumber: (408) 555-3922
facsimileTelephoneNumber: (408) 555-4000
mail:bjensen@example.com
userPassword:clearPassword

-D-w 選項分別指定有權建立這些項目之使用者的連結 DN 和密碼。-a 選項包含 LDIF 中即將加入的所有項目。然後以 DN 及屬性值指定每個項目,項目之間使用一個空白行。ldapmodify 公用程式會在輸入每個項目後建立,並報告任何錯誤。

在慣例上,項目的 LDIF 以下列順序列出屬性:

輸入 userpassword 屬性的值時,請指定純文字版的密碼。伺服器會將這個值加密,並且只儲存加密的值。請務必要限制讀取權限,以保護 LDIF 檔案中的純文字密碼。

您也可以在指令行上使用不需要 -a 選項的 LDIF 替代格式。這種格式的優點是您可以將加入項目及修改項目的陳述式結合在一起,如下一節所示。

ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:ou=People,dc=example,dc=com
changetype:add
objectclass:top
objectclass:organizationalUnit
ou:People
description:Container for user entries

dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:add
objectclass:top
objectclass:person
objectclass:organizationalPerson
objectclass:inetorgPerson
uid:bjensen
givenName:Barbara
sn:Jensen
cn:Barbara Jensen
telephoneNumber: (408) 555-3922
facsimileTelephoneNumber: (408) 555-4000
mail:bjensen@example.com
userPassword:clearPassword

changetype:add 關鍵字指出應以後續的所有屬性建立指定 DN 的項目。所有其他選項和 LDIF 慣例都一樣。

在兩個範例中,您都可以用 -f filename 選項從檔案讀取 LDIF,而不從終端機輸入讀取。LDIF 檔案包含的格式必須跟使用 -a 選項時的終端機輸入格式相同。

使用 ldapmodify 修改項目

使用 changetype:modify 關鍵可加入、取代或移除現有項目中的屬性及其值。當您指定 changetype:modify 時,您也必須提供一或多個變更作業,以指出項目的修改方式。以下範例顯示三個可能的 LDIF 變更作業:

dn:entryDN
changetype:modify
add:attribute
attribute
:value
...
-
replace:attribute
attribute
:newValue
...
-
delete:attribute
[attribute:value]
...

在行中使用破折號 (-) 可分隔對同一項目的作業,空白行可分隔不同項目的作業群組。您也可以為每個作業指定數個 attribute:value 配對,將它們同時加入、取代或刪除。

加入屬性值

以下範例顯示如何使用相同的 add LDIF 語法,為現有的多重值屬性及尚不存在的屬性加入值:

ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
add:cn
cn:Babs Jensen
-
add:mobile
mobile: (408) 555-7844
mobile: (408) 555-7845

若有下列狀況,此作業可能會失敗,而且伺服器將傳回錯誤:

使用二進位屬性子類型

attribute;binary 子類型表示屬性值應透過 LDAP 以二進位資料 (資料的不透明區塊) 傳輸,而不管它們的實際語法。此子類型的的設計主要是針對沒有 LDAP 字串表示法的複雜語法,例如 userCertificate。二進位子類型應僅用於此用途。

您可以在 ldapmodify 指令所用的任何 LDIF 陳述式中為屬性名稱加入適當的子類型。

若要輸入二進位值,您可以直接在 LDIF 文字中輸入,或從另一個檔案中讀取。以下範例顯示從檔案讀取的 LDIF 語法:

ldapmodify -h host -p port -D "cn=Directory Manager" -w password
version: 1
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
add: userCertificate;binary
userCertificate;binary:< file:///path/certFile

為了使用 < 語法指定檔案名稱,LDIF 陳述式的開頭行必須是 version:1。當 ldapmodify 處理此陳述式時,它會將屬性設為從指定檔案的完整內容讀取而來的值。

加入有語言子類型的屬性

屬性的語言與拼音子類型用於指定本地化的值。當您為屬性指定語言子類型時,該子類型會以下列方式加入屬性名稱:

attribute;lang-CC

其中 attribute 是現有的屬性類型,CC 是兩個字母的國碼,以指定語言。您可以選擇為語言子類型加入拼音子類型,以指定本地化值的對等發音。在此況狀下,屬性名稱變成:

attribute;lang-CC;phonetic

若要在含子類型的屬性上執行作業,您必須明確配合其子類型。例如,如果要修改含 lang-fr 語言子類型的屬性值,您必須以下列方式在修改作業中包含 lang-fr

ldapmodify -h -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
replace:homePostalAddress;lang-fr
homePostalAddress;lang-fr:34\, avenue des Champs-Elyses

修改屬性值

以下範例顯示如何使用 LDIF 中的 replace 語法修改單值屬性和多重值屬性的所有值:

ldapmodify -h -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
replace:sn
sn:Morris
-
replace:cn
cn:Barbara Morris
cn:Babs Morris

使用 replace 語法時,將移除指定屬性目前所有的值,並加入所有指定值。

刪除屬性值

以下範例顯示如何完全刪除屬性,以及只刪除多重值屬性中的一個值:

ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
delete:facsimileTelephoneNumber
-
delete:cn
cn:Babs Morris

使用 delete 語法卻不指定 attribute:value 配對時,將移除屬性的所有值。如果指定 attribute:value 配對,則只會移除該值。

修改多重值屬性的一個值

為了用 ldapmodify 指令修改多重值屬性的一個值,您必須依下列範例所示執行兩個作業:

ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
delete:mobile
mobile: (408) 555-7845
-
add:mobile
mobile: (408) 555-5487

使用 ldapmodify 重新命名項目

重新命名項目,就是修改它的相對辨別名稱 (RDN),這是項目 DN 中最左邊的 attribute=value 配對。此屬性稱為命名屬性,而且在項目的各屬性之間它也必須以相同的值存在。

重新命名項目時,您無法變更 DN 的其他任何部分,而導致項目移到不同的樹狀子目錄。若要將項目完全移到不同的分支,您必須用舊項目的屬性在其他樹狀子目錄中建立新項目,再刪除舊項目。

而且,您無法重新命名有任何子項的項目,這是因為父項的 RDN 用在其子項的 DN 中,而 DN 中的所有項目都必須存在所致。若要移動整個樹狀目錄,您必須在新位置重新建立該樹狀目錄。

使用 changetype:modrdn 關鍵字可用 LDIF 陳述式重新命名項目。以下範例將重新命名 Barbara Morris 的 uid 命名屬性:

ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modrdn
newrdn:uid=bmorris
deleteoldrdn: 1

newrdn 行用 attribute=value 語法指定新的命名屬性。deleteoldrdn 行指示是否應同時將原本的命名屬性從項目中移除 (1 代表是,0 代表否)。不論任一種狀況,新的命名屬性也都會加入項目。

使用 ldapdelete 刪除項目

使用 ldapdelete 指令行公用程式可從目錄中刪除項目。此公用程式會連結到目錄伺服器,並刪除 DN 所指定的一或多個項目。您必須提供有權刪除指定項目的連結 DN。

就如同父項不能重新命名一樣的道理,您也不能刪除有子項的項目。LDAP 通訊協定禁止子項不再有父項存在的狀況發生。例如,您無法刪除組織單位項目,除非先刪除屬於該組織單位的所有項目。


小心

請勿刪除尾碼 o=NetscapeRoot。Administration Server 使用此尾碼儲存已安裝 Sun Java System 伺服器的相關資訊。刪除此尾碼可能會迫使您重新安裝包括 Directory Server 在內的所有 Sun Java System 伺服器。


在下列範例中,組織單位中只有一個項目,所以我們刪除該項目,再刪除父項:

ldapdelete -h host -p port -D "cn=Directory Manager" -w password
uid=bjensen,ou=People,dc=example,dc=com
ou=People,dc=example,dc=com

使用 ldapmodify 刪除項目

您也可以使用 ldapmodify 公用程式的 changetype:delete 關鍵字刪除項目。凡是以上所述使用 ldapdelete 時的限制,在這埵P樣適用。使用 LDIF 語法刪除項目的優點是您可以在一個 LDIF 檔案中執行混合的作業。

以下範例將執行與先前範例相同的刪除作業:

ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:delete

dn:ou=People,dc=example,dc=com
changetype:delete


設定參照

您可以使用參照告訴用戶端應用程式在本機無法取得資訊時應聯絡哪部伺服器。參照是指到遠端尾碼或項目的指標,Directory Server 會將此指標傳回給用戶端,而不傳回結果。接下來,用戶端必須重新於參照中指定的遠端伺服器上執行作業。在三種狀況下會發生此重新導向作業:

不論是哪一種狀況,一個參照就是一個 LDAP URL,其中包含另一部伺服器的主機名稱、連接埠號碼及選用的 DN。如需詳細資訊,請參閱《Directory Server Administration Reference》中的 Chapter 6 "LDAP URL Reference"。如需關於如何在目錄佈署中使用參照的概論,請參閱《Directory Server Deployment Planning Guide》中的 Chapter 5 "Distribution, Chaining, and Referrals"

下列各節描述定義目錄的預設參照及定義智慧型參照的程序。

設定預設參照

當用戶端應用程式在 DN 上所提交的作業不包含在目錄所維護的任何尾碼內時,便會將預設參照傳回給該用戶端應用程式。預設參照有時候稱為全域參照,因為它們適用於目錄中的所有尾碼。伺服器將傳回定義的所有尾碼,但傳回的順序則未定義。

使用主控台設定預設參照

  1. 在 Directory Server Console 最上層的 [組態] 標籤上,選擇位於組態樹狀目錄根部的伺服器節點,然後選擇右面板中的 [網路] 標籤。
  2. 選擇 [傳回參照] 核取方塊,並在文字欄位中輸入 LDAP URL。或者,按一下 [建構 URL],在指引下完成 LDAP URL 的定義。指到安全連接埠的 LDAP URL 範例如下:
  3. ldaps://east.example.com:636/dc=example,dc=com

    您可以用空格與引號分隔,輸入多個參照 URL,如下:

    "ldap://east.example.com:389" "ldap://backup.example.com:389"

  4. 按一下 [儲存] 讓變更立即生效。

從指令行設定預設參照

使用 ldapmodify 指令行公用程式可在目錄組態檔的 cn=config 項目中加入或取代一或多個預設參照。例如:

ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn:cn=config
changetype:modify
replace:nsslapd-referral
nsslapd-referral:ldap://east.example.com:389
nsslapd-referral:ldap://backup.example.com:389

您不必重新啟動伺服器。

建立智慧型參照

智慧型參照可讓您將目錄項目或樹狀目錄對映到特定 LDAP URL。使用智慧型參照,您可以將用戶端應用程式指到特定伺服器,或特定伺服器上的特定項目。

通常,智慧型參照會指到另一部伺服器上有相同 DN 的實際項目。但是您可以定義智慧型參照,指到同一伺服器或不同伺服器上的任何項目。例如,您可以用下列 DN 定義項目:

uid=bjensen,ou=People,dc=example,dc=com

做為智慧型參照,指到 east.example.com 伺服器上的另一個項目:

cn=Babs Jensen,ou=Sales,o=east,dc=example,dc=com

目錄使用智慧型參照的方式符合 RFC 2251 (http://www.ietf.org/rfc/rfc2251.txt) 的 4.1.11 節中指定的標準。

使用主控台建立智慧型參照

  1. 在 Directory Server Console 最上層的 [目錄] 標籤上,展開樹狀目錄,以顯示要做為智慧型參照父項的項目。
  2. 以滑鼠右鍵按一下父項,選擇 [新增] > [參照] 功能表項目。或者,您可以在父項上按一下滑鼠左鍵以選擇父項,再選擇 [物件] > [新增] > [參照] 功能表項目。
  3. 出現參照項目的自訂編輯器對話方塊。

  4. 在編輯器的 [一般] 標籤上,輸入參照的名稱,並從下拉式清單中選擇其命名屬性。名稱將是您選擇的命名屬性的值。或者,您可以為此參照輸入描述字串。
  5. 在編輯器的 [URL] 標籤上,按一下 [建構] 按鈕以定義智慧型參照的 URL。在出現的對話方塊中輸入 LDAP URL 的元素。
  6. URL 的元素包括儲存參照項目之目錄伺服器的主機名稱和 LDAP 連接埠號碼,以及伺服器上目標項目的 DN。依預設值,目標 DN 與智慧型參照項目的 DN 相同。但是目標 DN 可以是任何尾碼、樹狀子目錄或分葉項目。

  7. 在 LDAP URL 建構對話方塊中,按一下 [確定]。URL 就顯示在新參照文字方塊中。
  8. 按一下新參照文字方塊旁的 [加入],將參照加入清單。
  9. 您可以定義多個 URL,做為此項目傳回的參照。使用 [建構]、[加入]、[刪除] 與 [變更] 按鈕可建立與管理 [參照清單]。
  10. 按一下 [參照驗證] 按鈕可顯示對話方塊,您可以在其中設定 Directory Server Console 在追蹤參照到遠端伺服器時將用來連結的憑證。您可以定義存取伺服器時將使用的連結 DN 與密碼。指向同一伺服器的所有參照都將使用相同的認證。
  11. 使用 [加入]、[編輯] 與 [刪除] 按鈕可管理伺服器與對應認證清單。完成時按一下 [確定]。
  12. 在參照的自訂編輯器中,按一下 [儲存] 儲存您的智慧型參照項目。
  13. 在主控台的樹狀目錄中,您應該看到目標樹狀子目錄或項目取代智慧型參照項目。如果智慧型參照項目有黃色警告圖示,表示 URL 或認證無效。請連按兩下項目,等看到 [參照錯誤] 時按一下 [繼續],並修改 [URL] 或 [參照驗證] 以修正錯誤。

從指令行建立智慧型參照

若要建立智慧型參照,請用 referralextensibleObject 物件類別建立項目。referral 物件類別允許 ref 屬性,此屬性應該要包含 LDAP URL。extensibleObject 物件類別可讓您使用任何結構屬性做為命名屬性,以便能夠對映到目標項目。

例如,定義下列項目傳回智慧型參照,而不傳回 uid=bjensen 項目:

ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
objectclass:top
objectclass:extensibleObject
objectclass:referral
uid:bjensen
ref:ldap://east.example.com/cn=Babs%20Jensen,ou=Sales,
 o=east,dc=example,dc=com


備註

伺服器會忽略 LDAP URL 中空格之後的任何資訊。因此在預計作為參照的任何 LDAP URL 中,您必須改用 %20,而不是使用空格。必須忽略其他特殊字元。


定義智慧型參照後,對 uid=bjensen 項目的修改實際上會在其他伺服器的 cn=Babs Jensen 項目上執行。ldapmodify 指令將自動追蹤參照,例如:

ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:replace
replace:telephoneNumber
telephoneNumber: (408) 555-1234

為了修改智慧型參照,您必須使用 ldapmodify-M 選項,例如:

ldapmodify -M -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:replace
replace:ref
ref:ldap://east.example.com/cn=Babs%20Jensen,ou=Marketing,
 o=east,dc=example,dc=com


加密屬性值

屬性加密可以保護儲存在新目錄中的敏感性資料。屬性加密允許您指定以加密格式儲存之項目的特定屬性。這可防止資料於儲存在資料庫檔案、備份資料以及匯出的 LDIF 檔案時被讀取。

屬性值可利用此項功能,在將其儲存於 Directory Server 資料庫前,先行加密,以及在傳回到用戶端前再行解密回原始值。在用戶端和 Directory Server 之間傳送時,您必須使用存取控制項,防止用戶端存取沒有權限的屬性和 SSL 以加密屬性。如需一般資料安全性,特別是屬性加密的結構式概論,請參閱《Directory Server Deployment Planning Guide》中的 Chapter 7 "Access Control, Authentication, and Encryption"

只有在伺服器上配置並啟用 SSL 後,才會啟用屬性加密。不過,依據預設並不會加密任何屬性。系統會在尾碼層級中設定屬性加密。這是指將出現在每一個項目之尾碼的屬性加密。如果您想要將整個目錄中的某個屬性加密,必須啟用每一個尾碼中此屬性的加密。


小心

屬性加密會影響與尾碼相關的所有的資料及索引檔。如果修改現有尾碼的加密組態,您必須首先匯出其內容,變更組態,然後再重新匯入內容。主控台將幫助您執行這些步驟。

此外,在開啟加密時,您必須手動刪除可能仍舊包含未加密值的資料庫快取檔案。

您應該在新尾碼中載入或建立資料前,先啟用所有加密的屬性。


如果您選擇加密的屬性若會將某些項目當成命名屬性使用,則出現在 DN 中的值將不會加密,但儲存在項目中的值將會加密。

您可以選擇 userPassword 屬性進行加密,但這並沒有實際的安全性效益,除非密碼需以純文字儲存,如 DIGEST-MD5 SASL 驗證一樣。如果密碼策略中已為密碼設定加密機制,則更進一步的加密所能增加的安全性有限,還會影響每一次連結作業的效能。

在儲存中,加密的屬性以表示使用加密演算法的加密標籤作為開端。使用 DES 加密演算法的加密屬性會顯示如下:

{CKM_DES_CBC}3hakc&jla+=snda%

使用主控台配置屬性加密

  1. 在 Directory Server Console 上選擇 [組態] 標籤,展開 [資料] 節點,並選擇您想要加密屬性值的尾碼。選擇右面板中的 [屬性加密] 標籤。
  2. 此標籤包含一份表格,列出此尾碼目前所有加密屬性的名稱和加密結構。

  3. 若要為屬性啟用加密:
    1. 按一下 [加入屬性] 按鈕以顯示屬性清單。
    2. 從清單中選擇要加密的屬性,再按一下 [確定]。屬性會加入表格的 [屬性名稱] 欄。
    3. 從屬性名稱旁的下拉式清單中,選擇此屬性的 [加密結構]。
  4. 若要使屬性不再加密,請從表格中選擇屬性名稱,再按一下 [刪除屬性] 按鈕。
  5. 按一下 [儲存]。系統會提示您在變更組態前,先將尾碼內容匯出至 LDIF 檔案。
  6. 按一下 [匯出尾碼] 開啟匯出對話方塊,或按一下 [繼續],不需要匯出即可修改屬性加密組態。然後新的組態就會儲存起來。
  7. 如果您尚未匯出尾碼,您必須立即執行此動作以儲存其內容。如果尾碼包含加密的屬性,而且您計劃在下個步驟中使用此 LDIF 檔案重新初始化尾碼,這些屬性在匯出的 LDIF 中可以保持加密狀態。

    現在將出現提示,要您從 LDIF 檔案初始化尾碼。

  8. 現在按一下 [初始化尾碼] 開啟初始化對話方塊,然後再輸入 LDIF 檔案名稱載入目錄。
  9. 如果在上個步驟中匯出含加密屬性的尾碼,您現在必須用該檔案初始化,因為一旦尾碼重新初始化後,加密值將無法回復。在載入及建立索引的同時,指定屬性的所有值都將會加密。

    如果您不想在此時初始化尾碼,請按一下 [關閉]。您可於稍後再使用「匯入資料」中所描述的程序來匯入資料。

  10. 如果組態已改為會加密一或多個屬性,而且這些屬性在匯入作業之前曾經有值,資料庫快取中可能依舊看得到部分未加密的值。若要清除資料庫快取:
    1. 「啟動和停止目錄伺服器」所述停止 Directory Server。
    2. 以 root 或具有管理員權限的身份,將資料庫快取檔案從檔案系統中刪除:
    3. ServerRoot/slapd-serverID/db/__db.*

    4. 再次啟動 Directory Server。伺服器將自動建立新的資料庫快取檔案。

從指令行配置屬性加密

  1. 如果要配置屬性加密的尾碼上有任何項目,您必須先將該尾碼的內容匯出到 LDIF 檔案。如需更多資訊,請參閱「匯出日期」
  2. 如果尾碼包含加密的屬性,而且您計劃在步驟 5 中使用此 LDIF 檔案重新初始化尾碼,這些屬性在匯出的 LDIF 中可以保持加密狀態。

  3. 若要為屬性啟用加密,請使用 ldapmodify 指令加入下列組態項目:
  4. ldapmodify -a -h host -p port -D cn=Directory Manager -p password
    dn:cn=attributeName, cn=encrypted attributes, cn=databaseName,
     cn=ldbm database, cn=plugins, cn=config
    objectclass:top
    objectclass:dsAttributeEncryption
    cn: attributeName
    dsEncryptionAlgorithm:cipherName

    其中 attributeName 是要加密的屬性類型名稱,databaseName 是對映到尾碼的資料庫符號名稱,而 cipherName 是下列其中之一:

    • ckm_des_cbc - DES 區塊加密
    • ckm_des3_cbc - 三重 DES 區塊加密
    • ckm_rc2_cbc - RC2 區塊加密
    • ckm_rc4 - RC4 資料流加密
  5. 若要使屬性不再加密,請使用 ldapmodify 指令修改下列組態項目:
  6. ldapmodify -h host -p port -D cn=Directory Manager -p password
    dn:cn=attributeName, cn=encrypted attributes, cn=databaseName,
     cn=ldbm database, cn=plugins, cn=config
    changetype:modify
    replace:dsEncryptionAlgorithm
    dsEncryptionAlgorithm:clearText

    其中 attributeName 是要加密的屬性類型名稱,而 databaseName 是對映到尾碼的資料庫符號名稱。


    備註

    請勿刪除屬性加密組態項目。下次初始化尾碼時會自動移除該項目。


  7. 如果組態已改為會加密一或多個屬性,而且這些屬性在匯入作業之前曾經有值,資料庫快取中可能依舊看得到部分未加密的值。若要清除資料庫快取:
    1. 「啟動和停止目錄伺服器」所述停止 Directory Server。
    2. 以 root 或具有管理員權限的身份,將資料庫快取檔案從檔案系統中刪除:
    3.          ServerRoot/slapd-serverID/db/__db.*

    4. 再次啟動 Directory Server。伺服器將自動建立新的資料庫快取檔案。在快取再次填滿之前,此尾碼中的作業效能可能會稍微受到影響。
  8. 「匯入資料」所述用 LDIF 檔案初始化尾碼。
  9. 在載入檔案及建立對應索引的同時,指定屬性的所有值都將會加密。


維護參考的完整性

參考的完整性是一種 Plug-in 機制,可確保維護相關項目之間的關係。許多屬性類型 (例如群組成員的屬性) 中包含另一個項目的 DN。參考的完整性可確保移除項目時,包含其 DN 的所有屬性也會一併移除。

例如,如果移除了目錄的使用者項目,而且已經啟用參考的完整性,則伺服器也會移除使用者為成員之一之所有群組的使用者。如果沒有啟用參考的完整性,管理員必須手動從群組中移除使用者。如果您將 Directory Server 與其他需要用到使用者與群組管理的 Sun Java System 產品進行整合時,這會是一項重要功能。

參考的完整性操作方法

當啟用參考的完整性 Plug-in 時,其會在刪除或重新命名作業之後,立即執行特定屬性上的完整性更新。依據預設,參考的完整性 Plug-in 是停用的。

每當您刪除或重新命名目錄中的使用者或群組項目時,會將作業記錄在參考的完整性日誌檔中:

ServerRoot/slapd-serverID/logs/referint

經過特定時間 (即更新間隔) 後,伺服器會在啟用參考的完整性之所有屬性上執行搜尋,並使搜尋出來的項目與出現在日誌檔中已刪除或已修改項目的 DN 互相符合。如果日誌檔顯示已經刪除項目,則對應的屬性也會刪除。如果日誌檔顯示已經變更項目,則對應的屬性值也會相對地修改。

若啟用參考完整性 Plug-in 的預設組態,每次執行刪除或重新命名作業後,它會立即在 memberuniquememberownerseeAlsonsroledn 屬性上執行完整性更新。但是您可以依照您的需要配置參考完整性 Plug-in 的運作方式:

配置參考的完整性

使用下列程序可從 Directory Server Console 啟用或停用參考的完整性,以及配置 Plug-in:

從主控台上配置參考完整性

  1. 在 Directory Server Console 最上層的 [組態] 標籤上,展開 [Plug-in] 節點,再選擇 [referential integrity postoperation] Plug-in。
  2. Plug-in 的設定顯示在右面板中。

  3. 選擇 [啟用 Plug-in] 核取方塊以啟用 Plug-in,清除核取方塊以停用 Plug-in。
  4. 設定 [引數 1] 的值,以修改更新的間隔秒數。常用的值為:
    • 0 - 每次作業後立即更新這是預設值。請仔細考慮,每次刪除和修改作業後立即執行參考完整性檢查會對伺服器效能產生顯著的影響。
    • 90 - 每 90 秒更新一次
    • 3600 - 每 1 小時更新一次
    • 10,800 - 每 3 小時更新一次
    • 28,800 - 每 8 小時更新一次
    • 86,400 - 每天更新一次
    • 604,800 - 每周更新一次
    • 依完整性和整體效能的折衷設定正值。

  5. 設定 [引數 2] 的值,成為參考完整性日誌檔的絕對路徑。
  6. [引數 3] 用不到,但必須存在。

  7. 受參考完整性 Plug-in 監控的屬性由 [引數 4] 開始列起。按一下 [加入] 與 [刪除] 按鈕可管理此清單,及加入您自己的屬性。

  8. 備註

    為獲得最佳效能,由參考完整性 Plug-in 更新的屬性也應該編製索引。如需相關資訊,請參閱第 10 章「編製目錄資料索引」


  9. 按一下 [儲存] 以儲存您的變更。
  10. 變更生效前,您必須重新啟動 Directory Server。

將參考的完整性用於複製

在複製環境中,存在某些使用參考完整性 Plug-in 的限制:

若要在複製拓樸中配置參考的完整性 Plug-in:

  1. 確定已配置所有複本的組態,而且已定義所有複製協議。
  2. 決定將為其維護參考完整性的屬性組。並決定主機伺服器上所要使用的更新間隔。
  3. 使用相同的屬性組及相同的更新間隔啟用所有主機伺服器上的參考完整性 Plug-in。此程序會在「配置參考的完整性」中描述。
  4. 請確定所有用戶伺服器上參考的完整性 Plug-in 都是停用的。

將參考完整性用於繼承複製

從 4.x 主機向 5.x 使用者複製時,啟用參考完整性,您必須在 4.x 主機上重新配置參考完整性 Plug-in,將參考完整性變更寫入 4.x 變更記錄。此操作使參考完整性變更被複製。如果沒有重新配置 Plug-in,參考完整性無法正常運作

在以下環境中重新配置參考完整性 Plug-in:

  1. 停止 4.x 伺服器。
  2. 開啟 ServerRoot/slapd-ServerID/config/ 中的 slapd.ldbm.conf 檔案。
  3. 尋找以下面句子開始的行
  4. plugin postoperation on "referential integrity postoperation"

  5. 透過將屬性清單前的引數由 0 變更為 1來修改此行。
  6. 例如,將

    plugin postoperation on "referential integrity postoperation" "ServerRoot/lib/referint-plugin.dll" referint_postop_init 0 "ServerRoot/slapd-serverID/logs/referint" 0 "member" "uniquemember" "owner" "seeAlso"

    變更為

    plugin postoperation on "referential integrity postoperation" "ServerRoot/lib/referint-plugin.dll" referint_postop_init 0 "ServerRoot/slapd-serverID/logs/referint" 1 "member" "uniquemember" "owner" "seeAlso"

  7. 儲存 slapd.ldbm.conf 檔案。
  8. 重新啟動伺服器。
  9. 從 4.x 供應商重新初始化 5.x 使用者。


搜尋目錄

您可以使用任何 LDAP 用戶端找出目錄中的項目。大部份用戶端提供某種搜尋介面,讓您搜尋目錄和擷取項目資訊。

在您目錄中設定的存取控制會決定搜尋結果。一般使用者通常不會「看到」目錄的太多內容,而且目錄管理員擁有存取包括組態的所有資料之完整權限。

搜尋有 ldapsearch 的目錄

您可以使用 ldapsearch 指令行公用程式找出和擷取目錄項目。請注意,本節中描述的 ldapsearch 公用程式不是 Solaris 平台提供的公用程式,但是 Directory Server Resource Kit 的一部分。如需有關公用程式的詳細資訊,請參閱《Directory Server Resource Kit Tools Reference》。

此公用程式以指定使用者身份 (通常是辨別名稱) 和密碼開啟與伺服器的連線,並且根據搜尋篩選器找出項目。搜尋範圍可以包括單一項目、項目的直接子項目、或是整個樹狀目錄或樹狀子目錄。

搜尋以 LDIF 格式傳回的結果。

ldapsearch 指令行格式

使用 ldapsearch 時,您必須使用下列格式輸入指令:

ldapsearch [optional_options] [search_filter] [optional_list_of_attributes]

其中

使用特殊字元

使用 ldapsearch 指令行公用程式時,您可能必須指定一些對指令行解譯器具有特殊意義的字元,(例如空格 [ ]、星號 [*]、反斜線 [\] 等)。指定特殊字元時,將值置於引號 (「」) 內。例如:

-D "cn=Charlene Daniels,ou=People,dc=example,dc=com"

依指令行解譯器而定,使用單引號或雙引號做此用途。如需詳細資訊,請參閱您的 Shell 說明文件。

常用的 ldapsearch 選項

以下列出了最常用的 ldapsearch 指令行選項。如果您指定含有空格 [ ] 的值,值應該置於雙引號之間,例如 -b "ou=groups, dc=example,dc=com"

-b

指定搜尋的起點。這指定的值必須是目前存在於資料庫中的辨別名稱。如果 LDAP_BASEDN 環境變數已設定為基礎 DN,則此選項為可選項。

此選項中指定的值應該置於雙引號中。例如:

-b "cn=Charlene Daniels, ou=People, dc=example,dc=com"

-D

指定對伺服器進行驗證所使用的辨別名稱。如果您的伺服器支援匿名存取,則此選項為可選項。如果已指定,則此值必須是 Directory Server 確認的 DN,而且也必須有搜尋項目的權限。例如:

-D "uid=cdaniels, dc=example,dc=com"

-h

在安裝 Directory Server 的機器上,指定主機名稱或 IP 位址。如果未指定主機,則 ldapsearch 使用 localhost。例如 -h myServer

-l

指定等待完成搜尋請求的最大秒數。無論在這堳定何值,ldapsearch 絕不會等候比伺服器 nsslapd-timelimit 屬性所允許的時間更長 (持續搜尋除外)。如需有關持續搜尋的詳細資訊,請參閱《Directory Server Resource Kit Tools Reference》中的 Chapter 3 "ldapsearch"

例如 -l 300nsslapd-timelimit 屬性的預設值是 3,600 秒 (1 小時。)

-p

指定 Directory Server 使用的 TCP 連接埠號碼。例如 -p 5201。預設值為 389,使用 SSL 選項時為 636。

-s

指定搜尋的範圍。範圍可能是其中之一:

  • base - 只搜尋在 -b 選項中指定,或由 LDAP_BASEDN 環境變數定義的項目。
  • one - 只搜尋 -b 選項中指定的項目下一層子項。只搜尋子項目,未搜尋 -b 選項中指定的實際項目。
  • sub - 搜尋在 -b 選項中指定的項目及其所有的子項。也就是說,在 -b 選項中識別的點開始執行樹狀子目錄搜尋。這是預設值,

-w

指定與在 -D 選項中指定的辨別名稱有關的密碼。如果您沒有指定此選項,則使用匿名存取。例如 -w diner892

-x

指定在伺服器而不是用戶端上排序搜尋結果。如果您想要根據相符規則排序,例如使用國際搜尋等,這個選項很有用。一般而言,在伺服器端排序比在用戶端快,雖然伺服器端排序使用的是伺服器資源。

-z

指定回應搜尋要求時要傳回的項目數最大值。例如 -z 1000

一般而言,無論這堳定何值,ldapsearch 絕不會傳回比伺服器的 nsslapd-sizelimit 屬性所允許數量還要多的項目。但在使用此指令行引數時,您可以連結為根 DN 以覆寫此限制。連結為根 DN 時,此選項預設為零 (0)。nsslapd-sizelimit 屬性的預設值是 2,000 個項目。

如需有關所有 ldapsearch 公用程式選項的詳細資訊,請參閱《Directory Server Resource Kit Tools Reference

ldapsearch 範例

在下一組範例中進行以下假設:

傳回所有項目

假定提供先前資訊,下列呼叫將在目錄中傳回所有項目:

ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
 -b "dc=example,dc=com" -s sub "(objectclass=*)"

"(objectclass=*)" 是符合目錄中任何項目的搜尋篩選器。

指定指令行上的搜尋篩選器

您可以直接在指令行上指定搜尋篩選器。如果您這樣做,請確定將篩選器放在引號中 (「篩選器」)。同時,請勿指定 -f 選項。例如:

ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
 -b "dc=example,dc=com" "(cn=Charlene Daniels)"

搜尋根 DSE 項目

根 DSE 是一個特殊項目,含有與目前伺服器實例有關的資訊,例如所支援尾碼、可用驗證機制等的清單。您可以透過提供「」搜尋基礎搜尋此項目。同時,必須指定 base 的搜尋範圍和 "(objectclass=*)" 的篩選器。例如:

ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
 -b "" -s base "(objectclass=*)"

搜尋結構項目

Directory Server 將所有目錄伺服器結構儲存在特殊 cn=schema 項目中。此項目含有關於為您的目錄伺服器定義的每個物件類別和屬性資訊。

您可以按如下方式檢查此項目內容:

ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
 -b "cn=schema" -s base "(objectclass=*)"


備註

為了達到高度的一致性,給定項目的結構次要項目位置由 subschemaSubentry 操作屬性指定。在這一版本的 Directory Server 中,此屬性值始終為 cn=schema


使用 LDAP_BASEDN

若要使搜尋更容易,您可以使用 LDAP_BASEDN 環境變數設定搜尋基礎。這樣做可讓您省略使用 -b 選項指定搜尋基礎 (如需有關設定環境變數的資訊,請參閱作業系統的說明文件)。

通常會將 LDAP_BASEDN 設定成目錄的尾碼值。由於目錄尾碼和目錄中的根或最上層項目相等,這樣會使所有的搜尋從目錄的根項目開始。

例如,如果已將 LDAP_BASEDN 設定為 dc=example,dc=com,您可以使用下列的指令行呼叫搜尋 (cn=Charlene Daniels)

ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
 "(cn=Charlene Daniels)"

在此範例中,使用 sub 的預設範圍,因為 -s 選項不用於指定範圍。

顯示屬性的子集

ldapsearch 指令以 LDIF 格式傳回所有搜尋結果。依預設值,ldapsearch 傳回項目的辨別名稱,以及所有您可以讀取的屬性。您可以設定目錄存取控制,這樣就可以只讀取任何指定目錄項目上的屬性子集。只有操作屬性未傳回。如果想要傳回操作屬性作為搜尋操作的結果,您必須在搜尋指令中明確地指定它們。如需有關操作屬性的詳細資訊,請參閱《Directory Server Administration Reference》中的 Chapter 11 "Operational Attributes"

假設您不想要看到搜尋結果傳回的所有屬性。您可以在搜尋篩選器之後立刻在指令行上指定想要的屬性,將傳回的屬性限制在某些特定的屬性範圍內。例如,若要顯示目錄中每個項目的 cnsn 屬性,請使用以下指令:

ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
 "(objectclass=*)" sn cn

此範例假設您以 LDAP_BASEDN 設定搜尋基礎。

搜尋多重值屬性

搜尋時,Directory Server 不一定依排序順序傳回多重值屬性。例如,假設您想要搜尋 cn=config 上的組態屬性,在變更生效之前需要重新啟動伺服器。

ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
 -b cn=config "(objectclass=*)" nsslapd-requiresrestart

傳回下列結果:

dn:cn=config
nsslapd-requiresrestart:cn=config:nsslapd-port
nsslapd-requiresrestart:cn=config:nsslapd-secureport
nsslapd-requiresrestart:cn=config:nsslapd-plugin
nsslapd-requiresrestart:cn=config:nsslapd-changelogdir
nsslapd-requiresrestart:cn=config:nsslapd-changelogsuffix
nsslapd-requiresrestart:cn=config:nsslapd-changelogmaxentries
nsslapd-requiresrestart:cn=config:nsslapd-changelogmaxage
nsslapd-requiresrestart:cn=config:nsslapd-db-locks
nsslapd-requiresrestart:cn=config:nsslapd-return-exact-case
nsslapd-requiresrestart:cn=config,cn=ldbm database,cn=plugins,
  cn=config:nsslapd-allidsthreshold
nsslapd-requiresrestart:cn=config,cn=ldbm database,cn=plugins,
  cn=config:nsslapd-dbcachesize
nsslapd-requiresrestart:cn=config,cn=ldbm database,cn=plugins,
  cn=config:nsslapd-dbncache
nsslapd-requiresrestart:cn=config,cn=ldbm database,cn=plugins,
  cn=config:nsslapd-directory
nsslapd-requiresrestart:cn=encryption,cn=config:nssslsessiontimeout
nsslapd-requiresrestart:cn=encryption,cn=config:nssslclientauth
nsslapd-requiresrestart:cn=encryption,cn=config:nssslserverauth
nsslapd-requiresrestart:cn=encryption,cn=config:nsssl2
nsslapd-requiresrestart:cn=encryption,cn=config:nsssl3
...

如這堜狴隉Ansslapd-requiresrestart 屬性有多個值。這些值沒有依排序順序。如果您開發需要多值屬性 (按排序順序排列) 的應用程式,請確定您的應用程式會執行此排序。

搜尋時使用用戶端驗證

此範例顯示使用者 cdaniels 使用用戶端驗證搜尋目錄︰

ldapsearch -h myServer -p 636 -b "dc=example,dc=com"
 -N "cdanielsscertname" -Z -W certdbpassword
 -P /home/cdaniels/certdb/cert.db "(givenname=Richard)"

LDAP 搜尋篩選器

搜尋篩選器為搜尋操作選取要傳回的項目。它們是最常與 ldapsearch 指令行公用程式搭配使用的篩選器。使用 ldapsearch 時,您可以使用檔案分隔行上的每個篩選器,在檔案中放置多重搜尋篩選器,或者可以直接在指令行上指定搜尋篩選器。

例如,下列篩選器指定搜尋一般名稱 Lucie Du Bois:

(cn=Lucie Du Bois)

此搜尋篩選器傳回所有含一般名稱 Lucie Du Bois 的項目。一般名稱值的搜尋與大小寫無關。

一般名稱屬性有和語言標籤相關的值時,會傳回所有值。因此下列兩個屬性都符合此篩選器:

cn:Lucie Du Bois

cn;lang-fr:Lucie Du Bois

搜尋篩選語法

搜尋篩選器的基本語法是:

(attribute operator value)

例如:

(buildingname>=alpha)

在此範例中,buildingname 是屬性,>= 是運算子,而 alpha 是值。您也可以定義使用不同屬性與布林運算子組合的篩選器。

下列各節對搜尋篩選器有詳細的描述:

使用搜尋篩選器中的屬性

搜尋項目時,您可以指定與該項目類型有關的屬性。例如,搜尋人員項目時,您可以使用 cn 屬性搜尋有特定一般名稱的人員。

人員項目的屬性範例可能包含:

如需列出與項目類型有關的屬性,請參閱Directory Server Administration Reference

使用搜尋篩選器中的運算子

表 2-2 中列出了可以在搜尋篩選器中使用的運算子:

表 2-2
搜尋篩選運算子 

搜尋類型

運算子

描述

相等

=

傳回含有完全符合指定值的屬性之項目。例如 cn=Bob Johnson

子字串

=string*
string

傳回含有指定子字串的屬性之項目。例如:

cn=Bob*
cn=*Johnson
cn=*John*
cn=B*John

(星號 (*) 表示零 (0) 或更多字元。)

大於或等於

>=

傳回含有大於或等於指定值的屬性之項目。例如:

buildingname >= alpha

小於或等於

<=

傳回含有小於或等於指定值的屬性之項目。例如:

buildingname <= alpha

存在

=*

傳回含有指定屬性的一或多個值之項目。例如:

cn

telephonenumber=*

manager=*

近似

~=

傳回含有指定屬性的項目,該指定屬性擁有的值幾乎相當於搜尋篩選器中指定的值。例如:

cn~=suret

l~=san fransico

可能傳回

cn=sarette

l=san francisco

近似運算子是一個實驗性的運算子,而且只能和英語字串一起使用。它不能和非 ASCII 的字串使用,例如 Ja 或 Zn 等。

存在延伸搜尋至 dn 屬性 (例如 cn:dn:=John),以及提供國際化搜尋支援的延伸運算子。

使用複合搜尋篩選器

如下所示,使用字首表示法中表示的布林運算子組合多種搜尋篩選器元件:

(Boolean-operator(filter)(filter)(filter)...}

其中 Boolean-operator 是列在表 2-3 中的任何一個布林運算子。

布林運算子可以組合和巢居在一起以形成複雜運算式,例如:

(Boolean-operator(filter)(Boolean-operator(filter)(filter)))

可以與搜尋篩選器一起使用的布林運算子包括:

表 2-3
搜尋篩選布林運算子 

運算子

符號

描述

AND

 &

要使陳述式為真,則所有指定的篩選器必須為真。
例如:

(&(filter)(filter)(filter)...)

OR

 |

要使陳述式為真,則至少有一個指定的篩選器必須為真。
例如:

(|(filter)(filter)(filter)...)

NOT

 !

要使陳述式為真,則指定的篩選器不能為真。只有一個篩選器受到 NOT 運算子的影響。例如:

(!(filter))

布林運算式的評估順序如下:

使用檔案指定搜尋篩選器

您可以將搜尋篩選器輸入檔案,而不是輸入指令行中。這樣做時,在檔案中的分隔行上指定每個搜尋篩選器。ldapsearch 指其在檔案中出現的順序執行每一次搜尋。

例如,如果檔案包含:

(sn=Daniels)
(givenname=Charlene)

然後 ldapsearch 先找出所有包含姓氏 Daniels 的項目,然後再找出有指定名稱 Charlene 的所有項目。如果找到都符合這兩個搜尋準則的項目,則傳回項目兩次。

例如,假設您在名為 searchdb 的檔案中指定之前的搜尋篩選器,而且使用 LDAP_BASEDN 設定搜尋基礎。下列傳回所有符合任一搜尋篩選器的項目:

ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
 -f searchdb

您可以使用指定想要加入搜尋行末端的屬性名稱以限制傳回的屬性組。例如,下列的 ldapsearch 指令兩種搜尋都執行,但是只傳回 DN 和每個項目的 givennamesn 屬性:

ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
 -f searchdb sn givenname

在搜尋篩選器中指定含逗號的 DN

當搜尋篩選器內的 DN 含有作為值其中一部分的逗點時,您必須以反斜線 (\) 忽略掉該逗號。例如,若要尋找在 example.com Bolivia, S.A. 樹狀子目錄中的每一個人,請使用下列指令:

ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password -s base -b "o=example.com Bolivia\, S.A.,dc=example,dc=com" "(objectclass=*)"

搜尋篩選器範例

下列搜尋項目的篩選器含有管理員屬性的一個或多個值。這也稱為存在搜尋:

(manager=*)

下列搜尋項目的篩選器含有共用的名稱 Ray Kultgen。這也稱為相等搜尋:

(cn=Ray Kultgen)

下列篩選器傳回所有項目,這些項目包括含有子字串 X.500 的描述屬性:

(description=*X.500*)

下列篩選器傳回所有組織單位是 Marketing,以及描述欄位不含子字串 X.500 的項目:

(&(ou=Marketing)(!(description=*X.500*)))

下列篩選器傳回所有組織單位是 Marketing,而且管理員是 Julie Fulmer 或 Cindy Zwaska 的所有項目

(&(ou=Marketing)(|(manager=cn=Julie Fulmer,ou=Marketing,
 dc=example,dc=com)(manager=cn=Cindy Zwaska,ou=Marketing,
 dc=example,dc=com)))

下列篩選器傳回不代表人員的所有項目:

(!(objectClass=person))

請注意,之前的篩選器有負面的效能影響,而且應該作為複雜搜尋的一部分使用。下列篩選器傳回所有不代表人員和一般名稱類似 printer3b 的所有項目:

(&(cn~=printer3b)(!(objectClass=person)))

搜尋操作屬性

如果想要傳回操作屬性作為搜尋操作的結果,您必須在搜尋指令中明確地指定它們。

ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
 "(objectclass=*)" aci

若要擷取除了明確指定的操作屬性以外的規則屬性,請指定操作屬性除外的「*」。例如:

ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
 "(objectclass=*)" aci *


使用 DSMLv2 存取目錄

下列範例指出如何使用 DSML 要求存取和搜尋目錄。如需有關 DSMLv2 標準的 DSML 相關屬性和資訊的完整清單,請參閱《Directory Server Administration Reference》的 Chapter 3 "Frontend Plugin Attributes"

本節包含下列範例:

請注意,這些範例中的 content-length: 標頭含有 DSMLv2 要求的精確長度。為了使這些範例正常運作,請確定您使用的編輯器遵照這些內容長度,或是您可以適當地修改內容長度。

空匿名 DSML 「Ping」要求

依預設值停用 DSML 前端。如需有關如何啟用它的資訊,請參閱「啟用 DSML 要求」。若要檢查是否啟用 DSML 前端,如代碼範例 2-1 所示傳送空 DSML 批次要求:

代碼範例 2-1
空匿名 DSML 要求

POST /dsml HTTP/1.1
content-length: 451
HOST:hostMachine
SOAPAction: ""
Content-Type:text/xml
Connection:close

<?xml version=’1.0’ encoding=’UTF-8’?>
<soap-env:Envelope
   xmlns:xsd=’http://www.w3.org/2001/XMLSchema’
   xmlns:xsi=’http://www.w3.org/2001/XMLSchema-instance’
   xmlns:soap-env=’http://schemas.xmlsoap.org/soap/envelope/’>

   <soap-env:Body>
      <batchRequest
          xmlns=’urn:oasis:names:tc:DSML:2:0:core’           requestID=’Ping!’>
          <!-- empty batch request -->
      </batchRequest>
   </soap-env:Body>
</soap-env:Envelope>

此 DSML 要求的第一段含有連接很多 HTTP 標頭的 HTTP 方法行 (POST /dsml HTTP/1.1)。HTTP 方法行指定 HTTP 方法要求和 DSML 前端使用的 URL。POST 是 DSML 前端接受的唯一 HTTP 方法要求。/dsml URL 是 Directory Server 的預設 URL,但可以由任何其他有效的 URL 配置。接著的 HTTP 標頭指定 DSML 要求的剩餘詳細資訊。

要求的其餘部分是 SOAP/DSML 區段。DSML 要求以 XML 前言標頭開始。

<?xml version=’1.0’ encoding=’UTF-8’?>

這堳定必須以 UTF-8 字元集編碼的要求。標頭後面接著含有強制加入 XML 結構、XML 結構執行個體和 SOAP 名稱空間的強制範圍和主體元素。

DSML 批次要求元素標記 DSML 批次要求的開始,而且後面隨即接著強制加入 DSMLv2 名稱空間:

xmlns=’urn:oasis:names:tc:DSML:2:0:core’.

由以下的要求 ID 選擇性的識別要求

requestID=’Ping!’>

空批次要求

<!-- empty batch request -->

以 XML 作註解,而且使用關閉批次要求、關閉 SOAP 主體和關閉 SOAP 範圍元素關閉 SOAP/DSML 批次要求。

如果啟用 DSML 前端,則傳回空的 DSML 回應:

HTTP/1.1 200 OK
Cache-control:no-cache
Connection:close
Date:Mon, 09 Sep 2002 13:56:49 GMT
Accept-Ranges:none
Server:Sun-ONE-Directory/5.2
Content-Type:text/xml; charset="utf-8"
Content-Length: 500

<?xml version=’1.0’ encoding=’UTF-8’ ?>
<soap-env:Envelope
   xmlns:xsd=’http://www.w3.org/2001/XMLSchema’
   xmlns:xsi=’http://www.w3.org/2001/XMLSchema-instance’
   xmlns:soap-env=’http://schemas.xmlsoap.org/soap/envelope/’
   >
<soap-env:Body>
<batchResponse
   xmlns:xsd=’http://www.w3.org/2001/XMLSchema’
   xmlns:xsi=’http://www.w3.org/2001/XMLSchema-instance’
   xmlns=’urn:oasis:names:tc:DSML:2:0:core’
   requestID=’Ping!’
   >
</batchResponse>
</soap-env:Body>
</soap-env:Envelope>

如果沒有傳回任何項目,可以推斷前端已經停用。

最大數目限制同時連接至目錄和 DSML 要求的尺寸之用戶端數目。用戶端數目的限制由 ds-dsml-poolsizeds-dsml-poolmaxsize 屬性指定,要求大小限制由 ds-dsml-requestmaxsize 屬性指定。如需有關 DSML 相關屬性的詳細資訊,請參閱《Directory Server Administration Reference》的 Chapter 2 "Frontend Plugin Attributes"

作為特定使用者發出 DSML 連結要求

若要發出 DSML 要求,您可以以指定的使用者或匿名身份連結至目錄。若要以指定的使用者身份連結,要求必須包括 HTTP 授權標頭,該標頭含有 uid 和對映 dn 的密碼。

示範的 HTTP 授權要求如下:

 

POST /dsml HTTP/1.1
content-length: 578
Content-Type:text/xml; charset="utf-8"
HOST:hostMachine
Authorization:Basic ZWFzdGVyOmVnZw==
SOAPAction: ""
Connection:close

<?xml version=’1.0’ encoding=’UTF-8’?>
<soap-env:Envelope
   xmlns:xsd=’http://www.w3.org/2001/XMLSchema’
   xmlns:xsi=’http://www.w3.org/2001/XMLSchema-instance’
   xmlns:soap-env=’http://schemas.xmlsoap.org/soap/envelope/’>
   <soap-env:Body>
     <batchRequest
        xmlns=’urn:oasis:names:tc:DSML:2:0:core’
        <extendedRequest>
          <requestName>1.3.6.1.4.1.4203.1.11.3</requestName>
        </extendedRequest>
     </batchRequest>
   </soap-env:Body>
</soap-env:Envelope>

在此範例中,HTTP 授權標頭傳送 uid 為 easter 和密碼為 egg,清晰地以 easter:egg 顯示,而且以 base64 編碼成為 Authorization:Basic ZWFzdGVyOmVnZw==

<extendedRequest> 標籤用於指定 LDAP 延伸作業。<requestName> 標籤用於指定延伸作業的 OID。在此範例中,OID 1.3.6.1.4.1.4203.1.11.3 識別 whoami 延伸作業。如需有關 whoami 延伸作業的詳細資訊,請參閱 http://www.ietf.org/internet-drafts/draft-zeilenga-ldap-authzid-08.txt

關於匿名存取,匿名存取常有嚴格的存取控制,而且可能有資料存取的限制,但不需要任何 HTTP 授權標頭。同樣地,您可以發出 DSML 要求以 LDAP 代理權執行 LDAP 作業。

因為 DSML 要求的管理以批次為基礎,如果您要發行 LDAP 代理權的要求,所需的 DSML 代理驗證要求必須是指定要求批次中的第一個。

DSML 搜尋要求

代碼範例 2-2 顯示根 DSE 項目上的 DSML 基礎物件搜尋要求。

代碼範例 2-2
DSML 搜尋要求

POST /dsml HTTP/1.1
HOST:hostMachine
Content-Length: 1081
Content-Type:text/xml
SOAPAction: ""
Connection:close

<?xml version=’1.0’ encoding=’UTF-8’?>
<soap-env:Envelope
   xmlns:xsd=’http://www.w3.org/2001/XMLSchema’
   xmlns:xsi=’http://www.w3.org/2001/XMLSchema-instance’
   xmlns:soap-env=’http://schemas.xmlsoap.org/soap/envelope/’
   >
   <soap-env:Body>
      <batchRequest
        xmlns=’urn:oasis:names:tc:DSML:2:0:core’
        requestID=’Batch of search requests’
        >
        <searchRequest
            dn=""
            requestID="search on Root DSE"
            scope="baseObject"
            derefAliases="neverDerefAliases"
            typesOnly="false"
            >
            <filter>
               <present name="objectClass"/>
            </filter>
            <attributes>
               <attribute name="namingContexts"/>
               <attribute name="supportedLDAPversion"/>
               <attribute name="vendorName"/>
               <attribute name="vendorVersion"/>
               <attribute name="supportedSASLMechanisms"/>
            </attributes>
        </searchRequest>
      </batchRequest>
   </soap-env:Body>
</soap-env:Envelope>

在此範例中:

關於符合篩選器的項目,依下列使用出現的 objectclass 篩選器:

<filter>
   <present name="objectClass"/>
</filter>

這等同於 LDAP 篩選器字串 (objectclass=*)。篩選器後面為所需屬性清單:

<attributes>
   <attribute name="namingContexts"/>
   <attribute name="supportedLDAPversion"/>
   <attribute name="vendorName"/>
   <attribute name="vendorVersion"/>
   <attribute name="supportedSASLMechanisms"/>
</attributes>



上一章      目錄      索引      下一章     


Copyright 2004 Sun Microsystems, Inc. All rights reserved.