程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 活動目錄.NET編程Tips

活動目錄.NET編程Tips

編輯:C#入門知識

  1. 為什麼要有活動目錄,什麼是活動目錄,它有什麼用:活動目錄主要用在分布式的環境中。在分布式環境中,要求有各種信息可以被各種應用很方便地訪問讀取。活動目錄正式為分布式環境中的信息提供一種訪問途徑。它提供了一個公共的區域來保存分布式環境中的各種信息,並且對這些信息進行定位。從開發人員角度看活動目錄,可以理解活動目錄是一種存放了應用程序所需要的特定資源信息的“數據庫”。活動目錄還對這些資源信息的讀取和查詢進行了優化。
  2. 容器和非容器:活動目錄中的資源信息被組織成一個層次結構。這個層次結構中的每一個實體都被簡稱為對象。換句話說,活動目錄中創建對象時,是把它們創建在一個層次結構中的。該結構由兩種類型的對象組成:Container(容器)和非Container(非容器)。容器可容納非容器或下一級的容器。而非容器則不再包含其他對象,因此也常被成為葉子對象。在安裝完活動目錄後,操作系統已經默認自動創建了很多的Container,如Users, Builtin等。
  3. ADsPath、DN、RDN:在活動目錄中層次結構的路徑被稱為ADsPath,可用來唯一標志一個對象(另外唯一標志對象的方法是使用GUID)。ADsPath常用的表示為:DC=microsoft,DC=com/">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(公用名稱)的縮寫。
  4. OU:OU是Organizational Unit(組織單元)的縮寫。OU是容器對象,它主要從邏輯的角度來管理和組織活動目錄域。例如,當你公司內部打算讓銷售部經理有權限管理自己整個銷售部門資源信息時,一種方法就是為銷售部門單獨創建一個名為Sales的OU,然後讓銷售部經理在受限條件下實現其部門資源信息的“自治”。
  5. 更多基礎概念,可以參考這裡?。
  6. 關於LDAP及其語法,可以參考《理解LDAP》(上,下)。
  7. Naming Context:活動目錄被分成許多部分,稱之為分區或者Naming Context,簡稱NC。其中主要有三個部分:Domain NC,Configuration NC,Schema NC。這也就是你打開ADSIEDIT.msc時首先看到的已經加載的三個活動目錄分區。Domain NC用於保存用戶、組和組織單元的相關信息。Configuration NC用於保存整個域森林中的配置數據信息。而Schema NC負責保存與在活動目錄中能夠創建的所有的對象和屬性集相關的數據。例如,在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。
  8. AD/ADAM程序訪問接口示意圖:

  9. System.DirectoryServices:System.DirecotryServices命名空間下有兩個主要的類:DirectoryEntry和DirectorySearcher。其中DirectoryEntry類用於表示活動目錄中任何一個對象。你可以通過DirectoryEntry對活動目錄裡的對象進行修改其屬性、移動、重命名、列舉其內部子對象、創建子對象、刪除子對象、獲取起父對象等等操作。例如:
    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還可以進一步指定用戶名和密碼,或者用戶名和密碼外加安全驗證方式進行對象綁定。
  10. DirectoryEntry的屬性示意圖


    活動目錄對象的屬性分為單值屬性多值屬性兩類。例如上圖中,CN就是單值屬性,而memberOf則為多值屬性。對於多值屬性,可以用循環語句for或foreach進行列舉。
  11. DirectorySearcher目錄查詢:DirectorySearcher實例有兩個主要方法:FindAll()和FindOne()。FindAll()是獲取該對象的所有子對象集合;而FindOne()則獲取查詢到的第一個子對象。對於DirectorySearcher實例,其也有SearchRoot、SearchScope、Filter三個主要屬性。其中,SearchRoot表示在AD層次結構中要開始搜索的節點;SearchScope表示搜索范圍;而Filter則表示LDAP查詢語句的過濾命令字符串,例如 (&(objectCategory=person)(objectClass=user)) 表示列舉所有用戶對象中的人員對象。而對於搜索范圍SearchScope,則又分為 Base、OneLevel、Subtree三種。其中,Base表示要那個搜索的根節點;OneLevel表示在同一個層次中搜索;Subtree則表示在包括根節點的所有節點的搜索。其示意圖如下:

  12. 使用SQLServer查詢分析器查詢活動目錄數據的實現方法:為AD創建一個鏈接服務器(你可以在企業管理器的具體SQLServer服務器裡的“安全性”裡看到該項)。在查詢分析器中執行下面命令即可:
    sp_addlinkedserver ADSI, Active Directory Service Interfaces, ADSDSOObject, adsdatasource
    現在你就可以在查詢分析器中查詢AD數據了。例如下面查詢語句:
    SELECT * FROM OpenQuery(ADSI, SELECT title, displayName, sAMAccountName, givenName, telephoneNumber, facsimileTelephoneNumber, sn FROM LDAP://DC=mydomain,DC=local where objectClass = User)
  13. ADAM--活動目錄應用程序模式:ADAM,全稱為Active Directory Application Mode,它是一個可運行在WinXP Professional和Win2k3上的目錄服務,可簡單的看作是AD的一個簡化版本。但是,ADAM和AD是無法比較的,因為它們的側重點和應用領域是不同的:AD是主要側重網絡基礎構造,它是以系統服務運行,並需要配以DNS。而ADAM則主要是為應用程序服務的,它是以用戶服務運行,且不需要DNS。同一台計算機上可以運行多個ADAM實例,例如可以為每個應用程序配置一個ADAM實例。你可以在 這裡 下載到ADAM。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved