目錄服務技術介紹 ADSI(一)

2021-09-05 14:17:00 字數 3870 閱讀 5699

目錄服務技術介紹——adsi

潘愛民

北京大學計算機科學技術研究所 (100871)

【摘要】本文介紹了microsoft提出的活動目錄服務介面(adsi)技術。文章首先講述了adsi的結構,然後介紹了adsi的

程式設計

方法,最後通過例子簡單說明了adsi的用法。

一、adsi簡介

adsi (active directory services inte***ce)是microsoft新推出的一項技術,它統一了許多底層服務的程式設計介面,程式設計師可以使用一致的物件技術來訪問這些底層服務。adsi把這些服務的公共部分提取出來,同時隔離出相異的部分,程式設計師可以用統一的介面訪問底層服務的公共部分,並延伸到底層服務的專有部分。

為了說明adsi的介面標準和用法,首先我們解釋幾個重要的概念:

目錄(directory):目錄類似於乙個資料庫,它通常包含一些描述性的、基於屬性的資訊。由於目錄中的資訊被讀訪問的頻率比寫訪問的頻率要高得多,所以,目錄並不象資料庫那樣必須實現複雜的事務或者回滾機制。在許可的條件下,目錄的更新操作通常是簡單的更改操作。對於大量的資訊查詢或者資訊檢索要求,目錄應該快速給出應答。為了提高效能和可靠性,並降低應答時間,分布式的目錄資訊可能需要在廣闊的網路範圍內進行複製操作。因為引入了複製機制,所以在複製點之間,暫時的不一致是難以避免的,只要最終能夠同步即可。

乙個典型的目錄服務具有以下幾個特性:

□    安全特性。管理員可以對目錄強制使用安全特性,以便保護目錄資訊不被非法獲取。

□    分布特性。乙個目錄可以跨越機器邊界,也即目錄資訊可以在網路上的不同機器上。

□    複製特性。目錄資訊應盡量讓更廣闊範圍的使用者所利用。

目錄服務既是乙個資訊管理工具,同時也是乙個面向終端使用者的工具。在網路上各種各樣的物件數量迅速增長的今天,目錄服務非常有意義。類似於網路硬體設施的集線器(hub)的概念,目錄服務相當於軟體集線器。

活動目錄(active directory):活動目錄是microsoft在windows 2000中實現的目錄服務,它不僅實現了作為一般目錄服務的特性,包括安全特性、分布特性以及複製特性等。它同時也擴充了一些新的特性,以便使得目錄資訊更加易於管理和搜尋。活動目錄在實現目錄服務的同時,充分考慮了目錄資訊的可伸縮性,從包含上百個物件的單伺服器

結構到成千上百伺服器的百萬以上的物件資訊,它都可以正常工作。

目錄服務是乙個抽象的概念,從使用者使用的角度來看,通常最為關心的是目錄的名字空間以及相關的訪問協議。名字空間限定了目錄服務的描述能力,而訪問協議必須要標準化,以便支援分布式特性。訪問協議的標準為ldap(light-weight directory access

protocol)協議,它是建立在tcp/ip基礎上的目錄服務協議,它的資訊模型包括了資料和名字空間。與其它internet協議不同的是,ldap還提供了一組api以便簡化ldap應用的編寫工作。

ldap也遵守客戶-伺服器模型,包含目錄資料的乙個或多個ldap伺服器建立起乙個ldap目錄樹,ldap客戶通過網路連線到伺服器,向伺服器發出請求或者執行一些操作。ldap伺服器響應客戶的請求,或者把客戶的請求指引到其它包含客戶指定資訊的另外的ldap伺服器上。不管客戶連線到哪個ldap伺服器上,他所看到的目錄樹檢視應該是一樣的。

microsoft提供了adsi用於開發客戶方的目錄服務應用系統。adsi是一組com介面標準,它通過ldap協議訪問目錄服務。adsi實現了目錄服務的客戶模型,利用adsi,我們可以在windows平台上開發目錄服務客戶應用。如果不使用adsi,那麼用到目錄服務的應用必須編寫**處理每個它所用到的名字空間結構,當有新的名字空間加入時,必須修改**以適應變化,而且,在訪問目錄服務時,可能要呼叫到底層與網路有關的api函式。

從技術角度來看,adsi用到了與ado(active data object,microsoft推出的一致資料訪問介面)非常類似的技術,它通過一組雙介面(dual inte***ce,既可以通過vtable也可以通過自動化介面idispatch訪問屬性和方法的自動化物件)提供了目錄服務功能。客戶程式可以根據效能要求或者開發語言

的特點擊擇不同的程式設計模型。

由於adsi使用了com和自動化物件技術,所以adsi的程式設計用法比較簡單,但要真正掌握adsi,首先必須理解adsi介面標準中用到的一些基本概念,下面列出如下:

