生活随笔
收集整理的這篇文章主要介紹了
活动目录.NET编程Tips
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
為什么要有活動目錄,什么是活動目錄,它有什么用 :活動目錄主要用在分布式的環(huán)境中。在分布式環(huán)境中,要求有各種信息可以被各種應用很方便地訪問讀取?;顒幽夸浾綖榉植际江h(huán)境中的信息提供一種訪問途徑。它提供了一個公共的區(qū)域來保存分布式環(huán)境中的各種信息,并且對這些信息進行定位。從開發(fā)人員角度看活動目錄,可以理解活動目錄是一種存放了應用程序所需要的特定資源信息的“數(shù)據(jù)庫”?;顒幽夸涍€對這些資源信息的讀取和查詢進行了優(yōu)化。 容器和非容器 :活動目錄中的資源信息被組織成一個層次結(jié)構(gòu)。這個層次結(jié)構(gòu)中的每一個實體都被簡稱為對象。換句話說,活動目錄中創(chuàng)建對象時,是把它們創(chuàng)建在一個層次結(jié)構(gòu)中的。該結(jié)構(gòu)由兩種類型的對象組成:Container(容器)和非Container(非容器)。容器可容納非容器或下一級的容器。而非容器則不再包含其他對象,因此也常被成為葉或葉子對象。在安裝完活動目錄后,操作系統(tǒng)已經(jīng)默認自動創(chuàng)建了很多的Container,如Users, Builtin等。 ADsPath、DN、RDN :在活動目錄中層次結(jié)構(gòu)的路徑被稱為ADsPath,可用來唯一標志一個對象(另外唯一標志對象的方法是使用GUID)。ADsPath常用的表示為:LDAP://DC=microsoft,DC=com。例如,有域被命名為mydomain.local,則它的ADsPath表示為:LDAP://DC=mydomain,DC=local。其中DC是Domain Component(域組件)的縮寫,它只用于表示域的根。DN是Distinguished Name(唯一標識)的縮寫,RDN是Relative Distinguished Name(相對唯一標識)的縮寫。DN用來在一個完整的目錄信息樹中唯一表示一個對象的名稱,而RDN是指在該對象的父容器中唯一表示它的名稱。下面看個示例:在mydomain.local域中用戶容器中超級管理員帳號的ADsPath為:LDAP://CN=Administrator,CN=Users,DC=mydomain,DC=local,其DN為(注意沒有了LDAP:// 這個前綴):CN=Administrator,CN=Users,DC=mydomain,DC=local,其RDN為(即在Users容器中的名稱):CN=Administrator。其中CN是Common Name(公用名稱)的縮寫。 OU :OU是Organizational Unit(組織單元)的縮寫。OU是容器對象,它主要從邏輯的角度來管理和組織活動目錄域。例如,當你公司內(nèi)部打算讓銷售部經(jīng)理有權(quán)限管理自己整個銷售部門資源信息時,一種方法就是為銷售部門單獨創(chuàng)建一個名為Sales的OU,然后讓銷售部經(jīng)理在受限條件下實現(xiàn)其部門資源信息的“自治”。 更多基礎概念,可以參考這里?。 關于LDAP及其語法 ,可以參考《理解LDAP》(上,下)。 Naming Context :活動目錄被分成許多部分,稱之為分區(qū)或者Naming Context,簡稱NC。其中主要有三個部分:Domain NC,Configuration NC,Schema NC。這也就是你打開ADSIEDIT.msc時首先看到的已經(jīng)加載的三個活動目錄分區(qū)。Domain NC用于保存用戶、組和組織單元的相關信息。Configuration NC用于保存整個域森林中的配置數(shù)據(jù)信息。而Schema NC負責保存與在活動目錄中能夠創(chuàng)建的所有的對象和屬性集相關的數(shù)據(jù)。例如,在mydomain.local域中,Domain NC的ADsPath為:LDAP://DC=mydomain,DC=local。Configuration NC的ADsPath為:LDAP://CN=Configuration,DC=mydomain,DC=local。Schema NC的ADsPath為:LDAP://CN=Schema,CN=Configuration,DC=mydomain,DC=local。 AD/ADAM程序訪問接口示意圖: System.DirectoryServices :System.DirecotryServices命名空間下有兩個主要的類:DirectoryEntry和DirectorySearcher。其中DirectoryEntry類用于表示活動目錄中任何一個對象。你可以通過DirectoryEntry對活動目錄里的對象進行修改其屬性、移動、重命名、列舉其內(nèi)部子對象、創(chuàng)建子對象、刪除子對象、獲取起父對象等等操作。例如: using System.DirectoryServices; DirectoryEntry entry = new DirectoryEntry(ADsPath); Console.WriteLine(entry.Path); Console.WriteLine(entry.Name); Console.WriteLine(entry.GUID); 對于活動目錄對象的綁定路徑ADsPath,你可以用 LDAP://ServerName/DN 來綁定指定服務器和DN的活動目錄對象。另外,DirectoryEntry還可以進一步指定用戶名和密碼,或者用戶名和密碼外加安全驗證方式進行對象綁定。 DirectoryEntry的屬性示意圖 : 活動目錄對象的屬性分為單值屬性和多值屬性兩類。例如上圖中,CN就是單值屬性,而memberOf則為多值屬性。對于多值屬性,可以用循環(huán)語句for或foreach進行列舉。 DirectorySearcher目錄查詢 :DirectorySearcher實例有兩個主要方法:FindAll()和FindOne()。FindAll()是獲取該對象的所有子對象集合;而FindOne()則獲取查詢到的第一個子對象。對于DirectorySearcher實例,其也有SearchRoot、SearchScope、Filter三個主要屬性。其中,SearchRoot表示在AD層次結(jié)構(gòu)中要開始搜索的節(jié)點;SearchScope表示搜索范圍;而Filter則表示LDAP查詢語句的過濾命令字符串,例如 (&(objectCategory=person)(objectClass=user)) 表示列舉所有用戶對象中的人員對象。而對于搜索范圍SearchScope,則又分為 Base、OneLevel、Subtree三種。其中,Base表示要那個搜索的根節(jié)點;OneLevel表示在同一個層次中搜索;Subtree則表示在包括根節(jié)點的所有節(jié)點的搜索。其示意圖如下:使用SQLServer查詢分析器查詢活動目錄數(shù)據(jù)的實現(xiàn)方法 :為AD創(chuàng)建一個鏈接服務器(你可以在企業(yè)管理器的具體SQLServer服務器里的“安全性”里看到該項)。在查詢分析器中執(zhí)行下面命令即可: sp_addlinkedserver 'ADSI', 'Active Directory Service Interfaces', 'ADSDSOObject', 'adsdatasource' 現(xiàn)在你就可以在查詢分析器中查詢AD數(shù)據(jù)了。例如下面查詢語句: SELECT * FROM OpenQuery(ADSI, 'SELECT title, displayName, sAMAccountName, givenName, telephoneNumber, facsimileTelephoneNumber, sn FROM ''LDAP://DC=mydomain,DC=local'' where objectClass = ''User''') ADAM--活動目錄應用程序模式 :ADAM,全稱為Active Directory Application Mode,它是一個可運行在WinXP Professional和Win2k3上的目錄服務,可簡單的看作是AD的一個簡化版本。但是,ADAM和AD是無法比較的,因為它們的側(cè)重點和應用領域是不同的:AD是主要側(cè)重網(wǎng)絡基礎構(gòu)造,它是以系統(tǒng)服務運行,并需要配以DNS。而ADAM則主要是為應用程序服務的,它是以用戶服務運行,且不需要DNS。同一臺計算機上可以運行多個ADAM實例,例如可以為每個應用程序配置一個ADAM實例。你可以在 這里 下載到ADAM。
總結(jié)
以上是生活随笔 為你收集整理的活动目录.NET编程Tips 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔 推薦給好友。