下载 第21章ADS和AD介绍 本章讨论活动目录服务接口( Active Directory Services Interface,ADSl)和活动目录( Active Directory,AD),以及怎样用ASP访问目录服务和使用它们所包含的信息。这里的目录和目录 服务实际上是指一种特定的数据库,该数据库能够有效地查找像网络资源目录一类的信息。 AD是一种网络资源的目录,而ADSI是能够访问任何目录的 Microsoft技术。其他公司也有类似 的技术,例如Sun公司的NDI,但因本书是针对 Windows的,所以在此只讨论ADSl 不要混淆ADSI和AD,它们是两种截然不同的技术。尽管如此,因为这两种技术确实是 密切地相互作用,我们还是将它们放在同一章里讨论。AD是随 Windows2000诞生的大而新的 目录,包含了所有的安全性和管理本地网域所需要的其他信息。另一方面,ADSI是一套 Microsoft作为访问任何目录的方法而推出的COM接口,这意味着ADSI也是访问AD的通常方 法。尽管AD只存在于 Windows2000 Server和 Windows2000 Advanced server中,ADSI却适用 于所有的32位操作系统: Windows2000 Professional、NT40和 Windows9x 本章的目的是使读者掌握怎样用ASP语言简单而又容易地访问目录,因此本章重点是 ADSI,但由于AD的重要性,本章也将接触到AD的一些相关功能。 本章只讨论了ADSI的基础,如果想更深入地研究,请查阅《 Professional adsi Programming》一书, Simon robinson著, Wrox Press出版 211ADS的用途 这里有两个相关联的问题。前面讲过ADO,在技术上ADO符合 Microsoft的UDA规范,本 书第二部分里已深入讨论过。ADO能访问任何有 OLE DB提供者的数据源。目录是另一种类 型的数据源,为了使用目录,必须使用一种不同的技术一ADSI。为了理解为什么要使用 ADSI,需要理解是什么使目录不同于一般的数据源,以及ADSI能做哪些ADO不能做的事 ADO的确是一种通用的技术。原理上, Microsoft的目的是让ADO可以访问任何数据源 而不管这数据源的内部结构。但又在本质上重视关系型的数据源。这没有什么错,但这也确 实意味着如果想访问分层结构的数据源,ADO可能不总是最有效的办法。因此引入ADSI,因 为ADSI正是专门为分层结构数据源而设计的。精心设计的ADSI使用户在浏览树状结构时 比较容易,而ADO就没这么轻松 上面提到的分层结构的数据源和目录,它们是一回事么?它们相似,但不完全相同。下 面先讨论相同点,即它们都是树状结构,再讨论目录区别于数据库和其他数据源的特征 分层结构的数据源是按树状结构组织起来的,对象包含着其他对象,与 Windows 的文件系统中的文件夹包含文件和文件夹一样,而多数目录也是这样的结构。 事实上,体会这一点最简单的方法是快速浏览AD的结构。图21-1是从 adsyw.exe中截取的 adsyw.exe是一个通用目录浏览器,可用于任何基于ADSI的目录(包括AD) adsi.exe是由 ADSI SDK提供的
下载 第21章 ADSI和AD介绍 本章讨论活动目录服务接口(Active Directory Services Interface,A D S I )和活动目录( A c t i v e D i r e c t o r y,A D ),以及怎样用A S P访问目录服务和使用它们所包含的信息。这里的目录和目录 服务实际上是指一种特定的数据库,该数据库能够有效地查找像网络资源目录一类的信息。 A D是一种网络资源的目录,而A D S I是能够访问任何目录的M i c r o s o f t技术。其他公司也有类似 的技术,例如S u n公司的J N D I,但因本书是针对Wi n d o w s的,所以在此只讨论A D SI。 不要混淆A D S I和A D,它们是两种截然不同的技术。尽管如此,因为这两种技术确实是 密切地相互作用,我们还是将它们放在同一章里讨论。 A D是随Windows 2000诞生的大而新的 目录,包含了所有的安全性和管理本地网域所需要的其他信息。另一方面, A D S I是一套 M i c r o s o f t作为访问任何目录的方法而推出的 C O M接口,这意味着 A D S I也是访问A D的通常方 法。尽管A D只存在于Windows 2000 Server和Windows 2000 Advanced Server中,A D S I却适用 于所有的3 2位操作系统:Windows 2000 Professional、NT 4.0和Windows 9x。 本章的目的是使读者掌握怎样用 A S P语言简单而又容易地访问目录,因此本章重点是 A D S I,但由于A D的重要性,本章也将接触到 A D的一些相关功能。 本章只讨论了A D S I的基础,如果想更深入地研究,请查阅《 Professional ADSI P r o g r a m m i n g》一书,Simon Robinson著,Wrox Press出版。 21.1 ADSI的用途 这里有两个相关联的问题。前面讲过 A D O,在技术上A D O符合M i c r o s o f t的U D A规范,本 书第二部分里已深入讨论过。 A D O能访问任何有 OLE DB提供者的数据源。目录是另一种类 型的数据源,为了使用目录,必须使用一种不同的技术—A D S I。为了理解为什么要使用 A D S I,需要理解是什么使目录不同于一般的数据源,以及 A D S I能做哪些A D O不能做的事。 A D O的确是一种通用的技术。原理上, M i c r o s o f t的目的是让A D O可以访问任何数据源, 而不管这数据源的内部结构。但又在本质上重视关系型的数据源。这没有什么错,但这也确 实意味着如果想访问分层结构的数据源, A D O可能不总是最有效的办法。因此引入 A D S I,因 为A D S I正是专门为分层结构数据源而设计的。精心设计的 A D S I使用户在浏览树状结构时感到 比较容易,而A D O就没这么轻松。 上面提到的分层结构的数据源和目录,它们是一回事么?它们相似,但不完全相同。下 面先讨论相同点,即它们都是树状结构,再讨论目录区别于数据库和其他数据源的特征。 分层结构的数据源是按树状结构组织起来的,对象包含着其他对象,与 Wi n d o w s 的文件系统中的文件夹包含文件和文件夹一样,而多数目录也是这样的结构。 事实上,体会这一点最简单的方法是快速浏览 A D的结构。图2 1 - 1是从a d s v w. e x e中截取的, a d s v w. e x e是一个通用目录浏览器,可用于任何基于 A D S I的目录(包括A D )。a d s v w. e x e是由 ADSI SDK提供的
616 ASP3高级编程 Chinapub.com 下载 anp 02r acecxenn 图21-1AD的结构 图21-1中有很多我们将研究的内容,我们在后面再回来讲述,如果现在不能全看懂也不 必担心。请注意左边的树状结构,它是一个标准的树控件,清楚地显示了AD中数据的分层排 列。以CN= Simon robinson为例,这是作者在局域网上的帐号,它的父级是CN= Users。在 目录用语里,父子关系称为包含关系。CN= Users称为一个容器,包含了CN= Simon Robinson对象。在这个AD中,CN= Users实际上包含了此域中所有的用户帐号,不过实际情 况不总是这种。 同样,用户容器也被代表域的对象DC= TopOfThePops包含着。DC= TopOfThePops容易 让人误解,因为域的全名是DC= TopOfThePops,DC=Fame,DC=com,对应于一个虚拟的 URL: TopOfThePops. Fame. com( Windows2000支持这样的域名,而任何NT40机器只能识别 第一部分 TopOfThePops)。不要为这些名字的格式而担心,这是AD专用的,你很快就会适应, CN代表普通名( Common name),而DC代表域组件( Domain Component)。 最后,树中的域节点被LDAP对象包含。LDAP代表轻量目录访问协议( Lightweight Directory Access Protocol),这是一个访问目录的工业标准协议,该协议的引入表明了AD是与 LDAP相联系的。后面将进一步讨论LDAP 迄今为止,所做的工作是指出我们正在存储大量的对象信息,并正在以分层方式管理这 些信息。顺便提一下,这里所说的对象是通常意义下的,不是技术上的,在这里不指COM对 象。AD提供了一个非常好的例子,展示了ADSI所能访问的目录的结构。下面将探索AD的细 节,并且演示目录的典型结构。然后,就可以学习如何用ADSI去得到和修改目录中的信息 但首先,来看一下如何获得所需的软件 21.2必需的软件 在这一节中,由于ADSI和AD需要的软件不同,我们将分别讨论它们。 Windows2000集成了AD。如果你的计算机运行在 Windows2000下,并将其作为域控制 器,则已经安装了AD,反之则不会。关键在于是否把 Windows2000作为域控制器。如果在 个域内的 Windows2000工作站,由一个NT40主域控制器控制,也不会有AD
图21-1 A D的结构 图2 1 - 1中有很多我们将研究的内容,我们在后面再回来讲述,如果现在不能全看懂也不 必担心。请注意左边的树状结构,它是一个标准的树控件,清楚地显示了 A D中数据的分层排 列。以CN = Simon Robinson为例,这是作者在局域网上的帐号,它的父级是 CN = Users。在 目录用语里,父子关系称为包含关系。 CN = Users 称为一个容器,包含了 CN = Simon R o b i n s o n对象。在这个A D中,CN = Users实际上包含了此域中所有的用户帐号,不过实际情 况不总是这种。 同样,用户容器也被代表域的对象 DC = To p O f T h e P o p s包含着。D C = To p O f T h e P o p s容易 让人误解,因为域的全名是 DC = TopOfThePops, DC=Fame, DC=com,对应于一个虚拟的 U R L:To p O f T h e P o p s . F a m e . c o m ( Windows 2000支持这样的域名,而任何 NT 4.0机器只能识别 第一部分To p O f T h e P o p s )。不要为这些名字的格式而担心,这是 A D专用的,你很快就会适应, C N代表普通名(Common Name),而D C代表域组件(Domain Component)。 最后,树中的域节点被 L D A P对象包含。 L D A P代表轻量目录访问协议 ( L i g h t w e i g h t Directory Access Protocol),这是一个访问目录的工业标准协议,该协议的引入表明了 A D是与 L D A P相联系的。后面将进一步讨论 L D A P。 迄今为止,所做的工作是指出我们正在存储大量的对象信息,并正在以分层方式管理这 些信息。顺便提一下,这里所说的对象是通常意义下的,不是技术上的,在这里不指 C O M对 象。A D提供了一个非常好的例子,展示了 A D S I所能访问的目录的结构。下面将探索 A D的细 节,并且演示目录的典型结构。然后,就可以学习如何用 A D S I去得到和修改目录中的信息。 但首先,来看一下如何获得所需的软件。 21.2 必需的软件 在这一节中,由于A D S I和A D需要的软件不同,我们将分别讨论它们。 Windows 2000集成了A D。如果你的计算机运行在 Windows 2000下,并将其作为域控制 器,则已经安装了A D,反之则不会。关键在于是否把 Windows 2000作为域控制器。如果在一 个域内的Windows 2000工作站,由一个NT 4.0主域控制器控制,也不会有 A D。 616计计ASP 3 高级编程 下载
CAina. coM 第1)AD和D617 下载 ADSI也是 Windows2000操作系统 Professional或 Server中的一部分,但能够从 Microsoft的Web 站点上下载用于NT40和 Windows9x的ADSl。另外,可能需要 ADSI SDK来开发软件。无论正在 用什么操作系统,都需要下载这个SDK。它包含了各种各样的头文件和文档。尽管编写ASP客户 程序时,它不如用VB或C++编程时那么必需,但它包含了图21-1中使用的 ladsvw. exe实用程序。 下面将使用 adsyw.exe进一步研究AD。 adsvw.exe叫做活动目录浏览器( Active Directory Browser,这名字有些误导作用。这是一个通用的目录浏览器,可以检查任何ADSI兼容的目 录,而不只是AD。活动目录浏览器是一个好工具,因为其本身使用ADSI搜集信息,并显 给我们。因此,我们看到的信息的格式恰恰就是用ADSI编程时所需要的 正如前面提到的, asdsyw exe是 ADSI SDK的一部分,可以从微软的Web站点上下载。如 果没有的话,我们建议下载一个拷贝,你会发现对于研究目录,它是非常有用的 213AD的内部结构 AD包含了一个域控制器管理一个域所需的全部信息。从这个意义上讲,它与NT40服务 器中的域目录( domain directory)是一样的。所不同的是它符合LDAP标准。因为LDAP是工业 标准,所以很容易编写用标准API函数(包括ADSI)来访问AD的客户程序。相比之下,NT4.0 上相应的数据库却是 Microsoft专用的,通过 Windows api函数只能得到少得可怜的信息。实 际上,根本不能把该数据库用作集中管理网络资源的目录,但AD可以。 另外,AD远比原有的NT40域目录强大。它连同 Windows2000一起,支持下列概念:把 域本身排列成域树( domain tree),或允许很多独立的树共享配置数据,形成一个域林( domain forest)。还允许把个人的信息像操作系统使用的资料一样存储进去 就AD中存储的信息而言,实际上有两个部分。缺省情况下,AD包含了管理一个域所需 要的全部信息,如计算机、用户和工作组帐号,以及相应的安全权限。另一方面,AD被设计 成通用的目录,这意味着任何其他系统管理员认为有用的内容都可存入AD。所以像用户帐号 这样的信息也可能出现在薪金明细和公司组织结构下面。AD还有一套非常完善的安全系统, 由管理员分配细致的等级,决定谁具有对各式各样信息的读或写的权力 但是,令我们最感兴趣的还是AD的整体结构,我们将给出一个一般目录的例子 21.3.1目录里的对象和属性 需要理解的第一件事情是:关系型数据库把数据存储在表的行和列里,而在目录里一个 很重要的概念是对象,对象含有需要存放的信息。在图21-1的屏幕截图中,我们就选了一个 用户帐号的对象。AD中的其他对象包括计算机、域和工作组等。稍后,当我们讨论 Winnt ADSI提供者时将要碰到其他目录里的对象,如服务对象和打印队列对象等。 不要把目录中的对象与COM对象(组件)相混淆,目录里的对象与COM毫不相干 它们有属性,但通常不具有方法 实际上目录中通常除了对象没有别的,对象被排成层状。对象可被认为是由许多属性组 成的 注意在这里我们不是在讨论COM自动化属性,仅仅是在讨论一条条的信息。一个属性包 括属性名和属性值。例如,上例中在AD中的用户帐号的属性如表21-1所示
A D S I也是Windows 2000操作系统( P r o f e s s i o n a l或S e r v e r )中的一部分,但能够从M i c r o s o f t的We b 站点上下载用于NT 4.0和Windows 9x的A D S I。另外,可能需要ADSI SDK来开发软件。无论正在 用什么操作系统,都需要下载这个S D K。它包含了各种各样的头文件和文档。尽管编写A S P客户 程序时,它不如用V B或C + +编程时那么必需,但它包含了图2 1 - 1中使用的a d s v w. e x e实用程序。 下面将使用a d s v w. e x e进一步研究A D。a d s v w. e x e也叫做活动目录浏览器 (Active Directory B r o w s e r ),这名字有些误导作用。这是一个通用的目录浏览器,可以检查任何 A D S I兼容的目 录,而不只是 A D。活动目录浏览器是一个好工具,因为其本身使用 A D S I搜集信息,并显示 给我们。因此,我们看到的信息的格式恰恰就是用 A D S I编程时所需要的。 正如前面提到的, a s d s v w. e x e是ADSI SDK的一部分,可以从微软的 We b站点上下载。如 果没有的话,我们建议下载一个拷贝,你会发现对于研究目录,它是非常有用的。 21.3 AD的内部结构 A D包含了一个域控制器管理一个域所需的全部信息。从这个意义上讲,它与 NT 4.0服务 器中的域目录(domain directory)是一样的。所不同的是它符合 L D A P标准。因为L D A P是工业 标准,所以很容易编写用标准 A P I函数(包括A D S I )来访问A D的客户程序。相比之下, NT 4.0 上相应的数据库却是 M i c r o s o f t专用的,通过Windows API函数只能得到少得可怜的信息。实 际上,根本不能把该数据库用作集中管理网络资源的目录,但 A D可以。 另外,A D远比原有的NT 4.0域目录强大。它连同Windows 2000一起,支持下列概念:把 域本身排列成域树 (domain tree),或允许很多独立的树共享配置数据,形成一个域林 ( d o m a i n f o r e s t )。还允许把个人的信息像操作系统使用的资料一样存储进去。 就A D中存储的信息而言,实际上有两个部分。缺省情况下, A D包含了管理一个域所需 要的全部信息,如计算机、用户和工作组帐号,以及相应的安全权限。另一方面, A D被设计 成通用的目录,这意味着任何其他系统管理员认为有用的内容都可存入 A D。所以像用户帐号 这样的信息也可能出现在薪金明细和公司组织结构下面。 A D还有一套非常完善的安全系统, 由管理员分配细致的等级,决定谁具有对各式各样信息的读或写的权力。 但是,令我们最感兴趣的还是 A D的整体结构,我们将给出一个一般目录的例子。 21.3.1 目录里的对象和属性 需要理解的第一件事情是:关系型数据库把数据存储在表的行和列里,而在目录里一个 很重要的概念是对象,对象含有需要存放的信息。在图 2 1 - 1的屏幕截图中,我们就选了一个 用户帐号的对象。 A D中的其他对象包括计算机、域和工作组等。稍后,当我们讨论 Wi n N T A D S I提供者时将要碰到其他目录里的对象,如服务对象和打印队列对象等。 不要把目录中的对象与 C O M对象(组件)相混淆,目录里的对象与 C O M毫不相干。 它们有属性,但通常不具有方法。 实际上目录中通常除了对象没有别的,对象被排成层状。对象可被认为是由许多属性组 成的。 注意在这里我们不是在讨论 C O M自动化属性,仅仅是在讨论一条条的信息。一个属性包 括属性名和属性值。例如,上例中在 A D中的用户帐号的属性如表2 1 - 1所示。 第2 1章 A D S I和A D介绍计计617 下载
618Ap高程 Chia°deoM 下载 表21-1示例对象的属性及其值 属性名 属性值 imon robinson ADsPath LDAP: //CN=Simon Robinson, CN=Users, DC=TopOfThePops, DC=Fame, DC=com SAMAccountName sImon Description 段注释,可用 adsyw.exe设置 以上这些属性大部分是不言而喻的。CN代表普通名( Common Name),是访问对象时的通 常名字。 ADsPath是使用ADSI访问目录时,可唯一确定该对象的名字,很像一个文件的完整 路径名,包含了该对象本身和目录树中所有在其上面的对象的名字。 SAMAccountName是用 户在域中以这个帐号注册时的提供名字 表21-1展示的一个重要概念,就是一个属性有两个部分:名字(如CN)和值(如Smon Robinson)。更准确地说是一个名字和一个或一个以上的值,因为有些属性是多值的。可把多 值性想成一个值的数组 顺便说一下,表21-1只是属性中的一小部分,如果安装了AD,在查看你自己的用户帐号时 将发现数量巨大的属性。其中许多还没有值,只是为某些系统管理员偶尔的需要而准备的 当使用 adsyw. exe时,可用屏幕右边的 Properties列表框查看不同属性(见图21-1) 选中一个属性,它的值就在旁边的文本框中显示出来。如果想改变这个值,就在文 本框中输入一个新值并单击列表框下面的 Change按钮。再点击 Apply按钮确认 2132对象的类 到目前为止,我们已使用 adsyw. exe查看了用户帐号的对象,别忘了还有其他类的对象 例如专门针对计算机的对象。从这种意义上,一个用户和一个计算机(对象)的不同之处就是它 们属性的数目和类型的不同。例如,选中图21-2所示的这个对象。 s-」N」 图21-2计算机对象 这是描述作者所在的域的域控制器的对象,这是一台名叫 BIGGYBIGGY的计算机。它表
表21-1 示例对象的属性及其值 属 性 名 属 性 值 C N Simon Robinson A D s P a t h LDAP://CN=Simon Robinson, CN=Users, DC=TopOfThePops, DC=Fame, DC=com s A M A c c o u n tNa m e s i m o n D e s c r i p t i o n 一段注释,可用a d s v w. e x e设置 M a i l s i m o n @ s i m o n r o b i s o n . c o m 以上这些属性大部分是不言而喻的。 C N代表普通名(Common Name),是访问对象时的通 常名字。A D s P a t h是使用A D S I访问目录时,可唯一确定该对象的名字,很像一个文件的完整 路径名,包含了该对象本身和目录树中所有在其上面的对象的名字。 s A M A c c o u n t N a m e是用 户在域中以这个帐号注册时的提供名字。 表2 1 - 1展示的一个重要概念,就是一个属性有两个部分:名字 (如C N )和值 (如S i m o n R o b i n s o n )。更准确地说是一个名字和一个或一个以上的值,因为有些属性是多值的。可把多 值性想成一个值的数组。 顺便说一下,表2 1 - 1只是属性中的一小部分,如果安装了A D,在查看你自己的用户帐号时, 将发现数量巨大的属性。其中许多还没有值,只是为某些系统管理员偶尔的需要而准备的。 当使用a d s v w. e x e时,可用屏幕右边的Properties 列表框查看不同属性(见图2 1 - 1 )。 选中一个属性,它的值就在旁边的文本框中显示出来。如果想改变这个值,就在文 本框中输入一个新值并单击列表框下面的 C h a n g e按钮。再点击A p p l y按钮确认。 21.3.2 对象的类 到目前为止,我们已使用 a d s v w. e x e查看了用户帐号的对象,别忘了还有其他类的对象, 例如专门针对计算机的对象。从这种意义上,一个用户和一个计算机 (对象)的不同之处就是它 们属性的数目和类型的不同。例如,选中图 2 1 - 2所示的这个对象。 图21-2 计算机对象 这是描述作者所在的域的域控制器的对象,这是一台名叫 B I G G Y B I G G Y的计算机。它表 618计计ASP 3 高级编程 下载
第1AD和AD619 下载 示一台计算机,如果要检查它的属性,就会发现它的很多属性与用户对象的一样,当然还有 其他一些属性,这些属性包含只属于计算机的信息 对象的类型称作类。例如,在AD里,用户是对象类,计算机也是对象类。因用户和计算 机是两个不同的类,所以它们能拥有的属性就不一样。在 adsyw. exe里,选中的对象的类显示 在右边顶上的信息中,在图21-1和图21-2中都可看见。 类决定了对象拥有什么样的属性,特别是它决定了必有的和可选的属性。必有属性 ( Mandatory propertie)是某类中所有对象都必须有值的属性,可选属性( Optional propertie)的值 可能有但不是必须有。一个对象通常除了具有类所定义的必有属性和可选属性之外,再无其 他属性 213.3容器和叶 前面已提到,目录树中可作为其他对象的父对象的是容器。而不能这么做的则是叶(lean 个对象是容器还是叶决定于它所属的类。一些类定义为容器而另一些类则定义为叶。例如 在AD里,用户和计算机都是容器。图21-1和图21-2中的信息中的两行说明了这一点 Container行说明它是不是一个容器, Containment行说明它可成为哪些类对象的父对象。 这类事情在大多数目录中被定义得很仔细,以确保用户在修改目录的内容时不会破块目 录树的结构。如果往目录中添加新的对象,必须把它放在规定的地方,符合目录规则,即哪 些类的对象能包含哪些类的对象。当然还有其他的检查,如是否有足够的安全权限! 事实上一个对象是容器并不是说它必须包含其他对象,而仅仅从原则上允许这么做而已 例如,在AD里,所有用户帐号从技术上说都是容器,但在作者的用户帐号里,恰巧什么也不 包含 同样,你可能已经注意到目录结构和 Windows的文件系统很类似。它们都是同一种层式 结构,文件夹在 Windows里有时候也称为目录(这种称呼是从UNIX系统移植而来的)。按照这 种相似性,文件系统里的文件夹对应目录里的容器,而文件系统里的文件对应目录里的叶对 象。但当心不要把这种相似性推得太广。在文件系统中,文件夹的作用仅仅是文件的容器, 除了 Windows自动赋予的特定的系统属性(如创建日期等)和关于谁能访问它们的安全信息外, 并不真正拥有自己的数据。不能像往文件里存东西那样往文件夹里存大量的文本。相反,在 目录里,容器本身也是目录对象,有自己的一套属性。容器与叶唯一的不同之处就是容器可 以包含其他的对象 2134模式 上面已看到了如何通过类来定义对象,以及怎样确定一个对象能拥有什么样的属性和是 否是一个容器。这些规则连同其他相关信息,如属性的数据类型(例如,普通名是一个字符串 并且是单值的),以及其他任何关于值的范围的限制,并称为模式( schema)。需要说明的是, 模式本身就存储在目录中。可能认为模式是目录的内部细节,且它的实现是目录的事。从某 种程度上说这是对的。但有标准的途径去访问模式,这需要模式本身作为目录的一部分存储 在AD里,模式被存储在 ADsPath为LDAP/CN= Schema,CN= Configuration,的容器中,这里 domain name是用AD的格式表示的用户的域名(见图21-2所示的屏幕截 图)。如果检查这个容器,将看到图21-3所示的屏幕截图
示一台计算机,如果要检查它的属性,就会发现它的很多属性与用户对象的一样,当然还有 其他一些属性,这些属性包含只属于计算机的信息。 对象的类型称作类。例如,在 A D里,用户是对象类,计算机也是对象类。因用户和计算 机是两个不同的类,所以它们能拥有的属性就不一样。在 a d s v w. e x e里,选中的对象的类显示 在右边顶上的信息中,在图 2 1 - 1和图2 1 - 2中都可看见。 类决定了对象拥有什么样的属性,特别是它决定了必有的和可选的属性。必有属性 (Mandatory propertie)是某类中所有对象都必须有值的属性,可选属性 (Optional propertie)的值 可能有但不是必须有。一个对象通常除了具有类所定义的必有属性和可选属性之外,再无其 他属性。 21.3.3 容器和叶 前面已提到,目录树中可作为其他对象的父对象的是容器。而不能这么做的则是叶 ( l e a f )。 一个对象是容器还是叶决定于它所属的类。一些类定义为容器而另一些类则定义为叶。例如, 在A D里,用户和计算机都是容器。图 2 1 - 1和图 2 1 - 2中的信息中的两行说明了这一点。 C o n t a i n e r行说明它是不是一个容器, C o n t a i n m e n t行说明它可成为哪些类对象的父对象。 这类事情在大多数目录中被定义得很仔细,以确保用户在修改目录的内容时不会破块目 录树的结构。如果往目录中添加新的对象,必须把它放在规定的地方,符合目录规则,即哪 些类的对象能包含哪些类的对象。当然还有其他的检查,如是否有足够的安全权限! 事实上一个对象是容器并不是说它必须包含其他对象,而仅仅从原则上允许这么做而已。 例如,在A D里,所有用户帐号从技术上说都是容器,但在作者的用户帐号里,恰巧什么也不 包含。 同样,你可能已经注意到目录结构和 Wi n d o w s的文件系统很类似。它们都是同一种层式 结构,文件夹在 Wi n d o w s里有时候也称为目录 (这种称呼是从U N I X系统移植而来的 )。按照这 种相似性,文件系统里的文件夹对应目录里的容器,而文件系统里的文件对应目录里的叶对 象。但当心不要把这种相似性推得太广。在文件系统中,文件夹的作用仅仅是文件的容器, 除了Wi n d o w s自动赋予的特定的系统属性 (如创建日期等)和关于谁能访问它们的安全信息外, 并不真正拥有自己的数据。不能像往文件里存东西那样往文件夹里存大量的文本。相反,在 目录里,容器本身也是目录对象,有自己的一套属性。容器与叶唯一的不同之处就是容器可 以包含其他的对象。 21.3.4 模式 上面已看到了如何通过类来定义对象,以及怎样确定一个对象能拥有什么样的属性和是 否是一个容器。这些规则连同其他相关信息,如属性的数据类型 (例如,普通名是一个字符串 并且是单值的 ),以及其他任何关于值的范围的限制,并称为模式 ( s c h e m a )。需要说明的是, 模式本身就存储在目录中。可能认为模式是目录的内部细节,且它的实现是目录的事。从某 种程度上说这是对的。但有标准的途径去访问模式,这需要模式本身作为目录的一部分存储。 在A D里,模式被存储在 A D s P a t h为LDAP://CN=Schema, CN=Configuration, 的容器中,这里 domain name是用A D的格式表示的用户的域名 (见图2 1 - 2所示的屏幕截 图)。如果检查这个容器,将看到图 2 1 - 3所示的屏幕截图。 第2 1章 A D S I和A D介绍计计619 下载
620A5p高程 下载 图21-3存放模式的容器对象 这个对象包含了描述模式的所有对象。从目录树栏的滚动条的长度可以看出,有数目庞 大的对象,这是由于AD有很多属性和类。往下滚动一点并选择描述计算机的模式项,将会看 到图21-4所示的屏幕截图。 u 图21-4描述计算机的模式 CN= Computer对象说明 Computer类的所有实例在目录里应是什么样,这也是它自己的类 标识为 classschema(类模式)的原因,它为一个特定的类定义模式!树控件中的其它大多数对 象是 attribute Schema(属性模式),这意味着它提供了有关某具属性的信息,如它的值的数据类 型和是否是多值的 设置 Properties列表框来看看 mustContain/属性。这是一个多值的属性,列出了计算机类所 有必选的属性的名字。另一属性 may Contain列出了计算机所有的可选属性。 奇怪的是,图21-4中的错误消息E_ADS_ PROPERTY NOTFOUND说明 mustcontain并不 包含任何内容。而在我安装的AD里,对这个 class schema对象, may Contain也给出相同的错误 消息。这有点奇怪,因为我们已经看到计算机拥有很多属性。这个表面上的矛盾引出了类的 个重要概念:继承( inheritance 21.3.5继承 目录里的类可相互派生( derive) 如果对COM有一定的使用经验,那么你也许已经知道一个接口可从另一个派生。如果接 A从接口B派生,那么A拥有B的所有属性和方法和A自己附加的属性和方法。所有COM接 口都显露三个方法: QueryInterface、 AddRef和 Release,因为它们都由 IUnknown派生。 如果你曾经用C艹+或Java编过面向对象的程序,也许已经接触过类的继承,这与刚才讲到
图21-3 存放模式的容器对象 这个对象包含了描述模式的所有对象。从目录树栏的滚动条的长度可以看出,有数目庞 大的对象,这是由于 A D有很多属性和类。往下滚动一点并选择描述计算机的模式项,将会看 到图2 1 - 4所示的屏幕截图。 图21-4 描述计算机的模式 CN = Computer对象说明C o m p u t e r类的所有实例在目录里应是什么样,这也是它自己的类 标识为c l a s s S c h e m a (类模式)的原因,它为一个特定的类定义模式!树控件中的其它大多数对 象是a t t r i b u t e S c h e m a (属性模式),这意味着它提供了有关某具属性的信息,如它的值的数据类 型和是否是多值的。 设置P r o p e r t i e s列表框来看看m u s t C o n t a i n属性。这是一个多值的属性,列出了计算机类所 有必选的属性的名字。另一属性 m a y C o n t a i n列出了计算机所有的可选属性。 奇怪的是,图2 1 - 4中的错误消息E _ A D S _ P R O P E RT Y _ N O T F O U N D说明m u s t C o n t a i n并不 包含任何内容。而在我安装的 A D里,对这个c l a s s S c h e m a对象,m a y C o n t a i n也给出相同的错误 消息。这有点奇怪,因为我们已经看到计算机拥有很多属性。这个表面上的矛盾引出了类的 一个重要概念:继承( i n h e r i t a n c e )。 21.3.5 继承 目录里的类可相互派生( d e r i v e )。 如果对C O M有一定的使用经验,那么你也许已经知道一个接口可从另一个派生。如果接 口A从接口B派生,那么A拥有B的所有属性和方法和 A自己附加的属性和方法。所有 C O M接 口都显露三个方法:Q u e r y I n t e r f a c e、A d d R e f和R e l e a s e,因为它们都由I U n k n o w n派生。 如果你曾经用C + +或J a v a编过面向对象的程序,也许已经接触过类的继承,这与刚才讲到 620计计ASP 3 高级编程 下载
Binapub.com 第1)1D和AD621 下载 的是一回事。如果类A从类B派生,则类A实现类B的所有成员函数和成员变量并有属于它自 己的成员函数和成员变量。 上述原则同样适用于目录的类,如果类A是B的继承类,那么实例A可以具有实例B的 class schema对象中所定义的必选和可选属性(注意,这里用了“可以”这个词,但对于必选属 性,用“必须”或许更恰当),还有A自己的 class Schema对象中的那些属性。 可以通过已有的类来生成新类。在C++里,甚至允许有抽象类( abstract),这些类是专门为 派生而定义的。实际上抽象类是不能真正创建它的对象的。C++程序员将看到目录中的抽象 类与C++里的抽象类作用相同 这解释了 adsyw. exe屏幕右边上方标记为 Derived from的行。这 行给出了当前被查看的对象的类的父类的名字。观察图21-4,会发 现类 classschema和dMD(包含所有模式项的对象的类)都是从一个名 person 叫top的类派生的。 Computer类是从User类派生的(听起来有奇怪, 但这是有意义的,因为 Computer类需要实现User类的几乎所有的属 organisationalPerson 性),而user是从包含了针对一般人的更广义的信息的 organizationalPerson类派生的 事实上,就AD而言,可以更深入一些。在AD(就这问题而言 可以是任何符合LDAP的目录)里的所有对象都有一个名叫 objectClass的属性。它是多值的,它的值是继承树中通往这个类的 所有(祖先)类的类名。对于一个 Computer类,其类链如图21-5所示 compute 如果在AD浏览器里的 Properties列表框中选择 objectClass项, 将看到这一点,如图21-6所示 图21-5目录中的类链 图21-6在目录浏览器中显示的类链 top类在AD里起着重要的作用。这是一个通用的类,有数目庞大的必选和可选的属性 Microsoft认为它对AD中的所有对象都有用。任何符合LDAP的目录中的所有对象归根结底都 是从top类派生的 到目前为止,你已经获得了关于目录结构的很多信息,这些信息将来我们都需要。现在 再进一步讲一下目录,以避免不明白图中列出的其它部分是干什么的。 CLSID是一个唯一的 GUID(用来标识对象的类)。标识为 Primary Interface的行是与ADSI有关的,与AD无关。使用 ADSI时,你会发现需要创建COM组件来访问目录对象,一个COM组件对应目录里的一个对 象。因为正在讲述ASP,所以仅使用ASP里的 IDispatch接口与COM对象通信。 Primary Interface是COM对象的“真正的”接口的ID,也就是当用VB或C++编程时可能直接使用的接
的是一回事。如果类 A从类B派生,则类A实现类B的所有成员函数和成员变量并有属于它自 己的成员函数和成员变量。 上述原则同样适用于目录的类,如果类 A是B的继承类,那么实例 A可以具有实例 B的 c l a s s S c h e m a对象中所定义的必选和可选属性 (注意,这里用了“可以”这个词,但对于必选属 性,用“必须”或许更恰当 ),还有A自己的c l a s s S c h e m a对象中的那些属性。 可以通过已有的类来生成新类。在 C + +里,甚至允许有抽象类( a b s t r a c t ),这些类是专门为 派生而定义的。实际上抽象类是不能真正创建它的对象的。 C + +程序员将看到目录中的抽象 类与C + +里的抽象类作用相同。 这解释了a d s v w. e x e屏幕右边上方标记为Derived From的行。这 行给出了当前被查看的对象的类的父类的名字。观察图 2 1 - 4,会发 现类c l a s s S c h e m a和d M D (包含所有模式项的对象的类 )都是从一个名 叫t o p的类派生的。 C o m p u t e r类是从U s e r类派生的 (听起来有奇怪, 但这是有意义的,因为 C o m p u t e r类需要实现U s e r类的几乎所有的属 性 ) , 而 u s e r 是 从 包 含 了 针 对 一 般 人 的 更 广 义 的 信 息 的 o rg a n i z a t i o n a l P e r s o n类派生的。 事实上,就A D而言,可以更深入一些。在 A D (就这问题而言, 可以是任何符合 L D A P 的目录 ) 里的所有对象都有一个名叫 o b j e c t C l a s s的属性。它是多值的,它的值是继承树中通往这个类的 所有(祖先)类的类名。对于一个C o m p u t e r类,其类链如图2 1 - 5所示。 如果在 A D浏览器里的 P r o p e r t i e s列表框中选择 o b j e c t C l a s s项, 将看到这一点,如图2 1 - 6所示。 图21-6 在目录浏览器中显示的类链 t o p类在A D里起着重要的作用。这是一个通用的类,有数目庞大的必选和可选的属性。 M i c r o s o f t认为它对A D中的所有对象都有用。任何符合 L D A P的目录中的所有对象归根结底都 是从t o p类派生的。 到目前为止,你已经获得了关于目录结构的很多信息,这些信息将来我们都需要。现在 再进一步讲一下目录,以避免不明白图中列出的其它部分是干什么的。 C L S I D是一个唯一的 G U I D (用来标识对象的类)。标识为Primary Interface的行是与A D S I有关的,与A D无关。使用 A D S I时,你会发现需要创建 C O M组件来访问目录对象,一个 C O M组件对应目录里的一个对 象。因为正在讲述 A S P,所以仅使用 A S P里的 I D i s p a t c h接口与 C O M对象通信。 P r i m a r y I n t e r f a c e是C O M对象的“真正的”接口的 I I D,也就是当用V B或C + +编程时可能直接使用的接 第2 1章 A D S I和A D介绍计计621 下载 图21-5 目录中的类链
622 SP3高级编程 Chia°deoM 下载 口,用ⅤB或C++编程时避免使用 IDispath 帮助文件名和环境提供了类对象的帮助信息。OID(对象标识符)是另一个唯一标识符,不 仅标识类,还标识其他信息,如定义这个类的组织的名字。我们并不需要关心对象标识符 214目录的特征 对AD的结构我们已有一些概念。前面所讲的有的部分是AD特有的,有的部分不是AD特 有的,而是所有符合LDAP标准的目录所具有的。对于前面所讲的一切,一般来讲,如果不是 实现细节,则大多数目录都满足 到目前为止,我们已经知道目录是一个分层的信息库,而且知道它包含着对象,对象包 含着很多属性 还有其他一些大多数目录的典型特征。 21.4.1优化查找 目录的主要目的是当需要时可以到它里面去查信息。因此,通常是按读操作的最优化实 现的。这基于经常地读目录而不是写目录的假设。AD正是这样优化 2142查找功能 前面所有的屏幕截图演示的都是浏览操作,也就是看看目录中不同的容器里有什么内容。 更经常的情况是进行查找。查找就是根据一个对象的一个或多个属性找出它在目录中的位置 例如,可能需要找出所有的两个月没有注册的用户帐号以禁用它们。尽管从屏幕截图中已经 看到,所有的用户帐号恰好全部存在于AD的同一个容器里,但要知道,实际不总是这种情况 通常要执行一下查找操作以确定已找到了所有的用户帐号。 目录一般支持非常复杂的查找请求。找出所有的两个月没有注册的用户帐号只是一个很 简单的请求。一个更复杂的请求可能是:显示注册名以“a”开头、两个月没有注册的除域管 理者以外的所有用户帐号。所有符合LDAP标准的目录,包括AD,都支持这种复杂级别的请 求,这使查找成为一个非常强大的概念。 214.3开放性 这意味着目录可以通过某一标准协议集进行访问。最常用的是LDAP协议。通过开放的标 准协议使目录具有可访问性,这使得编写与它通讯的客户端应用程序十分容易,可以不需要 去学习那些厂家专有的API AD符合LDAP标准,并且随着学习AD的不断深入,你会发现如何构造和访问数据是非常 重要的。AD有很多的特性,这些特性都是LDAP需要的 2144事务处理 很多商业数据库有相当完善的支持事务和当操作失败时回滚事务的功能。 SQL Server属 于这个范畴。ADO包括支持事务的方法,前提是数据源实现事务。在这里提到这个问题的原 因是事务处理在目录里通常并不是至关紧要的
口,用V B或C + +编程时避免使用I D i s p a t h。 帮助文件名和环境提供了类对象的帮助信息。 O I D (对象标识符)是另一个唯一标识符,不 仅标识类,还标识其他信息,如定义这个类的组织的名字。我们并不需要关心对象标识符。 21.4 目录的特征 对A D的结构我们已有一些概念。前面所讲的有的部分是 A D特有的,有的部分不是 A D特 有的,而是所有符合L D A P标准的目录所具有的。对于前面所讲的一切,一般来讲,如果不是 实现细节,则大多数目录都满足。 到目前为止,我们已经知道目录是一个分层的信息库,而且知道它包含着对象,对象包 含着很多属性。 还有其他一些大多数目录的典型特征。 21.4.1 优化查找 目录的主要目的是当需要时可以到它里面去查信息。因此,通常是按读操作的最优化实 现的。这基于经常地读目录而不是写目录的假设。 A D正是这样优化的。 21.4.2 查找功能 前面所有的屏幕截图演示的都是浏览操作,也就是看看目录中不同的容器里有什么内容。 更经常的情况是进行查找。查找就是根据一个对象的一个或多个属性找出它在目录中的位置。 例如,可能需要找出所有的两个月没有注册的用户帐号以禁用它们。尽管从屏幕截图中已经 看到,所有的用户帐号恰好全部存在于 A D的同一个容器里,但要知道,实际不总是这种情况, 通常要执行一下查找操作以确定已找到了所有的用户帐号。 目录一般支持非常复杂的查找请求。找出所有的两个月没有注册的用户帐号只是一个很 简单的请求。一个更复杂的请求可能是:显示注册名以“ a”开头、两个月没有注册的除域管 理者以外的所有用户帐号。所有符合 L D A P标准的目录,包括 A D,都支持这种复杂级别的请 求,这使查找成为一个非常强大的概念。 21.4.3 开放性 这意味着目录可以通过某一标准协议集进行访问。最常用的是 L D A P协议。通过开放的标 准协议使目录具有可访问性,这使得编写与它通讯的客户端应用程序十分容易,可以不需要 去学习那些厂家专有的A P I。 A D符合L D A P标准,并且随着学习 A D的不断深入,你会发现如何构造和访问数据是非常 重要的。A D有很多的特性,这些特性都是 L D A P需要的。 21.4.4 事务处理 很多商业数据库有相当完善的支持事务和当操作失败时回滚事务的功能。 SQL Server属 于这个范畴。A D O包括支持事务的方法,前提是数据源实现事务。在这里提到这个问题的原 因是事务处理在目录里通常并不是至关紧要的。 622计计ASP 3 高级编程 下载
第1)A0和D623 下载 214.5复制 检査一个软件是否有用的通常方法是看能否在企业环境具有可扩展性,目录也是如此 很多目录(包括AD)支持可扩展性的方法之一是允许它们自己被复制。换句话说,可以将目录 贝到多台机器上。对于AD,任何一个是域控制器的计算机都将存储一份AD的拷贝 有一个问题摆在我们面前:怎样确保不同拷贝里的内容是一致的。这问题也将潜在地引 发大量的网络数据流,因为每个拷贝都试图使自己保持与其他拷贝一样。的确,如果不小心 由这个问题产生的网络数据流可能会很容易将复制的初衷(可扩展性)破坏掉。 为解决这个问题,可借助于目录的另一个特性。前面已提到,完善的事务处理并不是目 录最优先考虑的。现在需要增加一点,当目录里同步不同的拷贝时,只要更新最终被执行了 就可以了。设计时AD就是这个观念。一份拷贝中允许有过时信息,但将在一段时间后与最新 的版本同步。AD执行一些完善的算法来确保这一点 215常见目录 以上讲了AD是什么和能做什么。下面介绍通常使用的可由ADSI访问的其他目录 2151 Netscape目录服务器 这是个可从 Netscape公司得到的通用的LDAP目录。这里的“通用”,意思是可以存储任 何内容。它是按具有高度可扩展性、分层数据存储、按读操作优化的原则设计的,而且有一 个只有少量限制(为维护与LDAP的兼容)的模式,你完全可以自己定义。 2152s元数据库 这是互联网信息服务器(IS)的配置数据的数据库。可通过ADSI访问它和Web站点上所 虚拟目录的细节。然而,元数据库( metabase)却不遵从LDAP标准 21.53 Exchange Server目录和站点服务器成员目录 所以把这二者放在一起是因为它们很快将与AD合并,将不再把它们作为分离的目录。 它们都是符合LDAP标准的。 Exchange Server目录提供如地址和分布列表等信息给 Exchange 而站点服务器成员目录存储了标识访问过该站点的用户的数据,用于产生为这些用户 定制的网页并提供专门的安全性支持。 2154 Netware目录服务 这是AD在 Novell网里的等价物,像AD一样存储了用户帐号、网络资源和安全权限等信息。 但是,它不遵从LDAP标准 215.5 WinNT 我把它放在最后,严格说来它根本就不应该在这个列表里。 WinNt是一个虚构的目录, 是作为ADSI提供者注册的COM组件集。换句话说,它允许通过ADSI存取目录。这些组件搜 集网络中用户和计算机帐号的信息以及在不同机器上运行的服务。这些信息被汇集起来并发
21.4.5 复制 检查一个软件是否有用的通常方法是看能否在企业环境具有可扩展性,目录也是如此。 很多目录(包括A D )支持可扩展性的方法之一是允许它们自己被复制。换句话说,可以将目录 拷贝到多台机器上。对于A D,任何一个是域控制器的计算机都将存储一份 A D的拷贝。 有一个问题摆在我们面前:怎样确保不同拷贝里的内容是一致的。这问题也将潜在地引 发大量的网络数据流,因为每个拷贝都试图使自己保持与其他拷贝一样。的确,如果不小心, 由这个问题产生的网络数据流可能会很容易将复制的初衷 (可扩展性)破坏掉。 为解决这个问题,可借助于目录的另一个特性。前面已提到,完善的事务处理并不是目 录最优先考虑的。现在需要增加一点,当目录里同步不同的拷贝时,只要更新最终被执行了 就可以了。设计时 A D就是这个观念。一份拷贝中允许有过时信息,但将在一段时间后与最新 的版本同步。A D执行一些完善的算法来确保这一点。 21.5 常见目录 以上讲了A D是什么和能做什么。下面介绍通常使用的可由 A D S I访问的其他目录。 21.5.1 Netscape目录服务器 这是个可从N e t s c a p e公司得到的通用的 L D A P目录。这里的“通用”,意思是可以存储任 何内容。它是按具有高度可扩展性、分层数据存储、按读操作优化的原则设计的,而且有一 个只有少量限制(为维护与L D A P的兼容)的模式,你完全可以自己定义。 21.5.2 IIS元数据库 这是互联网信息服务器 ( I I S )的配置数据的数据库。可通过 A D S I访问它和We b站点上所有 虚拟目录的细节。然而,元数据库 ( m e t a b a s e )却不遵从L D A P标准。 21.5.3 Exchange Server目录和站点服务器成员目录 之所以把这二者放在一起是因为它们很快将与 A D合并,将不再把它们作为分离的目录。 它们都是符合 L D A P标准的。Exchange Server目录提供如地址和分布列表等信息给 E x c h a n g e S e r v e r,而站点服务器成员目录存储了标识访问过该站点的用户的数据,用于产生为这些用户 定制的网页并提供专门的安全性支持。 21.5.4 Netware 目录服务 这是A D在N o v e l l网里的等价物,像A D一样存储了用户帐号、网络资源和安全权限等信息。 但是,它不遵从L D A P标准。 21.5.5 Wi n N T 我把它放在最后,严格说来它根本就不应该在这个列表里。 Wi n N T是一个虚构的目录, 是作为A D S I提供者注册的C O M组件集。换句话说,它允许通过 A D S I存取目录。这些组件搜 集网络中用户和计算机帐号的信息以及在不同机器上运行的服务。这些信息被汇集起来并发 第2 1章 A D S I和A D介绍计计623 下载
624Ap高程 Chia°pde 下载 送给客户端,好像它是一个单独的目录 这有两个理由。首先,考虑到很多网络用的还是NT40域控制器,而且其中很多在一定 时间内还不能升级到 Windows2000发布ADS和 Windows2000之间有着12个月的间隔)。很显 然,如果这些系统里的用户使用脚本语言和自动化COM组件,他们不能访问AD提供的用于访 问域信息的任何功能,这将是很糟糕的事。 WinNt提供者满足了这种要求 另外, WinNt允许访问属于各个机器的一些信息,例如运行NT服务。缺省情况下,这些 信息并不存储在以域为中心的AD里 216ADS的适用范围 图21-7表示了一个客户程序(典型的ASP页面)用ADS访问目录时,各种各样的软件联系在 起的方式 冈络:机器间 的边界 活动目录 ADSI LDAP LDAP 提供者 协议 目录 ASP页面 ADSI WinN 其他LDAP (客户) 提供者 目录 ADSI IIS 提供者 关于网络中计算机的信息 元数据库 冈络:机器间 的边界 图21-7客户程序与目录和其他软件之间的联系 图21-7表明ADSI介于目录和客户程序之间。可把它想像成一套能翻译客户所使用的API 的组件,这些API用于对目录的访问。ADSI是标准的基于COM的AP,ADSI是客户程序唯一 需要了解的API。从这种程度上,ADSI和ADO的工作方式相差不多。 注意图21-7中标出了客户程序通过网络的可能点,即实线与虚线相交的点。ADSI提供者 是进程内的组件,因此被放在运行ASP页面的机器上。另一方面,目录服务程序可能被放在 另一台机器上。在IS里,因为是在IS下运行ASP页面,所以IS肯定在ASP页所在的同一台机 器上!然而当在ⅤB或C++里用ADSI时不一定是这样,这也是为什么在网络中列出了IS元数 据库的原因 ADSI,和ADO一样,使用了一系列的提供者。一个ADSI提供者是一个能访问目录集或 某个特定目录的COM组件集。安装ADSI时,会发现它附带一些 Microsoft写的标准提供者(称
送给客户端,好像它是一个单独的目录。 这有两个理由。首先,考虑到很多网络用的还是 NT 4.0域控制器,而且其中很多在一定 时间内还不能升级到Windows 2000(发布A D S I和Windows 2000之间有着1 2个月的间隔)。很显 然,如果这些系统里的用户使用脚本语言和自动化 C O M组件,他们不能访问A D提供的用于访 问域信息的任何功能,这将是很糟糕的事。 Wi n N T提供者满足了这种要求。 另外,Wi n N T允许访问属于各个机器的一些信息,例如运行 N T服务。缺省情况下,这些 信息并不存储在以域为中心的 A D里。 21.6 ADSI的适用范围 图2 1 - 7表示了一个客户程序(典型的A S P页面)用A D S I访问目录时,各种各样的软件联系在 一起的方式。 图21-7 客户程序与目录和其他软件之间的联系 图2 1 - 7表明A D S I介于目录和客户程序之间。可把它想像成一套能翻译客户所使用的 A P I 的组件,这些A P I用于对目录的访问。 A D S I是标准的基于C O M的A P I,A D S I是客户程序唯一 需要了解的A P I。从这种程度上,A D S I和A D O的工作方式相差不多。 注意图2 1 - 7中标出了客户程序通过网络的可能点,即实线与虚线相交的点。 A D S I提供者 是进程内的组件,因此被放在运行 A S P页面的机器上。另一方面,目录服务程序可能被放在 另一台机器上。在I I S里,因为是在I I S下运行A S P页面,所以I I S肯定在A S P页所在的同一台机 器上!然而当在 V B或C + +里用A D S I时不一定是这样,这也是为什么在网络中列出了 I I S元数 据库的原因。 A D S I,和A D O一样,使用了一系列的提供者。一个 A D S I提供者是一个能访问目录集或 某个特定目录的 C O M组件集。安装A D S I时,会发现它附带一些 M i c r o s o f t写的标准提供者 (称 624计计ASP 3 高级编程 下载 网络:机器间 的边界 网络:机器间 的边界 ASP 页面 (客户) ADSI LDAP 提供者 LDAP 协议 活动目录 目录 其他LDAP 目录 关于网络中计算机的信息 元数据库 ADSI WinNT 提供者 ADSI IIS 提供者