| |
| Sun Java(TM) System Directory Server 5.2 2005Q1 管理指南 | |
第 2 章
管理目錄項目本章討論如何使用Directory Server Console和指令行公用程式管理您的目錄內容。並且也描述如何使用屬性加密功能儲存屬性,以及如何使用 DSML 存取您的目錄。在規劃一個目錄部署時,應該描述自己的目錄所要包含的資料類型特徵。建立項目及修改預設模式前,請先閱讀 Directory Server Deployment Planning Guide 中的相關章節。
本章假設您已瞭解了一些 LDAP 模式及其定義的物件類別和屬性知識。如需 Directory Server 所提供的模式及所有物件類別與屬性的定義簡介,請參閱 Directory Server Administration 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 存取,所以可以用 ldapsearch、ldapmodify 和 ldapdelete 指令檢視及修改伺服器配置。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 顯示每個自訂編輯器所用的物件類別。
這些自訂編輯器所包含的欄位代表所有強制屬性,以及個別物件類別常用的部分選用屬性。若要用這些範本建立項目,請依照使用自訂編輯器建立項目中的說明進行。若要建立任何其他類型的項目,請參閱建立其他類型的項目。
使用自訂編輯器建立項目
- 在 Directory Server Console 最上層的 [目錄] 標籤上,展開樹狀目錄,以顯示要作為新項目父項的項目。
- 以滑鼠右鍵按一下父項,選擇 [新增] 功能表項目,再從子功能表中選擇項目類型:使用者、群組、組織單位、角色、服務類別、密碼策略或參照。或者,您可以在父項上按一下滑鼠左鍵以選擇父項,再從 [物件] > [新增] 功能表中選擇項目類型。出現您選擇之項目類型的自訂編輯器對話方塊。
自訂編輯器的左欄有一連串的標籤,每個標籤的欄位則顯示在右邊。依預設值,所有自訂編輯器開啟時會選擇最上層的 [使用者] 或 [一般] 標籤,上面包含新項目的名稱和說明欄位。
例如,下圖顯示使用者項目的自訂編輯器:
圖 2-1 Directory Server Console - 使用者項目的自訂編輯器
- 在自訂編輯器的欄位中為您要提供的屬性輸入值。凡是欄位名稱旁有星號 (*) 的強制屬性都必須輸入值;其他欄位則可以保留空白。在允許多重值的欄位中,您可以按 Return 以分隔數值。
如需各項目類型的自訂編輯器中有關特定欄位進一步的協助,請按一下 [說明] 按鈕。如需 [使用者] 與 [組織單位] 編輯器上 [語言] 標籤的說明,請參閱設定語言支援的屬性。
如需建立群組、角色及服務類別項目的進一步說明,請參閱第 5 章「管理身份和角色」,如需建立密碼策略的說明,請參閱第 7 章「管理使用者帳戶和密碼」,如需建立參照的說明,請參閱設定參照。
- 按一下 [確定] 建立新的項目,並關閉自訂編輯器對話方塊,新項目出現在樹狀目錄中。
- 自訂編輯器對話方塊並不會為個別物件類別的所有選用屬性提供欄位。如果希望加入不顯示在自訂編輯器上的選用屬性,請依照以標準編輯器修改項目中的說明進行。
建立其他類型的項目
請依照以下步驟為任何不在表 2-1 中列出的物件類別建立項目。此程序也可用來建立目錄模式中已定義之任何自訂物件類別的項目:
- 在 Directory Server Console 最上層的 [目錄] 標籤上,展開樹狀目錄,以顯示要作為新項目父項的項目。
- 以滑鼠右鍵按一下父項,再從子功能表中選擇 [新增] > [其他] 項目。或者,您可以在父項上按一下滑鼠左鍵以選擇父項,再選擇 [物件] > [新增] > [其他] 功能表項目。
出現 [新增物件] 對話方塊。
- 在 [新增物件] 對話方塊的物件類別清單中,選擇定義新項目的物件類別,再按一下 [確定]。
如果選擇列在表 2-1中的物件類別,將顯示對應的自訂編輯器 (參閱使用自訂編輯器建立項目)。在其他情況中,則均顯示標準編輯器。
- 建立新項目時,標準編輯器中會為您選擇的物件類別中所有必要的屬性各提供一個欄位。所有必要屬性都必須輸入值。有些欄位有標準的預留位置值,例如 New,您應該用對您的項目有意義的值取代預留位置值。
- 若要定義所選物件類別允許的其他屬性,您必須明確加入。若要為選用屬性輸入值:
- 按一下 [加入屬性] 按鈕以顯示允許的屬性清單。
- 從 [加入屬性] 對話方塊中選擇一或多個屬性,再按一下 [確定]。
- 在標準編輯器中新屬性名稱旁輸入值。
如需關於此對話方塊中其他控制項進一步的詳細資料,請參閱以標準編輯器修改項目。
- 依照預設,會選擇其中一個必要屬性作為命名屬性,該必要屬性會出現在標準編輯器中所顯示的項目 DN 中。若要變更命名屬性:
- 在標準編輯器中按一下 [確定],以儲存新項目。
新項目在樹狀目錄中顯示為父項的子項。
用自訂編輯器修改項目
對於列在表 2-1 中的物件類別,您可以選擇使用對應的自訂編輯器或標準編輯器來編輯項目。使用自訂編輯器,可以很容易地存取最常用的欄位,而且介面會幫助您為複雜的屬性 (例如角色或服務類別定義中的屬性) 定義值。
標準編輯器可讓您對項目執行比較進階的作業,例如加入物件類別、加入允許的屬性以及處理多重值屬性等。若要以標準編輯器編輯項目,請參閱以標準編輯器修改項目。
備註
自訂編輯器只可用來編輯列在表 2-1中的物件類別。至於包含其他結構物件類別的項目 (例如從 inetorgperson 繼承得來的自訂類別),則只能透過標準編輯器進行編輯。
若項目除了列示的物件類別之外還包含輔助物件類別,則該項目可以用自訂編輯器進行管理。但自訂編輯器中不顯示輔助類別所定義的任何屬性。如需輔助物件類別的定義,請參閱 Directory Server Administration Reference。
呼叫自訂編輯器
若要編輯表 2-1 中所列物件類別的項目:
- 在 Directory Server Console 最上層的 [目錄] 標籤上,展開樹狀目錄,以顯示要編輯的項目。
- 連按兩下項目。有幾個替代動作也可以呼叫項目的自訂編輯器:
- 以滑鼠右鍵按一下項目,再選擇 [以自訂編輯器編輯] 項目。
- 以滑鼠左鍵按一下以選擇項目,再選擇 [物件] > [以自訂編輯器編輯] 功能表項目。
- 以滑鼠左鍵按一下以選擇項目,再使用鍵盤快速鍵 Control-P。
顯示項目的物件類別所使用的自訂編輯器。例如,圖 2-1中顯示 [使用者] 項目的自訂編輯器。
- 依預設值,所有自訂編輯器開啟時會選擇最上層的 [使用者] 或 [一般] 標籤,上面包含新項目的名稱和說明欄位。針對您要修改的屬性,在自訂編輯器的欄位中編輯或移除值。欄位名稱旁以星號 (*) 標示的屬於強制屬性,您可以修改但無法移除這類屬性的值。其他欄位則可以保留空白。在允許多重值的欄位中,您可以按 Return 以分隔數值。
選取左欄中的其他標籤,以修改對應面板上的值。如需各項目類型的自訂編輯器中有關特定欄位進一步的協助,請按一下 [說明] 按鈕。
如需 [使用者] 與 [組織單位] 編輯器上 [語言] 標籤的說明,請參閱設定語言支援的屬性。在第 7 章「管理使用者帳戶和密碼」中說明了使用者與群組項目的 [帳戶] 標籤上的各欄位。為「Directory Server 同步化服務」提供了 [NT 使用者] 與 [Posix 使用者] 標籤,如需詳細資料,請洽詢 Sun 代表。
如需修改群組、角色及服務類別項目的進一步說明,請參閱第 5 章「管理身份和角色」,如需修改密碼策略的說明,請參閱第 7 章「管理使用者帳戶和密碼」,如需修改參照的說明,請參閱設定參照。
- 按一下 [確定] 儲存項目的變更,並關閉自訂編輯器對話方塊。如果修改了命名屬性 (例如使用者項目的一般名稱),樹狀目錄中將反映該變更。
設定語言支援的屬性
使用者與組織單位項目的自訂編輯器都提供國際化目錄的語言支援。
- 依呼叫自訂編輯器所述開啟您的項目的自訂編輯器。
- 按一下左欄中的 [語言] 標籤。
- 對於使用者項目,您可以用下拉式清單設定喜好的語言。
- 對於使用者與組織單位項目,您可以在清單顯示的任何語言的指定欄位中輸入當地語系化的值。選擇語言,然後以該語言輸入一或多個值。定義當地語系化值之後,清單中的語言名稱會以粗體顯示。
某些語言也有發音欄位,您可以在其中輸入當地語系化值的語音表示法。
- 按一下 [確定] 儲存項目的變更,並關閉自訂編輯器對話方塊。
以標準編輯器修改項目
標準編輯器可根據登入主控台所用的連結 DN,允許您查看項目的所有可讀取屬性,並編輯可寫入屬性。它可讓您加入並移除屬性、設定多重值屬性以及管理項目的物件類別。加入屬性時,您可以定義二進位屬性與語言支援的子類別。
呼叫標準編輯器
為目錄中的任何項目呼叫標準編輯器
- 在 Directory Server Console 最上層的 [目錄] 標籤上,展開樹狀目錄,以顯示要編輯的項目。
- 以滑鼠右鍵按一下項目,再選擇 [以標準編輯器編輯] 項目。有幾個替代動作也可以呼叫項目的自訂編輯器:
- 以滑鼠左鍵按一下以選擇項目,再選擇 [物件] > [用標準編輯器編輯] 功能表項目。
- 如果項目未列在表 2-1 中,則連按兩下項目。依預設值,沒有自訂編輯器的物件類別會使用標準編輯器。
顯示如下圖所示的標準編輯器。
圖 2-2 目錄伺服器主控台 - 標準編輯器
在標準編輯器中,項目的屬性依字母順序排列,而且每個屬性值均各有一個文字方塊。所有屬性,包括唯讀與作業屬性都會顯示出來。右邊的控制項可讓您修改編輯器中的顯示,以及編輯屬性清單。
- 或者,您可以用 [檢視] 方塊中的控制項修改標準編輯器的顯示:
- 選擇 [顯示屬性名稱] 選項以檢視屬性最初在模式中定義的名稱。屬性清單將重新排列,以依名稱字母順序排列。
- 選擇 [顯示屬性描述] 選項將屬性依替代名稱排列 (如果曾在模式中定義替代名稱)。替代名稱通常可以更清楚地描述屬性。屬性清單將重新排列,以依照描述字母順序排列。
- 取消選取 [僅顯示含值的屬性] 核取方塊可列出項目的物件類別中由模式明確允許的所有屬性。如果項目包含 extensibleObject 物件類別,所有屬性都是隱含允許的,但不會列出來。預設狀況下只顯示有定義值的屬性。
- 選擇或取消選取 [顯示 DN] 核取方塊,以切換是否在屬性清單下顯示項目的辨別名稱。
- [重新整理] 按鈕將存取伺服器,以根據項目目前的內容更新所有屬性的值。
下列各節描述設定屬性值、管理物件類別及變更項目命名屬性的控制方式。
修改屬性值
修改屬性值
- 依呼叫標準編輯器所述開啟標準編輯器。
- 捲動屬性清單,並按一下要修改的值。
選取的屬性會反白顯示,而且在包含選取值的文字欄位內會出現編輯游標。
- 使用滑鼠與鍵盤將文字編輯成所要的值。您可以用系統剪貼簿在此欄位中複製、剪下及貼上文字。
如果無法編輯文字欄位的內容,表示屬性是唯讀的,或您沒有修改屬性的寫入權限。
- 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。
編輯多重值屬性
若屬性在目錄模式中定義為多重值,則該屬性在標準編輯器中可以有多個欄位。如需詳細資訊,請參閱第 9 章「延伸目錄模式」。
若要為多重值屬性加入新值:
- 依呼叫標準編輯器所述開啟標準編輯器。
- 捲動屬性清單,並按一下屬性或其中一個值。選取的屬性會反白顯示,並啟動 [加入值] 按鈕。如果未啟動此按鈕,表示選取的屬性不是定義為多重值,或屬性是唯讀的,或是您沒有修改屬性的寫入權限。
- 按一下 [加入值] 按鈕。清單中屬性名稱旁出現新的空白文字欄位。
- 在新的文字欄位中輸入此屬性的新值。您可以用系統剪貼簿在此欄位中複製、剪下及貼上文字。
- 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。
若要移除多重值屬性的值:
- 依呼叫標準編輯器所述開啟標準編輯器。
- 捲動屬性清單,並按一下要移除的特定值。選取的屬性會反白顯示,並啟動 [刪除值] 按鈕。如果未啟動此按鈕,表示選取的屬性是唯讀的,或您沒有修改屬性的寫入權限。
- 按一下 [刪除值] 按鈕。就會移除包含選取值的文字欄位。
- 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。
加入屬性
在您可將屬性加入項目中之前,該項目必須已經包含需要或允許屬性的物件類別。如需詳細資訊,請參閱管理物件類別與第 9 章「延伸目錄模式」。
若要將屬性加入項目中:
- 依呼叫標準編輯器所述開啟標準編輯器。
- 確定已核取 [僅顯示含值的屬性] 選項。
- 按一下 [加入屬性] 按鈕以顯示包含屬性清單的對話方塊。此清單只包含針對項目所定義之物件類別允許的屬性。
- 在 [加入屬性] 對話方塊中選擇要加入的一或多個屬性。
- 或者,您可以從對話方塊上方的下拉式清單中選擇下列兩個子類型或其中之一:
- 選擇屬性及其選用子類型後按一下 [確定]。屬性會依字母順序加入標準編輯器的清單中。
- 在新屬性名稱旁的空白文字欄位中輸入此屬性的新值。您可以用系統剪貼簿在此欄位中複製、剪下及貼上文字。
- 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。
移除屬性
若要從項目中移除屬性及其所有值:
- 依呼叫標準編輯器所述開啟標準編輯器。
- 捲動屬性清單,並按一下要移除的屬性名稱。選取的屬性會反白顯示,並啟動 [刪除屬性] 按鈕。如果未啟動此按鈕,表示選取的屬性是唯讀的,或您沒有修改屬性的寫入權限。
- 按一下 [刪除屬性] 按鈕。就會移除屬性及其所有文字欄位值。
- 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。
管理物件類別
項目的物件類別是由多重值的 objectclass 屬性所定義。修改此屬性時,標準編輯器會提供特殊的對話方塊,幫助您管理定義的物件類別。
若要為項目加入物件類別:
- 依呼叫標準編輯器所述開啟標準編輯器。
- 捲動屬性清單,並選擇 objectclass 屬性。就會啟動 [加入值] 按鈕。如果未啟動此按鈕,表示您沒有權限,無法修改此項目的物件類別。
- 按一下 [加入值] 按鈕。
出現 [加入物件類別] 對話方塊。此視窗顯示您可加入項目中的物件類別清單。
- 請選擇您想要加入此項目中的一或多個物件類別,再按一下 [確定]。您所選取的物件類別即顯示在 objectclass 屬性值清單中。
- 如果新物件類別擁有還不存在項目中的必要屬性,標準編輯器將自動幫您加入。您必須為所有必要屬性提供值。
- 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。
若要從項目中移除物件類別:
- 依呼叫標準編輯器所述開啟標準編輯器。
- 捲動屬性清單,並按一下要移除之 objectclass 屬性的特定值。如果模式允許移除選取的物件類別,而且您有權限可修改此項目的物件類別,就會啟動 [刪除值] 按鈕。
- 按一下 [刪除值] 按鈕。就會移除特定的物件類別。
當您移除物件類別時,標準編輯器將自動移除其餘物件類別不允許或必要的任何屬性。如果移除命名屬性之一,將自動選擇另一個命名屬性,而且主控台將通知您確認此變更。
- 編輯其他任何值,或依需要對此項目執行其他修改,再按一下 [確定] 儲存變更,並關閉標準編輯器。
刪除目錄項目
若要使用 Directory Server Console 來刪除項目:
使用主控台執行大量作業
您可以用 LDIF 檔案加入多個項目、執行混合作業或匯入整個尾碼。若要使用 LDIF 檔案及 Directory Server Console 加入項目:
- 用以上各節所顯示的語法在 LDIF 檔案中定義項目或作業。如果只要加入項目或初始化尾碼,就不需要 changetype 關鍵字,而且 LDIF 檔案可以只包含項目。如果要執行混合的作業,每個 DN 其後都應該跟著一個 changetype,而且視需要加上特定作業或屬性值。
- 從 Directory Server Console 匯入 LDIF 檔案。如需詳細資訊,請參閱匯入 LDIF 檔案。
如果要執行混合的作業,務必取消選取 [匯入 LDIF] 對話方塊上的 [僅加入],讓伺服器會執行所有 LDIF 作業。
從指令行管理項目ldapmodify 和 ldapdelete 指令行公用程式提供加入、編輯與刪除目錄項目的完整功能。您可以用它們管理伺服器的配置項目和使用者項目中的資料。這兩個公用程式也可用來撰寫指令檔,以執行一或多個目錄的大量管理工作。
ldapmodify 和 ldapdelete 指令用在本書各處的程序中。下列各節描述執行這些管理程序所需的所有基本作業。如需關於 ldapmodify 和 ldapdelete 指令的詳細資訊,請參閱 Directory Server Man Page Reference。
指令行公用程式的輸入始終採用 LDIF 格式,您可以直接從指令行輸入,或透過輸入檔提供。下節提供有關 LDIF 輸入的資訊,隨後各節描述每種修改類型的 LDIF。
提供 LDIF 輸入
所有目錄資料使用 Unicode 的 UTF-8 編碼儲存。因此您提供的任何 LDIF 輸入也必須以 UTF-8 編碼。LDIF 格式的詳細描述在 Directory Server Administration Reference 的「LDAP Data Interchange Format Reference」 中。
當您提供 LDIF 輸入值時,請考慮下列幾點:
- 物件是一個空白行,其後跟著以 dn: 開頭的行。此行是物件的辨別名稱。所有其他行是物件的屬性。
- 註解以 # 開頭 (並以 EOL 結尾)。
- 以一個空格開頭的行是繼續上一行。
- 二進位值是以 base-64 編碼,並且在屬性名稱之後以一個雙冒號 (::) 表示。
- 換行字元及換行符號在 LDIF 值中不安全,應該以 base-64 編碼。
- 當您使用 ldapmodify 指令變更屬性值時,請勿在屬性值的末尾不小心留下尾隨空白。如需詳細資訊,請參閱修改屬性值。
在指令行中止 LDIF 輸入
ldapmodify 和 ldapdelete 公用程式讀取您在指令後輸入的 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 解譯,因此不需要特殊的考慮事項。
使用屬性 OID
屬性名稱中預設為不支援屬性 OID。在某些舊版本的 Directory Server 中不是這種情況。如果您在舊版本的 Directory Server 中使用屬性 OID 作為屬性名稱,則必須將屬性 nsslapd-attribute-name-exceptions 設為 on,才能使屬性 OID 被接受。
模式檢查
加入或修改項目時,所使用的屬性必須是項目中的物件類別必要或允許的屬性,而且您的屬性必須包含與定義語法相符的值。
修改項目時,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 的資料。
如果加入的項目大於此限制,或修改的屬性值大於此限制,伺服器將拒絕執行作業,並立即關閉連線。例如,在項目的一或多個屬性中如果有多媒體內容等二進位資料,就可能超過此限制。
而且,定義大型靜態群組的項目可能包含太多成員,以致於其表示法超過限制。但基於效能的原因,並不建議使用這樣的群組,您應該考慮重新設計目錄結構。如需詳細資訊,請參閱管理群組。
若要修改伺服器對用戶端傳送的資料強制的大小限制:
- 為 cn=config 項目的 nsslapd-maxbersize 屬性設定新值。
- 若要使用主控台執行此動作,請以管理員或目錄管理員的身份登入,並根據以標準編輯器修改項目中的程序編輯 cn=config 項目。將 nsslapd-maxbersize 屬性設為用戶端可一次傳送的最大位元數。
- 若要從指令行執行此動作,請使用下列指令:
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 中的「nsslapd-maxbersize」。
- 依啟動和停止 Directory Server 所述,重新啟動伺服器。
錯誤處理
指令行工具會循序處理 LDIF 輸入中的所有項目或修改。當第一個錯誤發生時,預設的運作方式是會停止處理。使用 -c 選項可不理會任何錯誤繼續處理所有輸入。您會在工具的輸出中看到錯誤狀況。
除了上述考慮事項之外,常見的錯誤包括:
如需關於所出現的錯誤狀況及如何迴避 ldapmodify 和 ldapdelete 指令的詳細資訊,請參閱 Directory Server Man Page Reference。
使用 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:clearPasswordchangetype: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 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-Elysées修改屬性值
以下範例顯示如何使用 LDIF 中的 replace 語法修改屬性值:
ldapmodify -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指定屬性的目前所有值已被移除,並已加入所有指定值。
在變更屬性值之後,您可以使用 ldapsearch 指令來驗證變更。
尾隨空白
當您修改屬性值時,請勿在值的末尾不小心留下尾隨空白。尾隨空白可能會導致值以 base-64 編碼顯示 (如 34xy57eg)。
如果屬性值以尾隨空白結尾,則尾隨空白會被作為屬性值的一部分來編碼。當您使用主控台或 ldapsearch 指令來驗證變更時,您所看到的值可能以純文字格式顯示,但也可能顯示為 base-64 編碼的文字。這視您使用哪一種 Directory Server 用戶端而定。
刪除屬性值
以下範例顯示如何完全刪除屬性,以及只刪除多重值屬性中的一個值:
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使用 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 時的限制,在這里同樣適用。使用 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
重新命名及移動項目本節介紹修改 DN 作業、提供使用修改 DN 作業的詳細說明,並且描述如何使用主控台及指令行來執行修改 DN 作業。
修改 DN 作業簡介
在 Directory Server 5.2 2005Q1 之前的 Directory Server 版本中,可以重新命名項目。自 Directory Server 5.2 2005Q1 起,可以重新命名項目及移動項目。
修改 DN 作業無法用於下列工作:
重新命名和移動作業之間的差別
本節描述重新命名項目和移動項目之間的差別。
重新命名項目
重新命名項目會變更項目的 DN 中最左邊 (最不重要) 的屬性 type=value 配對。此屬性 type=value 配對為項目的 RDN。可以重新命名屬性類型、屬性值或者同時重新命名這兩者。若要使重新命名作業成功,新的 DN 不能已經存在。
下列範例顯示如何變更屬性類型和屬性值。
範例 1:若要將下列 DN 中的屬性類型由 cn 變更為 uid:
dn:cn=john,dc=california,dc=sun,dc=com
範例 2:若要將下列 DN 中的屬性值由 john 變更為 bob:
dn:cn=john,dc=california,dc=sun,dc=com
移動項目
移動項目會變更項目的 DN 中最右邊 (最重要) 的屬性 type=value 配對。此動作將項目移動至不同的樹狀子目錄。若要使移動作業成功,與新位置相對應的 DN 必須存在於相同尾碼內。
範例 3:若要將下列 DN 中的項目 john 由 california 移動至 france:
dn:cn=john,dc=california,dc=sun,dc=com
使用修改 DN 作業的詳細說明及限制
當您計劃要使用修改 DN 作業時,請依照下列各節所提供的詳細說明進行:
使用修改 DN 作業的一般說明
當您使用修改 DN 作業時,請遵守下列建議。
- 請勿將修改 DN 作業用於下列工作:
- 請確保您執行的是 Directory Server 5.2 2005Q1 或更新版本。您不能在 Directory Server 5.2 2005Q1 之前的 Directory Server 版本上使用修改 DN 作業。如果您使用的是複製拓樸,請確保拓樸內的所有伺服器都執行 Directory Server 5.2 2005Q1 或更新版本。
- 請勿在您的應用程式中使用 entryid 操作屬性,因為它被保留僅供內部使用。當移動項目時,此項目的 entryid 屬性可能會變更。
- 為伺服器上的所有尾碼全域啟用修改 DN 作業,或個別對您想要執行此作業的每一個尾碼啟用。修改 DN 作業預設為停用。如果您執行的是複製拓樸,請對此拓樸中所有伺服器啟用修改 DN 作業。如需關於如何啟用修改 DN 作業的資訊,請參閱使用主控台啟用修改 DN 作業或使用 ldapmodify 指令啟用修改 DN 作業。
- 在您希望執行修改 DN 作業的每一個尾碼上擴展 ACI 權利。Import 存取權利允許項目匯入到指定的 DN。Export 存取權利允許項目匯出到指定的 DN。如需關於如何擴展 ACI 權利的資訊,請參閱使用主控台啟用修改 DN 作業或使用 ldapmodify 指令啟用修改 DN 作業。
- 在執行修改 DN 作業之前,請確保此作業不會破壞用戶端驗證。如果您移動一個參照用戶端憑證的項目,就會破壞用戶端驗證。在移動項目之後,請驗證您的憑證。
- 在執行修改 DN 作業之前,請確保此作業不會破壞您的應用程式。重新命名或移動項目可能會影響數個尾碼,或是可能變更此項目的下列特性:
使用利用複製的修改 DN 作業之詳細說明
如果您使用利用複製的修改 DN 作業,則您的複製拓樸必須遵守下列需求:
若要重新啟動複製,請執行下列步驟:
1. 重新配置複製拓樸以在所有伺服器上啟用修改 DN 作業。
2. 以下列其中一種方法啟動複製工作階段:
- 透過依照從主控台強迫複製更新或用指令行強迫複製更新中的說明進行。
- 透過變更提供者伺服器上的一個項目。變更會被複製到用戶伺服器。
- 啟用並配置拓樸內所有主機複製上的參考完整性外掛程式。此動作確保伺服器維持群組與角色之參考完整性。如需關於如何啟用並配置參考完整性外掛程式的資訊,請參閱配置參考完整性。
- 在執行修改 DN 作業之後,請留出時間以便參考完整性外掛程式複製其變更。
使用主控台重新命名或移動項目
本節描述如何使用主控台來重新命名項目及移動項目。
使用主控台啟用修改 DN 作業
除非 ACI 權利配置為給予您權限,否則您無法在尾碼上執行修改 DN 作業。可以為伺服器上的所有尾碼全域啟用或停用修改 DN 作業,或者為每個指定的尾碼個別啟用或停用。
下列程序是如何配置不同 ACI 權利的範例。這些程序可能無法配置對您最適當的 ACI 權利。如需關於如何配置不同 ACI 權利的資訊,請參閱 Administration Server Administration Guide 中關於使用存取控制指令的資訊。
使用主控台擴展 ACI 權利此程序配置 ACI 權利以便所有使用者都可以在所有尾碼上執行修改 DN 作業。
- 在 [目錄] 標籤上,開啟 Directory Server Console。
- 在左邊,選擇您要擴展 ACI 權限的尾碼。
- 以滑鼠右鍵按一下尾碼,並在快顯功能表中選取 [設定存取權限]。
顯示管理存取控制視窗。該視窗包含屬於項目的 ACI 清單。
- 在管理存取控制視窗中,反白顯示匿名存取 ACI,再按一下 [編輯]。
顯示編輯 ACI 對話方塊。
- 選取標示為「import」的核取方塊以允許子項匯入到指定的尾碼。
- 選取標示為「export」的核取方塊以允許項目從指定的尾碼下移動至尾碼中的另一個位置。
- 在編輯 ACI 視窗中按一下 [確定]。視窗關閉。
- 在管理存取控制視窗中按一下 [確定]。視窗關閉。
使用主控台全域啟用或停用修改 DN 作業
使用主控台為指定尾碼啟用修改 DN 作業使用主控台重新命名項目
本節描述如何重新命名項目。在 Directory Server 5.2 2005Q1 之前的 Directory Server 版本中支援此作業。若要執行此作業,您不需要啟用修改 DN 作業。
使用主控台重新命名項目
- 在 [目錄] 標籤上,開啟 Directory Server Console。
- 展開樹狀目錄以顯示您要編輯的項目。
- 選取要重新命名的項目,按一下滑鼠右鍵並選取「以標準編輯器編輯」。
標準編輯器視窗開啟。標準編輯器視窗在圖 2-2 中有所說明。
- 選取與您要變更的 RDN 相對應之屬性。
- 將屬性方塊中的文字由目前的項目名稱變更為新的項目名稱。
- 按一下 [確定]。
使用主控台移動項目
在 Directory Server 5.2 2005Q1 之前的 Directory Server 版本中不支援此程序。
使用主控台移動項目
- 請確保已全域啟用修改 DN 作業,或者只啟用包含您要移動之項目的尾碼。如需相關資訊,請參閱使用主控台啟用修改 DN 作業。
- 在 [目錄] 標籤上,開啟 Directory Server Console。
- 展開樹狀目錄以顯示您要編輯的項目。
- 選取您要移動的項目。
- 拖曳此項目並放到新的父項上。
- 在警告快顯方塊中,按一下 [繼續]。
使用主控台移動及重新命名項目
若要重新命名及移動項目,請執行下列兩個程序:
使用 ldapmodify 指令重新命名或移動項目
本節描述如何使用 ldapmodify 指令來重新命名項目及移動項目。
下列屬性與 LDIF 敘述搭配使用:
如需關於與 LDIF 敘述搭配使用之屬性的資訊,請參閱 Directory Server Administration Reference 中的「Attribute Reference」。如需關於 ldapmodify 指令及其選項的資訊,請參閱 Directory Server Man Page Reference。
使用 ldapmodify 指令啟用修改 DN 作業
在您可以使用修改 DN 作業之前,您必須擴展 ACI 權利並啟用修改 DN 作業。
如需關於如何擴展 ACI 權利的資訊,請參閱從指令行建立 ACI。
本節描述如何啟用修改 DN 作業。
使用 ldapmodify 指令全域啟用修改 DN 作業執行 ldapmodify 指令。例如,下列範例啟用修改 DN 作業:
ldapmodify -h <hostname> -p <port> -D <user> -w <user_password>
dn:cn=config,cn=ldbm database,cn=plugins,cn=config
changetype:modify
replace:nsslapd-moddn-enabled
nsslapd-moddn-enabled:on
使用 ldapmodify 指令對尾碼啟用修改 DN 作業執行 ldapmodify 指令。例如,下列範例對名為 suffix-name 的尾碼啟用修改 DN 作業:
ldapmodify -h <hostname> -p <port> -D <user> -w <user_password>
dn:cn=<suffix-name>,cn=ldbm database,cn=plugins,cn=config
changetype:modify
replace:nsslapd-moddn-enabled
nsslapd-moddn-enabled:on使用 ldapmodify 指令重新命名項目
本節描述如何重新命名項目。在 Directory Server 5.2 2005Q1 之前的 Directory Server 版本中支援此作業。若要執行此作業,您不需要啟用修改 DN 作業。
使用 ldapmodify 指令重新命名葉項目執行 ldapmodify 指令。例如,下列範例將項目 john 重新命名為 bob:
ldapmodify -h <hostname> -p <port> -D <user> -w <user_password>
dn:cn=john,dc=california,dc=sun,dc=com
changetype:modrdn
newrdn:cn=bob
deleteoldrdn: 1使用 ldapmodify 指令移動項目
本節描述如何將項目移動至尾碼的另一部分。在 Directory Server 5.2 2005Q1 之前的 Directory Server 版本中不支援此作業。
使用 ldapmodify 指令移動項目
- 請確保已擴展 ACI 權利以便修改 DN 作業。如需相關資訊,請參閱使用 ldapmodify 指令啟用修改 DN 作業。
- 請確保已為尾碼或者受重新命名及移動作業影響的尾碼啟用修改 DN 作業。如需相關資訊,請參閱使用 ldapmodify 指令啟用修改 DN 作業。
- 執行 ldapmodify 指令。例如,下列指令將項目 john 從 California 的樹狀子目錄移動至 France 的樹狀子目錄:
ldapmodify -h <hostname> -p <port> -D <user> -w <user_password>
dn:cn=john,dc=california,dc=sun,dc=com
changetype:modrdn
newrdn:cn=john
deleteoldrdn: 0
newsuperior:dc=france,dc=france,dc=sun,dc=com使用 ldapmodify 指令重新命名及移動項目
本節描述如何將項目重新命名並移動至尾碼的另一部分。在 Directory Server 5.2 2005Q1 之前的 Directory Server 版本中不支援此作業。
使用 ldapmodify 指令重新命名及移動項目
- 請確保已擴展 ACI 權利以便修改 DN 作業。如需相關資訊,請參閱使用 ldapmodify 指令啟用修改 DN 作業。
- 請確保已為尾碼或者受重新命名及移動作業影響的尾碼啟用修改 DN 作業。如需相關資訊,請參閱使用 ldapmodify 指令啟用修改 DN 作業。
- 執行 ldapmodify 指令。例如,下列指令將重新命名作業及移動作業結合為一項作業:
ldapmodify -h <hostname> -p <port> -D <user> -w <user_password>
dn:cn=john,dc=california,dc=sun,dc=com
changetype:modrdn
newrdn:dc=bob
deleteoldrdn: 1
newsuperior:dc=france,dc=france,dc=sun,dc=com
設定參照您可以使用參照告訴用戶端應用程式在本機無法取得資訊時應聯絡哪部伺服器。參照是指到遠端尾碼或項目的指標,Directory Server 會將此指標傳回給用戶端,而不傳回結果。接下來,用戶端必須重新於參照中指定的遠端伺服器上執行作業。在三種狀況下會發生此重新導向作業:
- 當用戶端應用程式要求不存在本機伺服器的項目時,伺服器傳回預設參照。
- 當整個尾碼為了進行維護,或基於安全性的原因而設為離線狀態時,伺服器將傳回該尾碼定義的參照。尾碼層級的參照說明於設定存取權限及參照中。當用戶端要求寫入作業時,尾碼的唯讀複本也會向主機伺服器傳回參照。
- 您可以建立稱為智慧型參照的項目。當用戶端明確存取智慧型參照時,伺服器將改為傳回它所定義的參照。Directory Server Console 會自動配置以追蹤智慧型參照,使它們就像是最上層 [目錄] 標籤上的本機項目一樣。
不論是哪一種狀況,一個參照就是一個 LDAP URL,其中包含另一部伺服器的主機名稱、連接埠號碼及選用的 DN。如需詳細資訊,請參閱 Directory Server Administration Reference。如需關於如何在目錄部署中使用參照的概述,請參閱 Directory Server Deployment Planning Guide。
下列各節描述定義目錄的預設參照及定義智慧型參照的程序。
設定預設參照
當用戶端應用程式在 DN 上所提交的作業不包含在目錄所維護的任何尾碼內時,便會將預設參照傳回給該用戶端應用程式。預設參照有時候稱為全域參照,因為它們適用於目錄中的所有尾碼。伺服器將傳回定義的所有尾碼,但傳回的順序則未定義。
使用主控台設定預設參照
- 在 Directory Server Console 最上層的 [配置] 標籤上,選擇位於配置樹狀目錄根部的伺服器節點,然後選擇右面板中的 [網路] 標籤。
- 選擇 [傳回參照] 核取方塊,並在文字欄位中輸入 LDAP URL。或者,按一下 [建構 URL],在指引下完成 LDAP URL 的定義。指到安全連接埠的 LDAP URL 範例如下:
ldaps://east.example.com:636/dc=example,dc=com
您可以用空格與引號分隔,輸入多個參照 URL,如下:
"ldap://east.example.com:389" "ldap://backup.example.com:389"
- 按一下 [儲存] 讓變更立即生效。
從指令行設定預設參照
使用 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 節中指定的標準。
使用主控台建立智慧型參照
- 在 Directory Server Console 最上層的 [目錄] 標籤上,展開樹狀目錄,以顯示要作為智慧型參照父項的項目。
- 以滑鼠右鍵按一下父項,選擇 [新增] > [參照] 功能表項目。或者,您可以在父項上按一下滑鼠左鍵以選擇父項,再選擇 [物件] > [新增] > [參照] 功能表項目。
出現參照項目的自訂編輯器對話方塊。
- 在編輯器的 [一般] 標籤上,輸入參照的名稱,並從下拉式清單中選擇其命名屬性。名稱將是您選擇的命名屬性的值。或者,您可以為此參照輸入描述字串。
- 在編輯器的 [URL] 標籤上,按一下 [建構] 按鈕以定義智慧型參照的 URL。在出現的對話方塊中輸入 LDAP URL 的元素。
URL 的元素包括儲存參照項目之目錄伺服器的主機名稱和 LDAP 連接埠號碼,以及伺服器上目標項目的 DN。依預設值,目標 DN 與智慧型參照項目的 DN 相同。但是目標 DN 可以是任何尾碼、樹狀子目錄或分葉項目。
- 在 LDAP URL 建構對話方塊中,按一下 [確定]。URL 就顯示在新參照文字方塊中。
- 按一下新參照文字方塊旁的 [加入],將參照加入清單。
- 您可以定義多個 URL,作為此項目傳回的參照。使用 [建構]、[加入]、[刪除] 與 [變更] 按鈕可建立與管理 [參照清單]。
- 按一下 [參照驗證] 按鈕可顯示對話方塊,您可以在其中設定 Directory Server Console 在追蹤參照到遠端伺服器時將用來連結的認證。您可以定義存取伺服器時將使用的連結 DN 與密碼。指向同一伺服器的所有參照都將使用相同的認證。
- 使用 [加入]、[編輯] 與 [刪除] 按鈕可管理伺服器與對應認證清單。完成時按一下 [確定]。
- 在參照的自訂編輯器中,按一下 [儲存] 儲存您的智慧型參照項目。
在主控台的樹狀目錄中,您應該看到目標樹狀子目錄或項目取代智慧型參照項目。如果智慧型參照項目有黃色警告圖示,表示 URL 或認證無效。請連按兩下項目,等看到 [參照錯誤] 時按一下 [繼續],並修改 [URL] 或 [參照驗證] 以修正錯誤。
從指令行建立智慧型參照
若要建立智慧型參照,請用 referral 與 extensibleObject 物件類別建立項目。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
定義智慧型參照後,對 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。
只有在伺服器上配置並啟用 SSL 後,才會啟用屬性加密。不過,依據預設並不會加密任何屬性。系統會在尾碼層級中配置屬性加密。這是指將出現在每一個項目之尾碼的屬性加密。如果您想要將整個目錄中的某個屬性加密,必須啟用每一個尾碼中此屬性的加密。
小心
屬性加密會影響與尾碼相關的所有的資料及索引檔。如果修改現有尾碼的加密配置,您必須首先匯出其內容,變更配置,然後再重新匯入內容。主控台將幫助您執行這些步驟。
此外,在開啟加密時,您必須手動刪除可能仍舊包含未加密值的資料庫快取檔案。
您應該在新尾碼中載入或建立資料前,先啟用所有加密的屬性。
如果您選擇加密的屬性若會將某些項目當成命名屬性使用,則出現在 DN 中的值將不會加密,但儲存在項目中的值將會加密。
您可以選擇 userPassword 屬性進行加密,但這並沒有實際的安全性效益,除非密碼需以純文字儲存,如 DIGEST-MD5 SASL 驗證一樣。如果密碼策略中已為密碼設定加密機制,則更進一步的加密所能增加的安全性有限,還會影響每一次連結作業的效能。
在儲存中,加密的屬性以表示使用加密演算法的加密標籤作為開端。使用 DES 加密演算法的加密屬性會顯示如下:
使用主控台配置屬性加密
- 在 Directory Server Console 上選擇 [配置] 標籤,展開 [資料] 節點,並選擇您想要加密屬性值的尾碼。選擇右面板中的 [屬性加密] 標籤。
此標籤包含一份表格,列出此尾碼目前所有加密屬性的名稱和加密結構。
- 若要為屬性啟用加密:
- 若要使屬性不再加密,請從表格中選擇屬性名稱,再按一下 [刪除屬性] 按鈕。
- 按一下 [儲存]。系統會提示您在變更配置前,先將尾碼內容匯出至 LDIF 檔案。
- 按一下 [匯出尾碼] 開啟匯出對話方塊,或按一下 [繼續],不需要匯出即可修改屬性加密配置。然後新的配置就會儲存起來。
如果您尚未匯出尾碼,您必須立即執行此動作以儲存其內容。如果尾碼包含加密的屬性,而且您計劃在下個步驟中使用此 LDIF 檔案重新初始化尾碼,這些屬性在匯出的 LDIF 中可以保持加密狀態。
現在將出現提示,要您從 LDIF 檔案初始化尾碼。
- 現在按一下 [初始化尾碼] 開啟初始化對話方塊,然後再輸入 LDIF 檔案名稱載入目錄。
如果在上個步驟中匯出含加密屬性的尾碼,您現在必須用該檔案初始化,因為一旦尾碼重新初始化後,加密值將無法回復。在載入及建立索引的同時,指定屬性的所有值都將會加密。
如果您不想在此時初始化尾碼,請按一下 [關閉]。您可於稍後再使用匯入資料中所描述的程序來匯入資料。
- 如果配置已改為會加密一或多個屬性,而且這些屬性在匯入作業之前曾經有值,資料庫快取中可能依舊看得到部分未加密的值。若要清除資料庫快取:
- 依啟動和停止 Directory Server 所述停止 Directory Server。
- 以超級使用者或具有管理員權限的身份,將資料庫快取檔案從檔案系統中刪除:
ServerRoot/slapd-serverID/db/__db.*
- 再次啟動 Directory Server。伺服器將自動建立新的資料庫快取檔案。
從指令行配置屬性加密
- 如果要配置屬性加密的尾碼上有任何項目,您必須先將該尾碼的內容匯出到 LDIF 檔案。如需詳細資訊,請參閱匯出日期。
如果尾碼包含加密的屬性,而且您計劃在步驟 5 中使用此 LDIF 檔案重新初始化尾碼,這些屬性在匯出的 LDIF 中可以保持加密狀態。
- 若要為屬性啟用加密,請使用 ldapmodify 指令加入下列配置項目:
ldapmodify -a -h host -p port -D cn=Directory Manager -w 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 是下列其中之一:
- 若要使屬性不再加密,請使用 ldapmodify 指令修改下列配置項目:
ldapmodify -h host -p port -D cn=Directory Manager -w password
dn:cn=attributeName, cn=encrypted attributes, cn=databaseName,
cn=ldbm database, cn=plugins, cn=config
changetype:modify
replace:dsEncryptionAlgorithm
dsEncryptionAlgorithm:clearText其中 attributeName 是要加密的屬性類型名稱,而 databaseName 是對應到尾碼的資料庫符號名稱。
- 如果配置已改為會加密一或多個屬性,而且這些屬性在匯入作業之前曾經有值,資料庫快取中可能依舊看得到部分未加密的值。若要清除資料庫快取:
- 依啟動和停止 Directory Server 所述停止 Directory Server。
- 以超級使用者或具有管理員權限的身份,將資料庫快取檔案從檔案系統中刪除:
ServerRoot/slapd-serverID/db/__db.*
- 再次啟動 Directory Server。伺服器將自動建立新的資料庫快取檔案。在快取再次填滿之前,此尾碼中的作業效能可能會稍微受到影響。
- 依匯入資料所述用 LDIF 檔案初始化尾碼。
在載入檔案及建立對應索引的同時,指定屬性的所有值都將會加密。
維護參考完整性參考完整性是一種外掛程式機制,可確保維護相關項目之間的關係。許多屬性類型 (例如群組成員的屬性) 中包含另一個項目的 DN。參考完整性可確保移除項目時,包含其 DN 的所有屬性也會一併移除。
例如,如果移除了目錄的使用者項目,而且已經啟用參考完整性,則伺服器也會移除使用者為成員之一之所有群組的使用者。如果沒有啟用參考完整性,管理員必須手動從群組中移除使用者。如果您將 Directory Server 與其他需要用到使用者與群組管理的 Sun Java System 產品進行整合時,這會是一項重要功能。
參考完整性操作方法
當啟用參考完整性外掛程式時,其會在刪除、重新命名或移動作業之後,立即執行特定屬性上的完整性更新。依預設值,參考完整性外掛程式是停用的。
每當您刪除、重新命名或移動目錄中的使用者或群組項目時,會將作業記錄在參考完整性記錄檔中:
ServerRoot/slapd-serverID/logs/referint
經過特定時間 (即更新間隔) 後,伺服器會在啟用參考完整性之所有屬性上執行搜尋,並使搜尋出來的項目與出現在記錄檔中已刪除或已修改項目的 DN 互相符合。如果記錄檔顯示已經刪除項目,則對應的屬性也會刪除。如果記錄檔顯示已經變更項目,則對應的屬性值也會相對地修改。
若啟用參考完整性外掛程式的預設配置,每次執行刪除、重新命名或移動作業後,它會立即在 member、uniquemember、owner、seeAlso 和 nsroledn 屬性上執行完整性更新。但是您可以依照您的需要配置參考完整性外掛程式的運作方式:
配置參考完整性
使用下列程序可從 Directory Server Console 啟用或停用參考完整性,以及配置外掛程式。
備註
在所有資料庫中參考完整性外掛程式所使用的所有屬性都必須編製索引。必須在所有資料庫的配置中建立這些索引。當啟用回溯變更記錄時,cn=changelog 尾碼必須編製索引。如需相關資訊,請參閱第 10 章「編製目錄資料索引」。
從主控台上配置參考完整性
- 在 Directory Server Console 最上層的 [配置] 標籤上,展開 [外掛程式] 節點,再選擇 [referential integrity postoperation] 外掛程式。
外掛程式的設定顯示在右面板中。
- 選擇 [啟用外掛程式] 核取方塊以啟用外掛程式,清除核取方塊以停用外掛程式。
- 設定 [引數 1] 的值,以修改更新的間隔秒數。常用的值為:
- 設定 [引數 2] 的值,成為參考完整性記錄檔的絕對路徑。
[引數 3] 用不到,但必須存在。
- 受參考完整性外掛程式監控的屬性由 [引數 4] 開始列起。按一下 [加入] 與 [刪除] 按鈕可管理此清單,及加入您自己的屬性。
- 按一下 [儲存] 以儲存您的變更。
- 變更生效前,您必須重新啟動 Directory Server。
將參考完整性用於複製
在複製環境中,存在某些使用參考完整性外掛程式的限制:
若要在複製拓樸中配置參考完整性外掛程式:
- 確定已配置所有複本的配置,而且已定義所有複製協議。
- 決定將為其維護參考完整性的屬性組。並決定主機伺服器上所要使用的更新間隔。
- 使用相同的屬性組及相同的更新間隔啟用所有主機伺服器上的參考完整性外掛程式。此程序會在配置參考完整性中描述。
- 請確定所有用戶伺服器上參考完整性外掛程式都是停用的。
將參考完整性用於繼承複製
從 4.x 主機向 5.x 用戶複製時,啟用參考完整性,您必須在 4.x 主機上重新配置參考完整性外掛程式,將參考完整性變更寫入 4.x 變更記錄。此操作使參考完整性變更被複製。如果沒有重新配置外掛程式,參考完整性無法正常運作。
在以下環境中重新配置參考完整性外掛程式:
- 停止 4.x 伺服器。
- 開啟 ServerRoot/slapd-ServerID/config/ 中的 slapd.ldbm.conf 檔案。
- 尋找以下面句子開始的行
plugin postoperation on "referential integrity postoperation"
- 透過將屬性清單前的引數由 0 變更為 1來修改此行。
例如,將
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"
- 儲存 slapd.ldbm.conf 檔案。
- 重新啟動伺服器。
- 從 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]
其中
- optional_options 代表一系列的指令行選項。必須在搜尋篩選條件之前指定這些選項 (如果有的話)。
- search_filter 代表 LDAP 搜尋篩選條件中描述的 LDAP 搜尋篩選條件。如果您未使用 -f 選項在檔案中提供搜尋篩選條件,則必須指定搜尋篩選條件。
- 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。
例如 -l 300。nsslapd-timelimit 屬性的預設值是 3,600 秒 (1 小時。)
-p
指定 Directory Server 使用的 TCP 連接埠號碼。例如 -p 5201。預設值為 389,使用 SSL 選項時為 636。
-s
指定搜尋的範圍。範圍可能是其中之一:
-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=*)"使用 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。
假設您不想要看到搜尋結果傳回的所有屬性。您可以在搜尋篩選條件之後立刻在指令行上指定想要的屬性,將傳回的屬性限制在某些特定的屬性範圍內。例如,若要顯示目錄中每個項目的 cn 和 sn 屬性,請使用以下指令:
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 中列出了可以在搜尋篩選條件中使用的運算子:
存在延伸搜尋至 dn 屬性 (例如 cn:dn:=John),以及提供國際化搜尋支援的延伸運算子。
使用搜尋篩選條件中的 OID
LDAPv3 可讓您為特定屬性建立對應運算子及規則。對應規則定義如何將屬性值與特定語法相比較。換句話說,對應規則定義可能比較對應屬性的方式。例如,對應規則可以定義比較屬性時是否要考量文字的大小寫。
當規則建立之後,它們可以在搜尋篩選條件中被參照。
例如,下列搜尋篩選條件使用 OID 2.5.13.5 所指定的對應規則來比較包含姓氏「Jensen」的項目。
(sn:2.5.13.5:=Jensen)
下列範例解說使用「:dn」表示法來表示 OID 2.5.13.5 應該在比較時使用,並且項目的辨別名稱屬性在評估是否符合時應該被視為項目的一部分:
(sn:dn:2.5.13.5:=Jensen)
使用複合搜尋篩選條件
如下所示,使用字首表示法中表示的布林運算子組合多種搜尋篩選條件元件:
(Boolean-operator(filter)(filter)(filter)...}
其中 Boolean-operator 是列在表 2-3 中的任何一個布林運算子。
布林運算子可以組合和巢居在一起以形成複雜運算式,例如:
(Boolean-operator(filter)(Boolean-operator(filter)(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 和每個項目的 givenname 和 sn 屬性:
ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
-f searchdb sn givenname在搜尋篩選條件中指定非 7 位元 ASCII 字元
搜尋篩選條件中的非 7 位元 ASCII 字元必須以字元的表示法來取代,其中每一個 UTF-8 編碼的位元組的前面加上反斜線。在 UTF-8 中,字元中的每一個位元組以十六進位碼表示。
例如,字元 的 UTF-8 表示法為 c3a9。因此,在搜尋篩選條件中,您將 表示為 \c3\a9。所以,要搜尋 cn=Vronique Martin:
ldapsearch -h myServer -b "dc=example,dc=com" "(cn=V\c3\a9ronique Martin)"
表 2-4 中列出的特殊字元在搜尋篩選條件中使用時也必須依照此方式表示。
表 2-4 搜尋篩選條件中的特殊字元
特殊字元
含有特殊字元的值
篩選條件範例
*
Five*Star
(cn=Five\2aStar)
\
c:\File
(cn=\5cFile)
()
John (2nd)
(cn=John \282nd\29)
null
0004
(bin=\00\00\00\04)
忽略搜尋篩選條件中辨別名稱內的字元
當在 Directory Server 的任何部分使用 DN 時,您必須以反斜線 (\) 將逗號及某些其他特殊字元忽略。如果您在搜尋篩選條件中使用 DN,則用於忽略 DN 中特殊字元的反斜線必須以 \5c 表示。例如:
DN:cn=Julie Fulmer,ou=Marketing\,Bolivia,dc=example,dc=com
DN in a search filter:ldapsearch -h myServer -b "dc=example,dc=com" "(manager=cn=Julie Fulmer,ou=Marketing\5c,Bolivia,dc=example,dc=com)"
搜尋篩選條件範例
下列搜尋項目的篩選條件含有管理員屬性的一個或多個值。這也稱為存在搜尋:
(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 *
搜尋國際化目錄當您執行搜尋作業時,您可以要求目錄將結果依照伺服器具有支援比較順序的任何語言來排序。如需目錄所支援之比較順序的清單,請參閱 Directory Server Administration Reference。
本節著重於 ldapsearch 語法的對應規則篩選條件部分。如需關於一般 ldapsearch 語法的詳細資訊,請參閱 LDAP 搜尋篩選條件。如需關於使用 Directory Server Console「使用者和群組」部分搜尋國際化目錄的資訊,請參閱線上說明或 Administration Server Administration Guide。
這一節涵蓋下列主題:
對應規則篩選條件語法
對應規則提供目錄在搜尋作業中比較字串的特殊規則。在國際搜尋中,對應規則會通知系統在執行搜尋作業時所要使用的比較順序與運算子。對應規則篩選條件的語法如下:
attr:matchingRule:=value
其中:
- attr 是屬於您搜尋項目之屬性,如 cn 或 mail
- matchingRule 是識別比較順序或比較順序及關聯運算子的字串,視您喜好的格式而定。如需對應規則格式的討論,請參閱對應規則格式。
- value 是您要搜尋的屬性值,或是關聯運算子及您要搜尋的屬性值。篩選條件的值部分之語法視您所使用之對應規則格式而定。
對應規則格式
搜尋篩選條件的對應規則部分能夠以下列方式表示:
每一個選項的語法在下列各節中討論:
為對應規則使用 OID
Directory Server 所支援的每個語言環境都有關聯的比較順序 OID。如需支援的語言環境及相關聯的 OID 的清單,請參閱 Directory Server Administration Reference。
您可以在對應規則搜尋條件的對應規則部分中使用比較順序 OID,如下所示:
attr:OID:=(relational_operator value)
關聯運算子包含在字串的值部分,以一個空格與值隔開。例如,若要以瑞典文比較順序搜尋 N4709 中或之後的所有 departmentNumber 屬性,請使用下列搜尋條件:
departmentNumber:1.3.6.1.4.1.42.2.27.9.4.129.1:=>= N4709
為對應規則使用語言標籤
Directory Server 所支援的每個語言環境都有關聯的語言標籤。如需支援的語言環境及相關聯的語言標籤的清單,請參閱 Directory Server Administration Reference。
您可以在對應規則搜尋條件的對應規則部分中使用語言標籤,如下所示:
attr:language-tag:=(relational_operator value)
關聯運算子包含在字串的值部分,以一個空格與值隔開。例如,若要使用西班牙文比較順序於目錄中搜尋含有 estudiante 值的所有描述屬性,請使用下列搜尋條件:
description:es:== estudiante
為對應規則使用 OID 及尾碼
作為使用關聯運算子-值配對的替代方式,您可以在搜尋條件的對應規則部分,於 OID 後面附加一個代表特定運算子的尾碼。將 OID 與尾碼結合,如下所示:
attr:OID+suffix:=value
例如,若要以德文比較順序搜尋含有值 Softwareprodukte 的 businessCategory 屬性,請使用下列搜尋條件:
businessCategory:1.3.6.1.4.1.42.2.27.9.4.28.1.3:=Softwareprodukte
上一個範例中的 .3 為相等尾碼。
為對應規則使用語言標籤及尾碼
作為使用關聯運算子-值配對的替代方式,您可以在搜尋條件的對應規則部分,於語言標籤後面附加一個代表特定運算子的尾碼。將語言標籤與尾碼結合,如下所示:
attr:language-tag+suffix:=value
例如,若要以法文比較順序搜尋 La Salle 或之後的所有姓氏,請使用下列搜尋條件:
sn:fr.4:=La Salle
在對應規則篩選條件中使用萬用字元
當您使用對應規則篩選條件執行子字串搜尋時,可以使用星號 (*) 字元作為萬用字元來表示零或多個字元。
例如,若要搜尋以字母 k 開頭並以字母 n 結尾的屬性值,您可以在篩選條件的值部分輸入 k*n。同樣地,若要搜尋以字母 u 開頭的所有屬性值,您可以在篩選條件的值部分輸入 u*。
若要搜尋包含星號 (*) 字元的值,您必須忽略星號字元。
支援的搜尋類型
目錄伺服器支援下列國際搜尋類型:
近似或拼音和存在搜尋僅在英文中支援。
至於一般 ldapsearch 搜尋作業,國際搜尋使用運算子來定義搜尋類型。然而,當呼叫國際搜尋時,在搜尋條件的對應規則部分中,您可以於搜尋字串的值部分使用標準運算子 (=、>=、>、<、<=),或使用稱為尾碼 (不會與目錄尾碼混淆) 的特殊類型運算子。表 2-5 簡要列出每一個搜尋類型、運算子及對等的尾碼。
國際搜尋範例
下列各節顯示如何在目錄資料上執行國際搜尋的範例。每一個範例提供所有可能的對應規則篩選條件格式,以便您可以熟悉這些格式並選擇最適合您的格式。
小於範例
當您使用小於運算子 (<) 或尾碼 (.1) 執行語言環境特定的搜尋時,您將以特定比較順序搜尋指定屬性之前的所有屬性值。
例如,若要以西班牙文比較順序搜尋姓氏 Marquez 之前的所有姓氏,您可以使用下列任何一種對應規則搜尋條件:
sn:1.3.6.1.4.1.42.2.27.9.4.49.1:=< Marquez
sn:es:=< Marquez
sn:1.3.6.1.4.1.42.2.27.9.4.49.1.1:=Marquez
sn:es.1:=Marquez小於或等於範例
當您使用小於或等於運算子 (<=) 或尾碼 (.2) 執行語言環境特定的搜尋時,您將以特定比較順序搜尋指定屬性中或之前的所有屬性值。
例如,若要以匈牙利文比較順序搜尋房間號碼 CZ422 或之前的所有房間號碼,您可以使用下列任何一種對應規則搜尋條件:
roomNumber:1.3.6.1.4.1.42.2.27.9.4.88.1:=<= CZ422
roomNumber:hu:=<= CZ422
roomNumber:1.3.6.1.4.1.42.2.27.9.4.88.1.2:=CZ422
roomNumber:hu.2:=CZ422相等範例
當您使用等於運算子 (=) 或尾碼 (.3) 執行語言環境特定的搜尋時,您將以特定比較順序搜尋符合指定屬性的所有屬性值。
例如,若要以德文比較順序搜尋含有值 Softwareprodukte 的所有 businessCategory 屬性,請使用下列對應規則搜尋條件:
businessCategory:1.3.6.1.4.1.42.2.27.9.4.28.1:== Softwareprodukte
businessCategory:de:== Softwareprodukte
businessCategory:1.3.6.1.4.1.42.2.27.9.4.28.1.3:=Softwareprodukte
businessCategory:de.3:=Softwareprodukte大於或等於範例
當您使用大於或等於運算子 (>=) 或尾碼 (.4) 執行語言環境特定的搜尋時,您將以特定比較順序搜尋指定屬性中或之後的所有屬性值。
例如,若要以法文比較順序搜尋 Qubec 或之後的所有位置,您可以使用下列任何一種對應規則搜尋條件:
locality:1.3.6.1.4.1.42.2.27.9.4.76.1:=>= Qubec
locality:fr:=>= Qubec
locality:1.3.6.1.4.1.42.2.27.9.4.76.1.4:=Qubec
locality:fr.4:=Qubec大於範例
當您使用大於運算子 (>) 或尾碼 (.5) 執行語言環境特定的搜尋時,您將以特定比較順序搜尋指定屬性中或之前的所有屬性值。
例如,若要以捷克文比較順序搜尋主機 schranka4 之後的所有郵件主機,您可以使用下列任何一種對應規則搜尋條件:
mailHost:1.3.6.1.4.1.42.2.27.9.4.26.1 :=> schranka4
mailHost:cs:=> schranka4
mailHost:1.3.6.1.4.1.42.2.27.9.4.26.1.5:=schranka4
mailHost:cs.5:=schranka4子字串範例
當您執行國際子字串搜尋時,您將以特定比較順序搜尋符合指定模式的所有值。
例如,若要以中文比較順序搜尋以 ming 結尾的所有使用者 ID,您可以使用下列任何一種對應規則搜尋條件:
uid:1.3.6.1.4.1.42.2.27.9.4.143.1:=* *ming
uid:zh:=* *ming
uid:1.3.6.1.4.1.42.2.27.9.4.143.1.6:=*ming
uid:zh.6:=*ming
使用 DSMLv2 存取目錄下列範例指出如何使用 DSML 要求存取和搜尋目錄。如需關於 DSMLv2 標準的 DSML 相關屬性和資訊的完整清單,請參閱 Directory Server Administration Reference。
本節包含下列範例:
請注意,這些範例中的 content-length: 標頭含有 DSMLv2 要求的精確長度。為了使這些範例正常運作,請確定您使用的編輯器遵照這些內容長度,或是您可以適當地修改內容長度。
空匿名 DSML "Ping" 要求
依預設值停用 DSML 前端。如需有關如何啟用它的資訊,請參閱啟用 DSML 要求。若要檢查是否啟用 DSML 前端,如程式碼範例 2-1 所示傳送空 DSML 批次要求:
程式碼範例 2-1 空匿名 DSML 要求
此 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 回應,如程式碼範例 2-2 中所示。
程式碼範例 2-2 空匿名 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-poolsize 和 ds-dsml-poolmaxsize 屬性指定,要求大小限制由 ds-dsml-requestmaxsize 屬性指定。如需關於 DSML 相關屬性的詳細資訊,請參閱 Directory Server Administration Reference。
作為特定使用者發出 DSML 連結要求
若要發出 DSML 要求,您可以以指定的使用者或匿名身份連結至目錄。若要以指定的使用者身份連結,要求必須包括 HTTP 授權標頭,該標頭含有 UID 和對映 DN 的密碼,如程式碼範例 2-3 中所示。
程式碼範例 2-3 DSML 延伸作業:作為特定使用者連結
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 延伸作業。
對 DSML 延伸作業的回應顯示提出連結要求的使用者之 DN。在程式碼範例 2-4 中,whoami 回應 (包含 DN) 顯示於此行中:<response>dn:uid=easter,ou=people,dc=france,dc=sun,dc=com</response>.
如需有關 whoami 延伸作業的詳細資訊,請參閱 http://www.ietf.org/internet-drafts/draft-zeilenga-ldap-authzid-08.txt。
程式碼範例 2-4 DSML 延伸作業的回應
HTTP/1.1 200 OK
Cache-control: no-cache
Connection: close
Date: Fri, 30 Jul 2004 09:15:09 GMT
Accept-Ranges: none
Server: Sun-ONE-Directory/5.2
Content-Type: text/xml; charset="utf-8"
Content-Length: 697
<?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’
>
<extendedResponse>
<resultCode code=’0’ descr=’success’/>
<responseName>1.3.6.1.4.1.4203.1.11.3</responseName>
<response>dn:uid=easter,ou=people,dc=france,dc=sun,dc=com</response>
</extendedResponse>
</batchResponse>
</soap-env:Body>
</soap-env:Envelope>
關於匿名存取,匿名存取常有嚴格的存取控制,而且可能有資料存取的限制,但不需要任何 HTTP 授權標頭。同樣地,您可以發出 DSML 要求以 LDAP 代理權執行 LDAP 作業。
因為 DSML 要求的管理以批次為基礎,如果您要發行 LDAP 代理權的要求,所需的 DSML 代理驗證要求必須是指定要求批次中的第一個。
DSML 搜尋要求
程式碼範例 2-5 顯示根 DSE 項目上的 DSML 基礎物件搜尋要求。
程式碼範例 2-5 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>DSML 搜尋回應的範例顯示於程式碼範例 2-6 中。
程式碼範例 2-6 DSML 搜尋回應
HTTP/1.1 200 OK
Cache-control:no-cache
Connection:close
Date: Fri, 30 Jul 2004 09:21:43 GMT
Accept-Ranges: none
Server: Sun-ONE-Directory/5.2
Content-Type: text/xml; charset="utf-8"
Content-Length: 1287
<?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=’Batch of search requests’
>
<searchResponse requestID=’search on Root DSE’>
<searchResultEntry>
<attr name=’namingContexts’>
<value>dc=france,dc=sun,dc=com</value>
<value>o=NetscapeRoot</value>
</attr>
<attr name=’supportedLDAPVersion’>
<value>2</value>
<value>3</value>
</attr>
<attr name=’vendorName’>
<value>Sun Microsystems, Inc.</value>
</attr>
<attr name=’vendorVersion’>
<value>Sun-ONE-Directory/5.2</value>
</attr>
<attr name=’supportedSASLMechanisms’>
<value>EXTERNAL</value>
<value>GSSAPI</value>
<value>DIGEST-MD5</value>
</attr>
</searchResultEntry>
<searchResultDone>
<resultCode code=’0’ descr=’success’/>
</searchResultDone>
</searchResponse>
</batchResponse>
</soap-env:Body>
</soap-env:Envelope>