|
第21章 ADSI和AD介紹 本章討論活動(dòng)目錄服務(wù)接口(Active Directory Service Interface,ADSI)和活動(dòng)目錄(Active Directory,AD),以及怎樣用ASP訪問目錄服務(wù)器和使用它們所包含的信息。這里的目錄服務(wù)實(shí)際上是指一種特定的數(shù)據(jù)庫,該數(shù)據(jù)庫能夠有效的查找網(wǎng)絡(luò)資源目錄的一類信息。AD是一種網(wǎng)絡(luò)資源目錄,而ADSI是能夠訪問任何目錄的Microsoft技術(shù)。其他公司也有類似的的技術(shù),例如Sun公司的JNDI,但因本書的是針對(duì)Windows的,所以在此只討論ADSI。 不要混淆ADSI和AD,它們是兩種截然不同的技術(shù)。盡管如此,因?yàn)檫@兩種技術(shù)確實(shí)是密切的相互作用,我們還是將他們放在同一章里討論。AD是隨著Windows 2000誕生的大而新的目錄,包含了所有的安全性和管理本地的網(wǎng)域所需要的其他信息。另一方面,ADSI是一套Microsoft作為訪問任何目錄的方法而推出的COM接口,這意味著ADSI也是訪問AD的通常方法。盡管AD只存在于Windows 2000 Server和Windows 2000 Advanced Server中,ADSI卻適用于所有的32位操作系統(tǒng):Windows 2000 Professional、NT 4.0和Windows 9x。 本章的目的是使讀者掌握怎樣使用ASP語言簡(jiǎn)單而又容易的訪問目錄,因此本章的重點(diǎn)是ADSI,但由于AD的重要性,本章也接觸到AD的一些相關(guān)功能。 21.1ADSI的用途 這里有兩個(gè)相關(guān)的問題。前面講過ADO,在技術(shù)上ADO符合Microsoft的UDA規(guī)范,本書第二部分里已深入討論過。ADO能訪問任何有OLE DB提供者的數(shù)據(jù)源。目錄是另一種類型的數(shù)據(jù)源,為了使用目錄,必須使用一種不同的技術(shù)——ADSI。為了理解為什么要使用ADSI,需要理解是什么使目錄不同于一般的數(shù)據(jù)源,以及ADSI能做哪些ADO不能做的事。 ADO的確是一種通用的技術(shù)。原理上,Microsoft的目錄是讓ADO可以訪問任何數(shù)據(jù)源,而不管這種數(shù)據(jù)源的內(nèi)部結(jié)構(gòu)。但又在本質(zhì)上重視關(guān)系型的數(shù)據(jù)源。這沒什么錯(cuò),但著也確實(shí)意味著如果想訪問分層結(jié)構(gòu)的數(shù)據(jù)源,ADO可能不總是最有效的辦法。因此引入ADSI,因?yàn)锳DSI正是專門分層結(jié)構(gòu)數(shù)據(jù)源而設(shè)計(jì)的。精心設(shè)計(jì)的ADSI使用戶在瀏覽樹狀結(jié)構(gòu)時(shí)感到比較容易,而ADO就沒那么輕松。 上面提到的分層結(jié)構(gòu)的數(shù)據(jù)源和目錄,它們是一回事么?它們相似,但不完全相同。下面先討論相同點(diǎn),即它們都是樹狀結(jié)構(gòu),再討論目錄區(qū)別于數(shù)據(jù)庫和數(shù)據(jù)源的特征。 分層結(jié)構(gòu)的數(shù)據(jù)源是按樹狀結(jié)構(gòu)組織起來的,對(duì)象包含著其他對(duì)象,與Windows的文件系統(tǒng)中的文件夾包含文件和文件夾一樣,而多數(shù)目錄也是這樣的結(jié)構(gòu)。 事實(shí)上,體會(huì)這一點(diǎn)最簡(jiǎn)單的方法是快速瀏覽AD的結(jié)構(gòu)。圖21-1是從adscw.exe中截取的, adscw.exe是一個(gè)通用目錄瀏覽器,可用于任何基于ADSI的目錄(包括AD)。adscw.exe是由ADSI某種原因SDK提供的。 圖21-1中有很多我們將研究的內(nèi)容,我們?cè)诤竺嬖诨貋碇v述,如果現(xiàn)在不能全看懂也不必?fù)?dān)心。請(qǐng)注意左邊點(diǎn)擊樹狀結(jié)構(gòu),它是一個(gè)標(biāo)準(zhǔn)的樹控件,清楚的顯示了AD中數(shù)據(jù)的分層排列。以CN=Simon Robinson為例,這是作者在局域網(wǎng)上的帳號(hào),它的父級(jí)CN=User。在目錄用語里,父子關(guān)系稱為包含關(guān)系。CN=User稱為一個(gè)容器,包含了CN=Simon Robinson對(duì)象。在這個(gè)AD中,CN=User實(shí)際上包含了此域中所有的用戶帳號(hào),不過實(shí)際情況不總是這種。 同樣,用戶容器也被代表域的對(duì)象DC=TopOfThePops包含這。DC=TopOfThePops容易讓人誤解,因?yàn)橛虻娜荄C=TopOfThePops,DC=Frame,DC=com,對(duì)應(yīng)于一個(gè)虛擬的URL:TopOfThePops.Fame.com(Windows 2000支持這樣的域名,而任何NT4.0的機(jī)器只能識(shí)別第一部分的TopOfThePops)。不要為這些名字的格式而擔(dān)心,這是AD專用的,你很快就會(huì)適應(yīng),CN代表普通名(Common Name),而DC代表域組件(Domain Component)。 最后,樹中的域節(jié)點(diǎn)被LDAP對(duì)象包含。LDAP代表輕量目錄訪問協(xié)議(Lightweight Directory Access Protocol),這是一個(gè)訪問目錄的工業(yè)標(biāo)準(zhǔn)協(xié)議,該協(xié)議的引入表明了AD是與LDAP相聯(lián)系的。后面將進(jìn)一步討論LDAP。 迄今為止,所做的工作指出我們正在存儲(chǔ)大量的對(duì)象信息,并正在以分層方式管理這些信息。順便提一下,這里所說的對(duì)象是通常意思下的,不是技術(shù)上的,在這里不指COM對(duì)象。AD提供了一個(gè)非常好的例子,展示了ADSI所能訪問的目錄的結(jié)構(gòu)。下面將探討AD的細(xì)節(jié),并演示目錄的典型結(jié)構(gòu)。然后就可以學(xué)習(xí)如何用ADSI去得到和修改目錄中的信息。 但首先,來看一下如何獲得所需軟件。 21.2 必需的軟件 在這一節(jié)中,由于ADSI和AD需要的軟件不同,我們將分別討論它們。 Windows 2000集成了AD。如果你的計(jì)算機(jī)運(yùn)行在Windows 2000下,并將其作為域控制器,則已經(jīng)安裝了AD,反之則不會(huì)。關(guān)鍵在于是否把Windows 2000作為域控制器。如果在一個(gè)域內(nèi)的Windows 2000工作站,由一個(gè)NT4.0的主域控制器控制,也不會(huì)有AD。 ADSI也是Windows 2000操作系統(tǒng)中的一部分,但能夠從Microsoft的Web站點(diǎn)上下載用于NT4。0和Windows 9x的ADSI。另外,可能需要ADSI SDK 來開發(fā)軟件。無論正在用什么操作系統(tǒng)。都需要下載這個(gè)SDK。它包含了各種各樣的頭文件很文檔。盡管編寫ASP程序時(shí),它不如用VB或C++編程時(shí)那么必須,但它包含了圖21-1中使用的adsvw.exe實(shí)用程序。 下面將使用adsvw.exe進(jìn)一步研究AD。adsvw.exe也叫做活動(dòng)目錄瀏覽器,這名字有些誤導(dǎo)作用。這是一個(gè)通用的目錄瀏覽器,可以檢測(cè)任何ADSI兼容的目錄,而不止是AD;顒(dòng)目錄瀏覽器是一個(gè)好工具,因?yàn)槠浔旧硎褂肁DSI搜集信息,并顯示給我們。因此,我們看到的信息的格式恰恰就是用ADSI編程時(shí)所需要的。 正如前面提到的,adsvw.exe是ADSI SDK的一部分,可以從微軟的WEB站點(diǎn)上下載。如果沒有的話,我們建議下載一個(gè)拷貝,你會(huì)發(fā)現(xiàn)對(duì)于研究目錄,它是非常有用的。 21.3 AD的內(nèi)部結(jié)構(gòu) AD包含了一個(gè)域控制器管理一個(gè)域所需的全部信息。從這個(gè)意義上講,它與NT4。0服務(wù)器中的域目錄(domain directory)是一樣的。所不同的是它符合LDAP標(biāo)準(zhǔn)。因?yàn)長(zhǎng)DAP是工業(yè)標(biāo)準(zhǔn),所以很容易編寫用標(biāo)準(zhǔn)的API函數(shù)(包括ADSI)來訪問AD的客戶程序。相比之下,NT4。0上相應(yīng)的數(shù)據(jù)庫卻是微軟專用的,通過Windows API函數(shù)只能得到少得可憐的信息。實(shí)際上,根本不能把該數(shù)據(jù)庫用作集中管理網(wǎng)絡(luò)資源的目錄,但AD可以。 另外,AD遠(yuǎn)比原有的NT4。0域目錄強(qiáng)大。它連同WINDOWS 2000一起,支持下列概念:把域本身排列成域樹(domain tree),或允許很多獨(dú)立的樹共享配置數(shù)據(jù),形成一個(gè)域林(domain forest)。還允許把個(gè)人信息象操作系統(tǒng)使用的資料一樣存儲(chǔ)進(jìn)去。 就AD中存儲(chǔ)的信息而言,實(shí)際上有兩個(gè)部分。缺省情況下,AD包含了管理一個(gè)域所需要的全部信息,如:計(jì)算機(jī)、用戶和工作組帳號(hào),以及相應(yīng)的安全權(quán)限。另一方面,AD被設(shè)計(jì)成通用的目錄,這意味著任何其他系統(tǒng)管理員認(rèn)為有用的內(nèi)容都可以存入AD。所以像用戶帳號(hào)這樣的信息也可能出現(xiàn)在薪金明細(xì)和公司組織結(jié)構(gòu)下面。AD還有一套非常完善點(diǎn)擊安全系統(tǒng),由管理員分配細(xì)致的等級(jí),決定誰具有對(duì)各式各樣信息的讀或?qū)懙臋?quán)利。 但是,令我們感興趣的還是AD的整體結(jié)構(gòu),我們將給出一個(gè)一般的目錄例子。 21.3.1目錄里的對(duì)象和屬性 需要理解的第一件事是:關(guān)系型數(shù)據(jù)庫把數(shù)據(jù)存儲(chǔ)在表的行和列里,而在目錄里一個(gè)很重要的概念是對(duì)象,對(duì)象含有需要存放的信息。在圖21-1的屏幕截圖中,我們就選了一個(gè)用戶帳號(hào)的對(duì)象。AD中的其他對(duì)象包括計(jì)算機(jī)、域和工作組等。稍后,當(dāng)我們討論WINNT決定ADSI提供者時(shí)將要碰到其他目錄里面的對(duì)象,如服務(wù)對(duì)象和打印隊(duì)列對(duì)象等。 不要把目錄中的對(duì)象與COM對(duì)象(組件)相混淆,目錄里的對(duì)象與COM毫不相干。它們有屬性,但通常不具有方法。 實(shí)際上目錄中通常除了對(duì)象沒有別的,對(duì)象被排成層狀。對(duì)象可以被認(rèn)為是由許多屬性組成的。 注意在這里我們不是在討論COM自動(dòng)化屬性,僅僅是在討論一條條的信息。一個(gè)屬性包括屬性和屬性值。例如,上例中在AD中的用戶帳號(hào)的屬性如表21-1所示。 表21-1示例對(duì)象的屬性幾其值 屬性名屬性值 CNSimon Robinson AdsPathLDAP://CN= Simon Robinson,CN=Users,DC=TopOfThePops,DC=Frame,DC=com SAMAccountNameSimon Description一段注釋,可用adsvw.exe設(shè)置 MailSimon@Robinson.com 以上這些屬性大部分是不言而喻的。CN代表普通名(common name),是訪問對(duì)象時(shí)的通常名字。AdsPath是使用ADSI訪問目錄時(shí),可唯一確定該對(duì)象的名字,很象一個(gè)文件的完整路徑名,包含了該對(duì)象本身和目錄樹中所有在其上面的對(duì)象的名字。SAMAccountName是用戶在域中用這個(gè)帳號(hào)注冊(cè)時(shí)的提供名字。 表21-1展示的一個(gè)重要的概念,就是一個(gè)屬性有兩個(gè)部分:名字(如CN)和值(如Simon Robinson)。更準(zhǔn)確的說是一個(gè)名字和一個(gè)或者一個(gè)以上的值,因?yàn)橛行⿲傩允嵌嘀档?砂讯嘀敌韵胂蟪梢粋(gè)值的數(shù)組。 順便說一下,表21-1只是屬性中的一小部分,如果安裝了AD,在查看你自己的用戶帳號(hào)時(shí),將發(fā)現(xiàn)數(shù)量巨大的屬性,其中許多還沒有值,只是為某些系統(tǒng)管理員偶爾的需要而準(zhǔn)備的。 當(dāng)使用adsvw.exe時(shí),可用屏幕右邊的Properties列表框查看不同屬性(見圖21-1)。選中一個(gè)值的屬性,他的值就在旁邊的文本框中顯示出來。如果想改變這個(gè)值,就在文本框中輸入一個(gè)新值并單擊列表框下面的CHANGE按鈕。再點(diǎn)擊APPLY按鈕確認(rèn)。 21.3.2對(duì)象的類 到目前為止,我們已使用adsvw.exe查看了用戶帳號(hào)對(duì)象,別忘了還有其他類的對(duì)象,例如專門針對(duì)計(jì)算機(jī)的對(duì)象。從這種意義上,一個(gè)用戶和一個(gè)計(jì)算機(jī)(對(duì)象)的不同之處就是它們屬性的數(shù)目和類型的不同。例如,選中圖21-2所示的這個(gè)對(duì)象。 這是描述作者所在的域的域控制器的對(duì)象,這是一臺(tái)名叫BIGGYBIGGY的計(jì)算機(jī)。它表示一臺(tái)計(jì)算機(jī),如果要檢查它的屬性,就會(huì)發(fā)現(xiàn)它的很多屬性與用戶對(duì)象一樣,當(dāng)然還有其他一些屬性,這些舒心包含只屬于計(jì)算機(jī)的信息。 對(duì)象的類型稱作類。例如,在AD里,用戶是對(duì)象類,計(jì)算機(jī)也是對(duì)象類。因用戶和計(jì)算機(jī)是兩個(gè)不同的類,所以它們能擁有的屬性就不一樣,在adsvw.exe里,選中的對(duì)象的類顯示在右邊頂上的信息中,在圖21-1和圖21-2中都可見。 類決定了對(duì)象擁有什么樣的屬性,特別是它決定了必有的和可選的屬性。必有屬性(MANDATORYPROPERTIE)是某類中所有對(duì)象都必須有值的屬性,可選屬性(OPTIONALPROPERTIE)的值可能有但不是必須有。一個(gè)對(duì)象通常除了具有類所定義的必有屬性和可選屬性之外,再無其他屬性。 21.3.3容器和葉 前面已提到,目錄樹中可作為其他對(duì)象的父對(duì)象的是容器。而不能這么做的則是葉(LEAF)。一個(gè)對(duì)象是容器還是葉決定于它所屬的類。一些類定義為容器而另一些則定義為葉。例如,在AD里,用戶和計(jì)算機(jī)都是容器。圖21-1和21-2中的信息中的兩行說明了這一點(diǎn)。CONTAINER行說明它是不是一個(gè)容器,CONTAINMENT行說明它可成為哪些對(duì)象的父對(duì)象。 這類事情在大多數(shù)目錄中被定義得很仔細(xì),以確保用戶在修改目錄的內(nèi)容時(shí)不會(huì)破壞目錄樹的結(jié)構(gòu)。如果往目錄中添加新的對(duì)象,必須把它放在規(guī)定的地方,符合目錄規(guī)則,即哪些類的對(duì)象能包含哪些類的對(duì)象。當(dāng)然還有其他的檢查,如是否有足夠的安全權(quán)限! 事實(shí)上一個(gè)對(duì)象是容器并不是說他必須包含其他對(duì)象,而僅僅從原則上允許這么做而已。例如,在AD里,所有用戶帳號(hào)從技術(shù)上說都是容器,但在作者的用戶帳號(hào)里,恰巧什么也不包含。 同樣,你可能已經(jīng)注意到目錄結(jié)構(gòu)和WINDOWS的文件系統(tǒng)很類似。它們都是同一種層式結(jié)構(gòu),文件夾在WINDOWS里有時(shí)候也稱為目錄(這種稱呼是從UNIX系統(tǒng)移植而來的)。按照這鐘相似性,文件系統(tǒng)的文件夾對(duì)應(yīng)目錄里的容器,而文件系統(tǒng)里的文件對(duì)應(yīng)目錄里的葉對(duì)象。但當(dāng)心不要把這種相似性推得太廣。在文件系統(tǒng)中,文件夾的作用僅僅是文件的容器,除了WINDOWS自動(dòng)賦予的特定系統(tǒng)屬性(如創(chuàng)建日期等)和關(guān)于誰能訪問他們的安全信息外,并不真正擁有自己的數(shù)據(jù)。不能像網(wǎng)文件里存東西那樣往文件夾里存大量的文本。相反在目錄里,容器本身也是目錄對(duì)象,有自己的一套屬性。容器與葉唯一的不同之處就是容器可以包含其他對(duì)象。 21.3.4模式 上面已看到了如何通過類來定義對(duì)象,以及怎樣確定一個(gè)對(duì)象能擁有什么樣的屬性和是否是一個(gè)容器。這些規(guī)則連同其他相關(guān)信息,如屬性的數(shù)據(jù)類型(例如,普通名是一個(gè)字符串并是單值的),以及其他任何關(guān)于值的范圍的限制,并稱為模式(SCHEMA)。需要說明的是,模式本身就存儲(chǔ)在目錄中?赡苷J(rèn)為模式是目錄的內(nèi)部細(xì)節(jié),且它的實(shí)現(xiàn)是目錄的事。從某種程度上說這是對(duì)的。但有標(biāo)準(zhǔn)的途徑去訪問模式,這需要模式本身作為目錄的一部分存儲(chǔ)。 在AD里,模式被存儲(chǔ)在ADSPATH為L(zhǎng)DAP://CN=SCHEMA,CN=CONFIGUATION,<DOMAIN NAME>的容器中,這里的DOMAIN NAME 是用AD的格式表示的用戶的域名(見圖21-2所示的屏幕截圖).如果檢測(cè)這個(gè)容器,將看到圖21-3所示的屏幕截圖..
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!