(1) 名字空間(namespace)。名字空間是ldap的基本概念,也是adsi的基本概念。名字空間是乙個有界區域,每乙個給定的名字都必須在特定的名字空間中被解析,解析的過程是把名字翻譯成某個物件或者名字所代表的資訊。比如,**簿形成了乙個名字空間,每乙個**訂戶的名字被解析成**號碼;ntfs檔案系統也構成了乙個名字空間,每個檔名可被解析成檔案物件。活動目錄也形成了乙個名字空間,目錄中的每個物件可被解析到物件本身。

(2) 物件(object)或目錄物件(directory object)。物件是指一組屬性的集合,它往往代表了有形的實體,比如使用者、檔案等。物件通過屬性描述它的基本特徵,比如,使用者的屬性可能包括姓名、**號碼、電子郵件位址等。

(3) 包容器(container)。包容器是名字空間的一部分,與目錄物件一樣,它也有屬性,但與目錄物件不同的是,它不代表有形的實體,而是其它目錄物件或者包容器的容器。

(4) 目錄樹(directory tree)。在乙個名字空間中,由包容器和物件構成了乙個完整的樹結構。在adsi中,樹是基本的結構,從每乙個包容器物件作為起點,層層深入,都可以構成一棵子樹。乙個簡單的目錄可以構成一棵樹,乙個計算機網路或者乙個nt域也可以構成一棵樹。

(5) 標識名(distinguished name,簡稱為dn名)。活動目錄中的每乙個物件都有乙個標識名,標識名包含物件在名字空間中的完整路徑名,從基本的名字空間包容器開始,通過層層包容器物件,一直到達物件節點。不同的名字空間有不同的標識名命名規則,adsi提供了乙個命名框架,通過名字即可識別相應的目錄服務和名字空間。

(6) 物件識別符號(object identity)。物件除了其dn名之外,它還有乙個128位的全域性識別符號(guid)。在adsi內部,物件是通過識別符號來識別的,而不是名字。當物件被建立時,目錄服務**程式首先為物件分配乙個識別符號,客戶可以通過物件的「objectguid」屬性獲得識別符號,這是乙個唯讀屬性,不管物件被移動或者改名,它的識別符號都不會被改變。

(7) 命名環境(naming context)。命名環境是指任何乙個目錄子樹,在adsi中,乙個伺服器至少包含三個命名環境:表結構(schema)、配置(configuration)和使用者命名環境。

(8) 域(domain)。在adsi中,域是windows nt網路的安全性邊界。adsi由乙個或多個域組成。在單獨的計算機上,域即指計算機本身。當多個域通過信任關係連線起來之後,所有的域共享公共的表結構、配置、全域性目錄(global catalog),從而形成域樹(domain tree),多個域樹連線在一起形成域林(domain forest)。域林中的所有域共享公共的表結構、配置、全域性目錄(global catalog)。

(9) 站點(site)。站點是指乙個或多個通過tcp/ip連線起來的子網。通常,站點內部的子網通過可靠的網路連線起來。

從程式設計技術來看,adsi只是一些com介面和com元件的標準,但adsi表達資訊的方式是革命性的。名字空間的概念體現了adsi表達資訊的廣泛性;域和站點的概念體現了adsi的空間廣闊性,從單機到區域網,再到廣域網,都可以納入adsi的表達範圍;命名環境的概念體現了adsi對資訊的自組織、自描述特性。物件、包容器、目錄樹的概念體現了adsi表達資訊的基本結構方式。物件標識名和識別符號兩種機制結合起來,使得目錄物件既有直接面對終端使用者的名字特性,又有內部唯一標識的可程式設計特性。

在adsi出現之前,實際上,我們已經有了很多可按目錄方式管理的應用系統,比如檔案系統、使用者管理、電子郵件應用等等。adsi抽取了這些應用物件的共性,通過一組標準化的介面實現目錄物件的管理。雖然,我們還不能看到windows 2000中adsi的最終形式,但是在windows nt 4.0版本基礎上的一些應用系統,已經實現了adsi標準,最為典型的是microsoft exchange server,它充分體現了adsi的基本概念。

目錄服務技術介紹 ADSI(二)

下面列出目前已經實現的adsi目錄服務 1 windows nt域使用者管理。2 ldap exchange server 目錄服務。3 internet information server 4 nds novell netware directory services 目前,在乙個企業內部存在多...

目錄服務技術介紹 ADSI(三)

表1 iads介面的屬性 屬性名型別說明 name bstr 物件名字 adspath bstr 物件的全路徑 class bstr 物件的類別 表結構物件的路徑 guid bstr 物件的全域性唯一標識 guid parent bstr 父包容器的路徑 schema bstr 表結構物件的路徑 表...

目錄服務技術介紹 ADSI(五)

由於目錄物件的標識名可能在某些操作的影響下被改變,但目錄物件的objectguid屬性永遠不會改變,所以我們可以直接在ldap路徑中指定此guid,客戶程式直接繫結到此物件,下面的 顯示了這種用法 iads pads lpwstr pszfilter l ldap myserver hr adsge...