為什么要有活動目錄,什么是活動目錄,它有什么用:活動目錄主要用在分布式的環(huán)境中。在分布式環(huán)境中,要求有各種信息可以被各種應用很方便地訪問讀取。活動目錄正式為分布式環(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)其部門資源信息的“自治”。
更多基礎(chǔ)概念,可以參考這里?。
關(guān)于LDAP及其語法,可以參考《理解LDAP》(上,下)。
Naming Context:活動目錄被分成許多部分,稱之為分區(qū)或者Naming Context,簡稱NC。其中主要有三個部分:Domain NC,Configuration NC,Schema NC。這也就是你打開ADSIEDIT.msc時首先看到的已經(jīng)加載的三個活動目錄分區(qū)。Domain NC用于保存用戶、組和組織單元的相關(guān)信息。Configuration NC用于保存整個域森林中的配置數(shù)據(jù)信息。而Schema NC負責保存與在活動目錄中能夠創(chuàng)建的所有的對象和屬性集相關(guān)的數(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。
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);
容器和非容器:活動目錄中的資源信息被組織成一個層次結(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)其部門資源信息的“自治”。
更多基礎(chǔ)概念,可以參考這里?。
關(guān)于LDAP及其語法,可以參考《理解LDAP》(上,下)。
Naming Context:活動目錄被分成許多部分,稱之為分區(qū)或者Naming Context,簡稱NC。其中主要有三個部分:Domain NC,Configuration NC,Schema NC。這也就是你打開ADSIEDIT.msc時首先看到的已經(jīng)加載的三個活動目錄分區(qū)。Domain NC用于保存用戶、組和組織單元的相關(guān)信息。Configuration NC用于保存整個域森林中的配置數(shù)據(jù)信息。而Schema NC負責保存與在活動目錄中能夠創(chuàng)建的所有的對象和屬性集相關(guān)的數(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。
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);