下载 第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>的容器中,这里 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 n a m e >的容器中,这里 domain name是用A D的格式表示的用户的域名 (见图2 1 - 2所示的屏幕截 图)。如果检查这个容器,将看到图 2 1 - 3所示的屏幕截图。 第2 1章 A D S I和A D介绍计计619 下载