複雜域環境下通過.Net操作Active Directory經驗點滴

轉於:複雜域環境下通過.Net操作Active Directory經驗點滴

1、操作ACL

操作ACL需要使用ActiveDs這個Com組件。

在上篇文章的回覆中Rock提到“很多ActiveDs.dll提供的功能是.net的AD訪問組件不提供的”。ACL的操作就是這樣。

但是我在操作ACL的時候發現在2003上很正常的程序在2000下不能通過,報出“Security ID Structure is invalid”,中文是“安全 ID 結構無效”。

在KB上找到一篇文章:http://support.microsoft.com/default.aspx?scid=kb;en-us;316329

原來是操作系統在綁定SID的時候有問題。KB中提供了兩個解決方法:

A) 人工操作ACL(暈倒,要是人工操作我還寫代碼幹什麼,B4)

B) 通過監視網絡確認是否連接到的DC無法響應。因爲我操作的實際環境是一個很複雜的域環境,這種情況不可避免。

沒辦法,我只好老老實實地把程序部署到2003的環境下了。

 

2、LDAP

大家都知道,一般我們用DirectoryEntry這個類來操作AD對象。

DirectoryEntry類的構造函數通過指定Path就可以綁定到DC。例如,我們常用的LDAP:LDAP://CN=onecity,OU=corp,DC=fabrikam,DC=com

一般來說,沒有什麼問題。但是有時候會報錯說無法連接到域。

原因和上面所說的情況類似。這裏我詳細解釋一下:

在添加域控制器的時候,DC會把本機所有的有效IP地址都註冊到DNS中。在使用nslookup fabrikam.com時,會發現針對這個域(fabrikam.com),有很多對應的IP地址。但是DC服務器可能有多塊網卡,有的網卡並沒有使用(甚至沒有插網線),這個沒有使用的網卡會產生168.x.x.x的地址,並且此地址同樣會被註冊到DNS中。在綁定域控制器時,系統會從域對應的IP中挑選一個去綁定,當然這個無效的地址也會被挑中。

因此,在設定Path時,最好指定DC服務器,例如, LDAP://MYDC01/CN=onecity,OU=corp,DC=fabrikam,DC=com

該方式還有一個好處是在分佈式的域環境下(例如,北京/上海/廣州),應用程序可以挑選最近的域控制器。

指定DC服務器還需要注意通過嘗試多個DC服務器進行容錯。例如:如果MYDC01連接失敗,自動嘗試下一臺DC服務器(LDAP://MYDC02/CN=onecity,OU=corp,DC=fabrikam,DC=com)。這個通過程序做到並不困難,就不在這裏多說了。

 

在簡單的域環境下(1-2臺DC)操作AD很簡單,但是複雜域環境下會出現很多意想不到的問題,此經驗供大家參考。

發佈了48 篇原創文章 · 獲贊 1 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章