資訊: 如何使用 ADSI 查詢協力廠商 LDAP 伺服器

文章翻譯 文章翻譯
文章編號: 251195 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

輕量型目錄存取通訊協定 (LDAP) 提供者的 Active Directory 服務介面 (ADSI) 用來從第三方廠商的 LDAP 伺服器擷取資訊。本文將告訴您幾個可能發生的問題,以及如何克服它們。

其他相關資訊

使用 ADSI 從協力廠商 LDAP 伺服器擷取資訊時您需要:
  • 決定結構描述資訊的可用性。
  • 取得正確的驗證。
  • 防止不存在的容器中的搜尋。

決定結構描述資訊的可用性

以配合的註解 (RFC) 2251年要求 LDAP 版本 3 伺服器應該公開 (Expose) 關閉目錄服務企業 (rootDSE) 的根目錄的 subSchemaSubEntry 屬性。ADSI 會使用這個屬性來找出它會再嘗試驗證,並快取的 subschema 資訊。

如需如何 ADSI 會快取 subschema 上的詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
251189資訊: 找出快取的 ADSI 以 LDAP 伺服器結構描述
ADSI 會使用 subschema 資訊,公開提供的類別適當的介面,並從屬性快取擷取正確的語法中的屬性。

如果無法找到或正確地驗證 subschema 資訊是 ADSI,它會使用預設 LDAP 版本 2 結構描述。因為 LDAP 第 2 版伺服器不會公開一個 subschema,ADSI 會保留在內部的相關許多標準的屬性和類別的結構描述資訊。如果 ADSI 使用預設第 2 版結構描述,它並沒有存取非標準的結構描述資訊包括自訂的類別或建立在伺服器的屬性。

如果沒有與屬性的語法相關的結構描述資訊可用時,ADSI 程式無法從屬性快取擷取屬性。在這種情況下您可以使用 IADsPropertyList.GetPropertyItem 方法來指定要求的內容屬性的語法。當您指定 ADsTYPE 值時,您避免需要使用該屬性的語法資訊。

如果您使用 Microsoft ActiveX 資料物件 (ADO),而且您沒有可用的結構描述資訊,您需要擷取 ADsPath 字串之物件的繫結至在目錄物件,然後使用 IADsPropertyList.GetPropertyItem 方法。沒有使用 ADO 直接沒有結構描述資訊的無因應措施。

取得正確的驗證

有幾種方式來驗證至 ADSI 以 LDAP 伺服器的 LDAP 用戶端。這些方法之間只有簡單繫結是原本由來傳遞認證到伺服器的 LDAP 支援。在其他情況下用戶端和伺服器必須同意通常具有的另一個使用該方法的安全性授權單位或專屬通訊協定。

比方說 GetObject 方法 (或 ADsGetObject 函式在 C 中) 使用可能會導致使用 Microsoft Windows NT 挑戰/回應 (NTLM) 的 LDAP 繫結之 ADS_SECURE_AUTHENTICATION 旗標。此繫結就有可能失敗,因為許多協力廠商的伺服器不接受 NTLM。如果驗證失敗,匿名繫結至降級安全繫結 ; 簡單的例如沒有任何使用者認證將繫結。在此時應用程式可能具有存取只能根據伺服器組態資訊 (或甚至到沒有資訊) 的子集。

避免這種情況、 使用 OpenDSObject 方法 (或 ADsOpenObject 函式在 C 中) 來執行簡單繫結,並指定零 (沒有旗標) 或 ADS_FAST_BIND (說明如下) lnReserved 參數。簡單繫結與傳遞有效屬性化的使用者名稱 (cn = 使用者名稱,cn =...) 和密碼以 LDAP 伺服器以進行驗證。若要達成簡單的繫結與 ADO,將 ADODB.Connection 物件的 [加密密碼] 屬性設定為 FALSE,並分別將屬性化的使用者名稱和密碼指派給 [使用者識別碼] 和 [密碼] 屬性。

防止不存在的容器中的搜尋

預設情況下,ADSI 執行 objectClass 搜尋的查詢或繫結中指定的基底物件。如果給定的辨別的名稱不存在於目錄,這個搜尋就會失敗。

比方說假設 [搜尋設定為在開始"o = Corp,c = 美國 」 目錄中的所有使用者。目錄結構是不實際的 Corp 」 容器,但而是兩個物件的辨別名稱的目錄根"ou = NorthAmerica,o = Corp,c = US"和"ou = 歐洲,o = Corp,c = 美國 」。ADSI 會發出一個 objectClass 搜尋"o = Corp,c = 美國 」 停止搜尋的使用者,則在開始之前的失敗。

這個問題最簡單的解決方案是在目錄中指定實際存在的基底物件。如果是不可能因為到目錄實作的位置,執行與有效的基底物件所要的搜尋您必須避免 ADSI 執行初始 objectClass 搜尋。

若要避免在物件上的 objectClass 搜尋,傳遞 lnReserved 參數 OpenDSObject 方法 (或 ADsOpenObject 函式在 C 中) 的 ADS_FAST_BIND 旗標。因為發生繫結之後,這個旗標會決定 ADSI 的動作,它並不會影響適當的驗證。請注意這個旗標不是,ADSI 2.5 版之前。

Microsoft Windows 2000 所使用 ADO 的提供者公開 (Expose) ADSI 旗標 屬性 ADODB.Connection 物件上。您可以設定此屬性,以防止 ADO 查詢執行 objectClass 搜尋 ADS_FAST_BIND 旗標。ADSI 旗標 屬性不存在於 ADSI 2.5 版 Microsoft Windows NT 版本 4.0 或 Microsoft Windows 9 x。可能的解決方案請參閱下列文件:

223049HOWTO: 查詢 Exchange 5.x 以匿名方式透過 ADSI

?考

如需有關 ADSI 的詳細資訊,請參閱下列的文件 「 Microsoft 知識庫 」 中:
233023HOWTO: 在系統上找到所有 ADSI 提供者
187529HOWTO: 使用 ADO 來透過 ADSI LDAP 提供者的 Access 物件
251189資訊: 找出快取的 ADSI 以 LDAP 伺服器結構描述
223049HOWTO: 查詢 Exchange 5.x 以匿名方式透過 ADSI

有關 ADSI 的一般資訊,請參閱下列網站:
http://msdn2.microsoft.com/library/aa772170.aspx

屬性

文章編號: 251195 - 上次校閱: 2007年9月28日 - 版次: 1.3
這篇文章中的資訊適用於:
  • Microsoft Active Directory Service Interfaces 2.5
關鍵字:?
kbmt kbinfo kbmsg KB251195 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:251195
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com