|
目錄服務(wù)技術(shù)介紹——ADSI 潘愛民
北京大學(xué)計(jì)算機(jī)科學(xué)技術(shù)研究所 (100871)
【摘要】本文介紹了Microsoft提出的活動(dòng)目錄服務(wù)接口(ADSI)技術(shù)。文章首先講述了ADSI的結(jié)構(gòu),然后介紹了ADSI的程序設(shè)計(jì)方法,最后通過例子簡單說明了ADSI的用法。
一、ADSI簡介
ADSI (Active Directory Services Interface)是Microsoft新推出的一項(xiàng)技術(shù),它統(tǒng)一了許多底層服務(wù)的編程接口,程序員可以使用一致的對(duì)象技術(shù)來訪問這些底層服務(wù)。ADSI把這些服務(wù)的公共部分提取出來,同時(shí)隔離出相異的部分,程序員可以用統(tǒng)一的接口訪問底層服務(wù)的公共部分,并延伸到底層服務(wù)的專有部分。
為了說明ADSI的接口標(biāo)準(zhǔn)和用法,首先我們解釋幾個(gè)重要的概念:
目錄(Directory):目錄類似于一個(gè)數(shù)據(jù)庫,它通常包含一些描述性的、基于屬性的信息。由于目錄中的信息被讀訪問的頻率比寫訪問的頻率要高得多,所以,目錄并不象數(shù)據(jù)庫那樣必須實(shí)現(xiàn)復(fù)雜的事務(wù)或者回滾機(jī)制。在許可的條件下,目錄的更新操作通常是簡單的更改操作。對(duì)于大量的信息查找或者信息檢索要求,目錄應(yīng)該快速給出應(yīng)答。為了提高性能和可靠性,并降低應(yīng)答時(shí)間,分布式的目錄信息可能需要在廣闊的網(wǎng)絡(luò)范圍內(nèi)進(jìn)行復(fù)制操作。因?yàn)橐肓藦?fù)制機(jī)制,所以在復(fù)制點(diǎn)之間,暫時(shí)的不一致是難以避免的,只要最終能夠同步即可。
目錄服務(wù)(Directory Service):目錄服務(wù)所表達(dá)的含義與目錄緊密相關(guān),它是指目錄信息源與針對(duì)這些信息源的服務(wù)結(jié)合起來使得這些信息可被用戶使用。
一個(gè)典型的目錄服務(wù)具有以下幾個(gè)特性:
□安全特性。管理員可以對(duì)目錄強(qiáng)制使用安全特性,以便保護(hù)目錄信息不被非法獲取。
□分布特性。一個(gè)目錄可以跨越機(jī)器邊界,也即目錄信息可以在網(wǎng)絡(luò)上的不同機(jī)器上。
□復(fù)制特性。目錄信息應(yīng)盡量讓更廣闊范圍的用戶所利用。
目錄服務(wù)既是一個(gè)信息管理工具,同時(shí)也是一個(gè)面向最終用戶的工具。在網(wǎng)絡(luò)上各種各樣的對(duì)象數(shù)量迅速增長的今天,目錄服務(wù)非常有意義。類似于網(wǎng)絡(luò)硬件設(shè)施的集線器(hub)的概念,目錄服務(wù)相當(dāng)于軟件集線器。
活動(dòng)目錄(Active Directory):活動(dòng)目錄是Microsoft在Windows 2000中實(shí)現(xiàn)的目錄服務(wù),它不僅實(shí)現(xiàn)了作為一般目錄服務(wù)的特性,包括安全特性、分布特性以及復(fù)制特性等。它同時(shí)也擴(kuò)充了一些新的特性,以便使得目錄信息更加易于管理和搜索。活動(dòng)目錄在實(shí)現(xiàn)目錄服務(wù)的同時(shí),充分考慮了目錄信息的可伸縮性,從包含上百個(gè)對(duì)象的單服務(wù)器結(jié)構(gòu)到成千上百服務(wù)器的百萬以上的對(duì)象信息,它都可以正常工作。
目錄服務(wù)是一個(gè)抽象的概念,從用戶使用的角度來看,通常最為關(guān)心的是目錄的名字空間以及相關(guān)的訪問協(xié)議。名字空間限定了目錄服務(wù)的描述能力,而訪問協(xié)議必須要標(biāo)準(zhǔn)化,以便支持分布式特性。訪問協(xié)議的標(biāo)準(zhǔn)為LDAP(Light-weight Directory Access Protocol)協(xié)議,它是建立在TCP/IP基礎(chǔ)上的目錄服務(wù)協(xié)議,它的信息模型包括了數(shù)據(jù)和名字空間。與其它Internet協(xié)議不同的是,LDAP還提供了一組API以便簡化LDAP應(yīng)用的編寫工作。
LDAP也遵守客戶-服務(wù)器模型,包含目錄數(shù)據(jù)的一個(gè)或多個(gè)LDAP服務(wù)器建立起一個(gè)LDAP目錄樹,LDAP客戶通過網(wǎng)絡(luò)連接到服務(wù)器,向服務(wù)器發(fā)出請(qǐng)求或者執(zhí)行一些操作。LDAP服務(wù)器響應(yīng)客戶的請(qǐng)求,或者把客戶的請(qǐng)求指引到其它包含客戶指定信息的另外的LDAP服務(wù)器上。不管客戶連接到哪個(gè)LDAP服務(wù)器上,他所看到的目錄樹視圖應(yīng)該是一樣的。
Microsoft提供了ADSI用于開發(fā)客戶方的目錄服務(wù)應(yīng)用系統(tǒng)。ADSI是一組COM接口標(biāo)準(zhǔn),它通過LDAP協(xié)議訪問目錄服務(wù)。ADSI實(shí)現(xiàn)了目錄服務(wù)的客戶模型,利用ADSI,我們可以在Windows平臺(tái)上開發(fā)目錄服務(wù)客戶應(yīng)用。如果不使用ADSI,那么用到目錄服務(wù)的應(yīng)用必須編寫代碼處理每個(gè)它所用到的名字空間結(jié)構(gòu),當(dāng)有新的名字空間加入時(shí),必須修改代碼以適應(yīng)變化,而且,在訪問目錄服務(wù)時(shí),可能要調(diào)用到底層與網(wǎng)絡(luò)有關(guān)的API函數(shù)。
從技術(shù)角度來看,ADSI用到了與ADO(Active Data Object,Microsoft推出的一致數(shù)據(jù)訪問接口)非常類似的技術(shù),它通過一組雙接口(dual interface,既可以通過vtable也可以通過自動(dòng)化接口IDispatch訪問屬性和方法的自動(dòng)化對(duì)象)提供了目錄服務(wù)功能?蛻舫绦蚩梢愿鶕(jù)性能要求或者開發(fā)語言的特點(diǎn)選擇不同的編程模型。
由于ADSI使用了COM和自動(dòng)化對(duì)象技術(shù),所以ADSI的編程用法比較簡單,但要真正掌握ADSI,首先必須理解ADSI接口標(biāo)準(zhǔn)中用到的一些基本概念,下面列出如下:
(1) 名字空間(Namespace)。名字空間是LDAP的基本概念,也是ADSI的基本概念。名字空間是一個(gè)有界區(qū)域,每一個(gè)給定的名字都必須在特定的名字空間中被解析,解析的過程是把名字翻譯成某個(gè)對(duì)象或者名字所代表的信息。比如,電話簿形成了一個(gè)名字空間,每一個(gè)電話訂戶的名字被解析成電話號(hào)碼;NTFS文件系統(tǒng)也構(gòu)成了一個(gè)名字空間,每個(gè)文件名可被解析成文件對(duì)象;顒(dòng)目錄也形成了一個(gè)名字空間,目錄中的每個(gè)對(duì)象可被解析到對(duì)象本身。
(2) 對(duì)象(Object)或目錄對(duì)象(Directory Object)。對(duì)象是指一組屬性的集合,它往往代表了有形的實(shí)體,比如用戶、文件等。對(duì)象通過屬性描述它的基本特征,比如,用戶的屬性可能包括姓名、電話號(hào)碼、電子郵件地址等。
(3) 包容器(Container)。包容器是名字空間的一部分,與目錄對(duì)象一樣,它也有屬性,但與目錄對(duì)象不同的是,它不代表有形的實(shí)體,而是其它目錄對(duì)象或者包容器的容器。
(4) 目錄樹(Directory Tree)。在一個(gè)名字空間中,由包容器和對(duì)象構(gòu)成了一個(gè)完整的樹結(jié)構(gòu)。在ADSI中,樹是基本的結(jié)構(gòu),從每一個(gè)包容器對(duì)象作為起點(diǎn),層層深入,都可以構(gòu)成一棵子樹。一個(gè)簡單的目錄可以構(gòu)成一棵樹,一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)或者一個(gè)NT域也可以構(gòu)成一棵樹。
(5) 標(biāo)識(shí)名(Distinguished Name,簡稱為DN名)。活動(dòng)目錄中的每一個(gè)對(duì)象都有一個(gè)標(biāo)識(shí)名,標(biāo)識(shí)名包含對(duì)象在名字空間中的完整路徑名,從基本的名字空間包容器開始,通過層層包容器對(duì)象,一直到達(dá)對(duì)象節(jié)點(diǎn)。不同的名字空間有不同的標(biāo)識(shí)名命名規(guī)則,ADSI提供了一個(gè)命名框架,通過名字即可識(shí)別相應(yīng)的目錄服務(wù)和名字空間。
(6) 對(duì)象標(biāo)識(shí)符(Object Identity)。對(duì)象除了其DN名之外,它還有一個(gè)128位的全局標(biāo)識(shí)符(GUID)。在ADSI內(nèi)部,對(duì)象是通過標(biāo)識(shí)符來識(shí)別的,而不是名字。當(dāng)對(duì)象被創(chuàng)建時(shí),目錄服務(wù)代理程序首先為對(duì)象分配一個(gè)標(biāo)識(shí)符,客戶可以通過對(duì)象的“objectGUID”屬性獲得標(biāo)識(shí)符,這是一個(gè)只讀屬性,不管對(duì)象被移動(dòng)或者改名,它的標(biāo)識(shí)符都不會(huì)被改變。
(7) 命名環(huán)境(Naming Context)。命名環(huán)境是指任何一個(gè)目錄子樹,在ADSI中,一個(gè)服務(wù)器至少包含三個(gè)命名環(huán)境:表結(jié)構(gòu)(schema)、配置(configuration)和用戶命名環(huán)境。
(8) 域(Domain)。在ADSI中,域是Windows NT網(wǎng)絡(luò)的安全性邊界。ADSI由一個(gè)或多個(gè)域組成。在單獨(dú)的計(jì)算機(jī)上,域即指計(jì)算機(jī)本身。當(dāng)多個(gè)域通過信任關(guān)系連接起來之后,所有的域共享公共的表結(jié)構(gòu)、配置、全局目錄(global catalog),從而形成域樹(domain tree),多個(gè)域樹連接在一起形成域林(domain forest)。域林中的所有域共享公共的表結(jié)構(gòu)、配置、全局目錄(global catalog)。
(9) 站點(diǎn)(site)。站點(diǎn)是指一個(gè)或多個(gè)通過TCP/IP連接起來的子網(wǎng)。通常,站點(diǎn)內(nèi)部的子網(wǎng)通過可靠的網(wǎng)絡(luò)連接起來。
從編程技術(shù)來看,ADSI只是一些COM接口和COM組件的標(biāo)準(zhǔn),但ADSI表達(dá)信息的方式是革命性的。名字空間的概念體現(xiàn)了ADSI表達(dá)信息的廣泛性;域和站點(diǎn)的概念體現(xiàn)了ADSI的空間廣闊性,從單機(jī)到局域網(wǎng),再到廣域網(wǎng),都可以納入ADSI的表達(dá)范圍;命名環(huán)境的概念體現(xiàn)了ADSI對(duì)信息的自組織、自描述特性。對(duì)象、包容器、目錄樹的概念體現(xiàn)了ADSI表達(dá)信息的基本結(jié)構(gòu)方式。對(duì)象標(biāo)識(shí)名和標(biāo)識(shí)符兩種機(jī)制結(jié)合起來,使得目錄對(duì)象既有直接面對(duì)最終用戶的名字特性,又有內(nèi)部唯一標(biāo)識(shí)的可編程特性。
在ADSI出現(xiàn)之前,實(shí)際上,我們已經(jīng)有了很多可按目錄方式管理的應(yīng)用系統(tǒng),比如文件系統(tǒng)、用戶管理、電子郵件應(yīng)用等等。ADSI抽取了這些應(yīng)用對(duì)象的共性,通過一組標(biāo)準(zhǔn)化的接口實(shí)現(xiàn)目錄對(duì)象的管理。雖然,我們還不能看到Windows 2000中ADSI的最終形式,但是在Windows NT 4.0版本基礎(chǔ)上的一些應(yīng)用系統(tǒng),已經(jīng)實(shí)現(xiàn)了ADSI標(biāo)準(zhǔn),最為典型的是Microsoft Exchange Server,它充分體現(xiàn)了ADSI的基本概念。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!