Active Directory
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 Active Directory相关知识
1.1Active Directory概述
活动目录(Active Directory简称AD),是从win2000 开始引入的操作系统的重要组件。
AD可以认为是一个大的层次结构数据库,用来集中存储企业内部的用户帐户、计算机、打印机、应用程序、安全性与系统原则等各种重要资源。
AD允许网络用户通过单一登录就可以访问网络中任何位置的许可资源。
从开发人员角度看AD,可以理解AD是一种存放了应用程序所需要的特定资源信息的“数据库”。
AD还对这些资源信息的读取和查询进行了优化,而且它允许通过大量的用户定义以满足特定的商业和组织需要。
1.2几个相关术语简介
1.2.1容器和非容器
AD中的资源信息被组织成一个层次结构。
这个层次结构中的每一个实体都被简称为对象。
换句话说,AD中创建对象时,是把它们创建在一个层次结构中的。
该结构由两种类型的对象组成:Container(容器)和非Container(非容器)。
容器可容纳非容器或下一级的容器。
而非容器则不再包含其他对象,因此也常被成为叶或叶子对象。
在安装完活动目录后,操作系统已经默认自动创建了很多的Container,如Users, Builtin
1.2.2 OU
OU是Organizational Unit(组织单元或部门)的缩写。
OU是容器对象,它主要从逻辑的角度来管理和组织活动目录域。
可在其中放置用户、组、计算机、打印机、共享文件夹以及一个域内的其他部门。
部门(在Active Directory 用户和计算机界面中用文件夹表示)允许按逻辑关系组织并存储域中的对象。
如果有多个域,则每个域均可实现各自独立的部门层次。
如下图所示,部门中也可包含其他部门。
1.2.3 Naming Context
AD被分成许多部分,称之为分区或者命名上下文(Naming Context,简称NC)。
在AD中包含了三个命名上下文(Naming Context,NC):域命名上下文(Domain NC)、配置命名上下文(Configuration NC)和架构命名上下文(Schema NC)。
Domain NC用于保存用户、组和组织单元的相关信息。
Configuration NC用于保存整个域森林中的配置数据信息,如域控制器(DC)、站点(site)、子网(subnet)、站点连接及其他配置对象。
而Schema NC 负责保存与在活动目录中能够创建的所有的对象和属性集相关的数据。
1.2.4 AD架构
AD架构(Schema,又译做架构)是定义对象种类和对象信息类型的定义集,它存储在Active Directory中。
这些定义本身也作为对象存储,以使Active Directory可以采用管理目录中其余对象所使用的相同对象管理操作来管理架构对象。
AD架构以结构化的方式定义数据组成,它通过描述元数据(metadata)来定义这些结构,通常包括属性名称、类型、长度、关系等,这有点类似于关系型数据库中我们对表(Table)的字段所做的定义。
Schema定义了数据存储的格式。
包括类(classSchema),分为抽象类(Abstract)、附属类(Auxiliary)和结构类(Structure)三种;属性(attributeSchema),分为单值和多值属性;以及类和属性之间的关系,分为可选属性和必要属性。
AD中的Schema相当于全局的Catalog,在整个AD的forest中是全局唯一的,任何的修改都会被同步。
所以有关Schema 的修改需要有Schema Administrators的权限。
1.2.5类别、对象、属性和实例
域和配置命名上下文中,每一个AD对象都是一个对象类别(class)的(instance)。
比如用户对象是user类别的一个实例,计算机对象是computer类别的实例等。
类别描述了D 对象及与之相关的特性或属性,这些属性又被分为必须具有的属性(即强制属性,mandatory attribute)和可以选择的属性(即可选属性,optional attribute)。
架构命名上下文(Schema NC)包含了所有其他AD命名上下文中的类别和属性的定义。
在理解时,我们要仔细区分下面两种对象的差异:类别的实体(通常是保存在域和配置命名上下文中的对象)和类别及其属性的架构定义(通常是保存在架构命名上下文中的对象)。
有两种类型的架构对象:classSchema对象用来定义类别,attributeSchema对象用来定义属性。
所有的属性都只有一个定义,但可以被多个类别使用。
1.3 LDAP及ADsPath、DN、RDN
轻量级目录访问协议(Lightweight Directory Access Protocol 简称LDAP)是一个行业标准协议,由Internet 工程任务组(IETF) 制定。
LDAP 定义目录客户如何访问目录服务器以及客户如何进行目录操作并共享目录数据,它用于Active Directory 的主要访问协议。
每个Active Directory 对象均有一个LDAP DN。
可根据分层“路径”定位Active Directory 域内的对象,分层路径包括Active Directory 域名标签和容器对象每个级别的标签。
由DN (Distinguished Name唯一标识)定义到对象的完整路径。
对象自身的名称由RDN(Relative Distinguished Name相对唯一标识) 定义。
RDN是对象DN 的一部分(DN 是对象自身的一个属性)。
DN 可唯一识别域分层结构中的对象。
每个RDN 都保存于Active Directory 数据库中,并包含到其父层的引用。
在一次LDAP 操作中,通过跟踪各级引用,最后达到根目录,从而建立了整个DN 结构。
在一个完整的LDAP DN 中,待识别对象的RDN 在左侧出现的是叶名称;在结束的右侧出现的是根目录名称。
例如在\Users 目录用户cyj的DN为“CN=cyj,CN=Users, DC= dfl,DC=com,DC=cn”
在活动目录中层次结构的路径被称为ADsPath,ADsPath常用的表示为:ldap://DC=microsoft,DC=com/。
例如,有域被命名为,则它的ADsPath表示为:ldap:// DC= dfl,DC=com,DC=cn/。
下面看个示例:在域中用户容器中超级管理员帐号的ADsPath为:ldap://CN=Administrator,CN=Users,DC= dfl,DC=com,DC=cn/,其DN为(注意没有了LDAP:// 这个前缀):CN=Administrator,CN=Users, DC= dfl,DC=com,DC=cn,其RDN 为(即在Users容器中的名称):CN=Administrator。
下表列出的可分辨名称组件。
可分辨名称属性意义
C= 国家(地区)
CN= 公用名
DC= 域组件
L= 位置
O= 组织
OU= 组织单位
1.4 AD中对象命名规则
Active Directory 支持对象名称的几种不同格式,用以适应名称可能会采用的不同形式;采用何种形式取决于名称的使用环境。
下面的子节说明Active Directory 对象命名规则的这些类型:
●安全主管名称。
●安全标识符(又称安全ID 或SID)。
●与LDAP 相关的名称(包括DN、RDN、URL 以及规范名称)。
●对象GUID。
●登录名(包括UPN 和SAM 帐户名)。
1.4.1安全主管名称
安全主管是由Active Directory 管理的对象,拥有自动分配的安全标识符(SID),用于登录身份验证和访问资源。
安全主管可以是用户帐户、计算机帐户或组;因此,安全主管名称是用来唯一标识一个域内的用户、计算机或组的名称。
安全主管对象必须由所在域的域控制器进行身份验证,并且可授予或剥夺其对网络资源的访问权。
安全主管对象的名称必须符合以下规则:
名称不得与同一域内的任何其他用户、计算机或组名称相同。
名称最多可包含20 个大写或小写字符,但以下字符除外:" / [ ] : ; | = , + * ? <>用户名、计算机名或组名不可只包含英文句号(.) 或空格。
1.4.2安全ID (SID)
安全标识符(SID) 是操作系统安全子系统创建的唯一数字,分配给安全主管对象,即分配给用户、组和计算机帐户。
网络上的每个帐户都会在首次创建时获得唯一的一个SID。
操作系统的内部进程引用帐户的SID,而不是帐户的用户或组名。
每个Active Directory 对象都由访问控制项(ACE) 保护,访问控制项能够识别哪些用户或组可以访问该对象。
每个ACE 都包含有权访问该对象的每个用户或组的SID,并定义了允许进行的访问的级别。
例如,一个用户可能对某些文件有只读权限,对另一些文件有读写权限,而对其他的文件则没有访问权限。
假设您先创建了一个帐户,而后又将其删除;然后又以相同用户名创建了一个帐户,此时,新帐户没有旧帐户以前所具有的权限或许可,因为新旧帐户的SID 号码不同。
1.4.3 与LDAP 相关的名称(略)
1.4.4 对象GUID
Active Directory 中的每个对象都有一个全局唯一标识符(GUID);这是一个在对象创建时由目录系统代理分配的128 位数字。
GUID 不能被更改或删除,它保存在属性objectGUID 中,该属性是每个对象的必有属性。
与DN 或RDN 的可更改性有所不同,GUID 永不改变。
要在外部存储区(例如Microsoft SQL Server™ 数据库)保存对Active Directory 对象的引用,就应该使用objectGUID 值。
1.4.5登录名:UPN 和SAM 帐户名
安全主管是在登录身份验证和资源访问授权两方面均应用基于Windows 的安全措施的对象。
用户即是一种类型的安全主管。
用户安全主管需要唯一的登录名,以获取对域及其资源的访问权。
以下两说明了两种类型的登录名--UPN 和SAM 帐户名。
1.4.5.1用户主管名称(UPN)
在Active Directory 中,每个用户帐户都有一个“用户主管名(UPN)”,格式为:<user>@<DNS-domain-name>。
UPN 是由管理员指定的友好名,它比系统使用的LDAP 可分辨名称要短,因此更易于记忆。
UPN 独立于用户对象的DN,所以移动或重新命名用户对象时不会影响用户登录名。
使用UPN 登录时,用户就不必再由登录对话框的列表中选择域了。
UPN 的三部分是:UPN 前缀(用户登录名),@ 字符以及UPN 后缀(通常是一个域名)。
用户帐户的默认UPN 后缀是Active Directory 域的DNS 名,该域是用户帐户所处的位置。
例如,用户John Doe 在 域(如果 是目录树中唯一的域)中有一个用户帐户,其UPN 为JDoe@;UPN 是安全主管对象的属性(userPrincipalName)。
如果用户对象的userPrincipalName 属性没有值,则用户对象会有一个默认UPN:userName@DnsDomainName。
1.4.5.2 SAM 帐户名
考虑到与Windows NT 3.x和Windows NT 4.0 域的兼容性,需要引入安全帐户管理器(SAM) 帐户名。
Windows 2000 用户界面将SAM 帐户名称之为“用户登录名(Windows 2000 以前版本)”。
SAM 帐户名有时也称为无层次名,因为与DNS 名不同,SAM 帐户名不使用分层命名方式。
由于SAM 名是无层次的,因此每个名称在域中都必须是唯一的。
1.5 AD程序访问接口
图一AD/ADAM程序访问接口示意图
1.5.1 DSML
目录服务标记语言(DSML) 提供一种将目录结构信息和目录操作表示为XML 文档的手段。
DSML 旨在使得基于XML 的企业应用程序能够利用本地环境中的目录中的配置文件和资源信息。
使用DSML,XML 和目录能够协作,并为所有基于XML 的应用程序提供一个共同基础,以便它们能够更好地利用目录。
由于了解不多,在此不作讨论
1.5.2 Provider
在AD中存储的数据被当作一个一个的对象,每一个对象是一个classSchema的实例。
都有一个唯一的路径访问。
AD中对象的路径由所支持的Provider决定,通常使用比较多的是LDAP,可以通过这个Provider针对域用户以及其他扩展信息进行访问和管理。
WinNT 是针对NT4的帐号管理,估计是向下兼容。
NDS是对Netware的DN的访问,对我们而言不太会用到。
对于WinNT从左到右范围是减小,而对于LDAP从左到右范围增大,比如访问我的帐号,路径分别为WinNT:///Users/cyj,LDAP://CN=cyj,CN=Users,DC=dfl,DC=com,DC=cn
1.5.3 ADSI
(Active Directory Service Interface)是用来对AD中存储数据的访问接口,它允许应用程序使用单个接口与网络上的不同目录进行交互。
它是一个架空的框架,与具体的数据访问无关,只是给上层应用提供一个统一的接口。
实际工作的就是Provider,应当是Provider 访问数据,然后包装成ADSI要求的形式,这些工作对用用户来说完全透明。
通过ADSI访
问AD比较简单,实际上是应用WinNT和LDAP这两个Provider。
1.5.4 System.DirectoryServices
System.DirecotryServices命名空间下有两个主要的类:DirectoryEntry和DirectorySearcher。
其中DirectoryEntry类用于表示活动目录中任何一个对象。
你可以通过DirectoryEntry对活动目录里的对象进行修改其属性、移动、重命名、列举其内部子对象、创建子对象、删除子对象、获取起父对象等等操作。
DirectorySearcher类常用属性、常用方法及其说明:
CacheResults 获取或设置一个值,该值指示是否在客户计算机上缓存结果。
ClientTimeout 获取或设置客户端等候服务器返回结果的最长时间。
如果服务器在此时间内不响应,则中止搜索,不返回任何结果。
Container(从Component 继承)获取IContainer,它包含Component。
Filter 获取或设置轻量目录访问协议(LDAP) 格式筛选器字符串。
PageSize 获取或设置分页搜索中的页大小。
PropertiesToLoad 获取在搜索过程中检索的属性集。
SearchRoot 获取或设置Active Directory 层次结构中的搜索开始处的节点。
SearchScope 获取或设置服务器遵循的搜索范围。
ServerPageTimeLimit 获取或设置在搜索单页结果时服务器应遵循的时间限制(与整个
搜索的时间限制相对)。
ServerTimeLimit 获取或设置服务器在进行搜索时可花费的最长时间。
如果达到时间限制,则只返回在该时间之前查找到的项。
SizeLimit 获取或设置服务器在搜索中返回的对象的最大数量。
Sort 获取对结果进行排序所依据的属性。
CreateObjRef(从MarshalByRefObject 继承)创建一个对象,该对象包含生成用于与远程对象进行通讯的代理所需的全部相关信息。
FindAll 执行搜索并返回找到的项的集合。
FindOne 执行搜索并只返回找到的第一项。
1.6 AD编程过程(实例说明)
1.6.1使用System.DirectoryServices 搜索Active Directory 1.6.1.1添加对System.DirectoryServices.dll 程序集的引用
1.6.1.2建立连接
System.DirectoryServices命名空间中有两个主要类,即DirectoryEntry和DirectorySearcher。
搜索将使用DirectorySearcher类来执行。
使用该类时,可以不设置任何选项,也可以提供一个根DirectoryEntry对象。
如果创建了DirectoryEntry对象并用作搜索的根,则需要指定路径以说明要连接的服务,还要指定您的安全凭据。
创建此单一对象时即建立了指向您的目录的连接。
通过提供此DirectoryEntry对象作为搜索的根,您便可以使用此连接进行查询。
或者,如果不指定根对象,DirectorySearcher将自动绑定到当前域,并使用您的Microsoft® Windows® 凭据进行身份验证。
1.6.1.3绑定到目录路径
要连接到Active Directory,您可以使用全局编录(GC://) 语法来指定路径,也可以使用标准的LDAP 路径(LDAP://)。
具体使用哪种语法和路径视您的网络环境而定。
例如,在我自己的内部网络中,我会使用全局编录语法,因为这使我可以在整个企业网络范围(整
个Active Directory 森林)内进行搜索。
此处指定LDAP 路径
“(LDAP://dc=dfl,dc=com,dc=cn”(假设我的域称为),该路径会告知ADSI 连接到指定的域服务器。
当然如果您愿意,也可以不指定任何路径来建立连接。
如果使用DirectorySearcher对象而未提供任何根对象,它将自动使用当前域进行搜索。
1.6.1.4验证目录
指定LDAP 或GC 路径后,接下来要处理的是安全凭据。
您可以使用DirectoryEntry类的构造函数来指定用户ID 和密码,或者在创建该对象的实例后再设置用户ID 和密码。
Dim rootEntry As New
DirectoryEntry("GC://dc=home,dc=duncanmackenzie,dc=net",_
userID.Text, password.Text)
如果您不指定用户ID 和密码,System.DirectoryServices将尝试使用Windows 集成身份验证进行连接。
通常,选择集成身份验证,至少在Microsoft® Windows 窗体应用程序中会使用这种验证,因为这样每个用户可以仅使用各自已有的Active Directory 权限集。
使用硬编码的用户ID 和密码可能会使我的应用程序赋予用户大于所预期的Active Directory 访问权限,从而带来安全隐患。
1.6.1.5执行搜索
创建初始(根)DirectoryEntry后,您就可以使用DirectorySearcher类来执行查询。
执行简单的搜索只需要以下几个步骤:
A、创建DirectorySearcher的实例,可以选择使用根DirectoryEntry对象。
B、将搜索筛选器设置为描述搜索条件的字符串。
C、使用要为每个搜索结果检索的Active Directory 属性列表填充
PropertiesToLoad 集合。
D、执行FindAll 方法并检索结果。
如果需要,您可以跳过几乎所有这些步骤,使用默认设置执行搜索。
如果不提供根DirectoryEntry对象,DirectorySearcher将绑定到当前域;如果不提供搜索筛选器,将默认检索所有对象;如果不指定任何PropertiesToLoad 值,将检索所有属性(您可以读取的属性)。
这些默认设置使得DirectoryServices 类的使用非常简便。
不过,我建议您至少使用一个筛选器来限制搜索,并限制加载的属性集,除非您的应用程序确实需要所有属性和所有对象。
Dim searcher As New DirectorySearcher(rootEntry)
searcher.PropertiesToLoad.Add("cn")
searcher.PropertiesToLoad.Add("mail")
' searcher.PropertiesToLoad.AddRange(New String() {"cn", "mail"})
' 将同样有效并节省一些代码
searcher.Filter = "(&(anr=duncan)(objectCategory=person))"
Dim results As SearchResultCollection
results = searcher.FindAll()
1.6.1.6使用结果
执行搜索后,您将得到一个返回的SearchResultCollection类的实例,该实例使您可以对结果进行枚举。
这时是否使用了分页并不重要,您仍然是以相同的方式在访问搜索结果。
如果下一页的结果尚不可用,您的枚举将被锁定,直至结果就绪。
Dim result As SearchResult
For Each result In results
MessageBox.Show(result.Properties("cn")(0))
Next
1.6.1.7使用DirectoryServices 对象进行数据绑定
目录条目具有动态属性,即它们不具备预先定义的属性集,属性集是在运行时确定的。
这对DirectoryServices对象来说是个很好的模式,因为任何特定对象上的可用属性集都不是固定的。
然而,当您尝试使用这些对象绑定数据时则会出现一个问题。
因为在没有固定属性集的情况下,您无法直接将诸如DataGrid的控件绑定到SearchResult对象集合。
如果您确实希望绑定数据,也是可能的,只是需要再做些工作。
从本质上说,您必须将搜索结果从DirectoryServices包装到其他具有静态属性的对象中,然后再绑定到这个新对象。
有两种选择:一是编写一个提供所需的特定属性的自定义类,然后每次在DirectoryServices 搜索中添加或删除属性时都更改这个类;二是动态创建一个DataTable,并使用它作为我的可绑定对象。
创建DataTable的方法更简便并且运行效果也不错,因此这里选择了这种方法。
要创建不带有数据库(或XML 文件)的DataTable,需要创建新的DataTable实例,并为您的每个属性在其中添加DataColumns。
Dim myTable As New DataTable("Results")
Dim colName As String
For Each colName In searcher.PropertiesToLoad
myTable.Columns.Add(colName, GetType(System.String))
Next
开始接收结果时,只需要填充DataTable就可以实现绑定。
Dim result As SearchResult
For Each result In queryResults
Dim dr As DataRow = myTable.NewRow()
For Each colName In searcher.PropertiesToLoad
If result.Properties.Contains(colName) Then
dr(colName) = CStr(result.Properties(colName)(0))
Else
dr(colName) = ""
End If
Next
myTable.Rows.Add(dr)
Next
results.SetDataBinding(myTable.DefaultView, "")
1.6.1.8其他相关知识
DirectorySearcher实例有两个主要方法:FindAll()和FindOne()。
FindAll()是获取该对象的所有子对象集合;而FindOne()则获取查询到的第一个子对象。
对于DirectorySearcher 实例,其也有SearchRoot、SearchScope、Filter三个主要属性。
其中,SearchRoot表示在AD 层次结构中要开始搜索的节点;SearchScope表示搜索范围;而Filter则表示LDAP查询语句的过滤命令字符串,例如(&(objectCategory=person)(objectClass=user)) 表示列举所有用户对象中的人员对象。
而对于搜索范围SearchScope,则又分为Base、OneLevel、Subtree三种。
其中,Base表示要那个搜索的根节点;OneLevel表示在同一个层次中搜索;Subtree则表示在包括根节点的所有节点的搜索。
其示意图如下:
LDAP是一个查询为主的记录结构,无论是何种查询方式,最终都由过滤器设置查询的条件。
过滤器相当于SQL中的WHERE子句。
任何LDAP的类过滤和字符串都必须放在括号内,如(objectclass=*),指列出所有类型的记录(不过分类)。
可以使用=,>=,<=,~=(约等于)进行比较,如(number<=100)。
合并条件是最怪的,必须把操作符放在两个操作对象的前面而不是中间,单一操作对象用括号括起来。
如:
A与B,不是A&B,而是(&(A)(B))。
或使用"|"表示;
非使用"!"表示。
对于"与",或"或"在操作符后可以跟多个条件表达式,但非后则只参是单个表达式。
使用SQLServer查询分析器查询活动目录数据的实现方法:
为AD创建一个链接服务器(你可以在企业管理器的具体SQLServer服务器里的“安全
性”里看到该项)。
在查询分析器中执行下面命令即可:
sp_addlinkedserver 'ADSI', 'Active Directory Service Interfaces', 'ADSDSOObject', 'adsdatasource'
现在你就可以在查询分析器中查询AD数据了。
例如下面查询语句:
SELECT * FROM OpenQuery(ADSI, 'SELECT title, displayName, sAMAccountName, givenName, telephoneNumber, facsimileTelephoneNumber, sn FROM ''LDAP://DC=mydomain,DC=local'' where objectClass = ''User''')
1.6.2使用目录服务和Visual C# .NET 向本地系统添加用户
static void Main(string[] args)
{
try
{
/*假定系统正在运行Microsoft Windows NT、Windows 2000 或Windows XP。
注意,向DirectoryEntry构造函数传递以“WinNT://”开头的字符串。
*/
DirectoryEntry AD = new DirectoryEntry("WinNT://" +
Environment.MachineName + ",computer");
/*在Active Directory树中添加了一个user类型的、值为TestUser1的DirectoryEntry。
*/
DirectoryEntry NewUser = AD.Children.Add("TestUser1", "user");
/*调用Invoke方法来调用DirectoryEntry对象的SetPassword和Put方法
NewUser.Invoke("SetPassword", new object[] {"#12345Abc"});
NewUser.Invoke("Put", new object[] {"Description", "Test User
rom .NET"});
/*调用CommitChanges方法保存这些更改。
*/
mitChanges();
DirectoryEntry grp;
/*将帐户添加到组的第一步是定义DirectoryEntry类型的变量。
然后调用
ActiveDirectory类Children成员的Find方法来填充变量。
*/
grp = AD.Children.Find("Guests", "group");
if (grp != null)
{grp.Invoke("Add", new object[] {NewUser.Path.ToString()});}
Console.WriteLine("Account Created Successfully");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}
}
1.7 Active Directory 的优点
1.7.1与DNS 集成
Active Directory 使用域名系统(DNS)。
DNS 是一种Internet 标准服务,它将用户能够读取的计算机名称(例如)翻译成计算机能够读取的数字Internet 协议(IP) 地址。
这样,在TCP/IP 网络计算机上运行的进程即可相互识别并进行连接。
1.7.2灵活的查询
用户和管理员如果要通过对象属性快速查找网络中的对象,可使用“开始”菜单中的“查找”命令、桌面上的“网上邻居”图标或者是Active Directory 用户和计算机管理单元。
例如,您可以按照一个用户帐户的姓名、电子邮件名、办公地点或其他属性查找该用户。
而且,使用全局编录优化了查找信息的操作。
1.7.3 可扩展性
Active Directory 是可扩展的;也就是说,管理员既可以在架构中添加新的对象类别,也可在原有的对象类别中添加新属性。
架构包含每个对象类别的定义,以及能够存储于目录中的每个对象类别的属性。
例如,您可能会为User 对象添加Purchase Authority 属性,然后将每个用户的购买权限额保存为用户帐户的一部分。
1.7.4 基于策略的管理
组策略是在初始化时应用于计算机或用户的配置设置。
所有组策略设置都包含在应用于Active Directory 站点、域或部门的组策略对象(GPO) 中。
GPO 设置决定了对目录对象和域资源的访问权限、用户可使用的域资源(如应用程序),以及这些域资源针对其用途的配置方式。
1.7.5可伸缩性
Active Directory 包括一个或多个域,每个域均有一个或多个域控制器,由此,您能够对目录进行自由扩展,从而满足所有网络的需求。
多个域可合并成一个域目录树,多个域目录树可合并成一个目录林。
在只有一个域的最简单的网络结构中,该域既是一个目录树,又是一个目录林。
1.7.6信息复制
Active Directory 使用多主机复制,使您可以更新任何域控制器中的目录。
在一个域中部署多个域控制器还提供了容错能力和负载平衡功能。
因为这些域控制器包含同样的目录数据,所以,如果域内的一个域控制器速度变慢、停止或出现故障,同一域内的其他域控制器即可提供必要的目录访问功能。
1.7.7信息安全
在Windows 2000 操作系统中,用户身份验证和访问控制的管理都与Active Directory 完全结合在一起,这是该系统的一项关键性安全功能。
Active Directory 将身份验证集中进行。
不仅可以定义对目录中每个对象的访问控制,还可定义对每个对象的每个属性的访问控制。
此外,Active Directory 还为安全策略提供了存储区和应用范围。
1.7.8互操作性
由于Active Directory 以标准目录访问协议(例如轻型目录访问协议(LDAP))为基础,因此它能够与其他采用这些协议的目录服务进行交互操作。
有些应用程序编程接口(API)--例如Active Directory 服务接口(ADSI)--允许开发者访问这些协议。
2、ADAM相关知识
2.1 ADAM 简介
针对需要灵活支持启用目录的应用程序的单位,Microsoft 开发了 Active Directory 应用程序模式 (ADAM)。
ADAM 是一种轻型目录访问协议 (LDAP) 目录服务,它作为用户服务而不是作为系统服务运行。
可以在运行Microsoft® Windows® Server 2003 的服务器上运行 ADAM,也可以在运行Microsoft® Windows® XP Professional 的客户端上运行 ADAM。
ADAM 为启用目录的应用程序提供了数据存储和检索,但不需要 Active Directory® 目录服务所要求的依赖关系。
ADAM 提供了大量与 Active Directory 相同的功能,但它不要求部署域或域控制器。
可以在同一台计算机上同时运行多个 ADAM 实例,每个 ADAM 实例都具有单独管理的架构。
2.2 体系结构
Active Directory 应用程序模式 (ADAM) 与 Active Directory 使用相同的体系结构- 甚至相同的基本代码。
ADAM 提供客户端可以用来与目录服务进行通信的分层数据存储、目录服务组件和接口。
下表列出了基本的 ADAM 组件,以及它们的 Active Directory 对应组件。
组件ADAM Active Directory目的。