有了 Active Directory 服务接口 (ADSI),就可以使用 Microsoft Visual Basic 编程系统、Java、C 或 Visual C++ 开发系统等高级工具方便地创建支持目录的应用程序,而无须担心不同目录实现或命名空间的潜在差异。即您可以生成应用程序,通过一个点访问网络环境中的多个目录,无论这些目录是基于 LDAP、NDS 还是 NTDS。 Microsoft%26reg; Exchange 5.5 是可扩展的、可靠且安全的消息传递平台。Microsoft Exchange 5.5 目录服务支持轻型目录访问协议 (LDAP) 第三版。可以将 ADSI 与 LDAP 提供程序一起使用,处理 Microsoft Exchange 5.5 目录中的任何对象。管理员和开发人员使用这一功能以及协作数据对象 (CDO),可以高效率地编写功能强大的协作应用程序或管理工具。CDO 以前被称为 Active Messaging,它提供处理消息和日历对象的对象接口以及提交和检索此类对象。 本文有助于应用程序开发人员使用 Exchange 5.5 目录服务上的 ADSI,编写支持目录的应用程序。 ADSI 和 LDAP ADSI 为目录对象提供 COM 接口。ADSI 建立在基于提供程序的模型之上,在提供程序映射基础目录系统和 ADSI 客户端显现的 COM 接口的同时,客户端与 ADSI 所显现的 COM 接口进行交互。在 NDS 目录中创建或更改用户的 ADSI 应用程序,可用于在 Exchange 5.5 目录中创建用户。另一方面,LDAP 是用于目录访问的有线协议。所以,LDAP 应用程序仅限访问显现 LDAP 协议的目录。 既然 ADSI 是一组 COM 对象,因此可方便地用于 VB 或 Java 脚本,使基于 Web 的应用程序支持目录。而使用基于‘C’的 LDAP API 完成这一操作就要困难得多。 ADSI 和 ADO ADO 用于在目录中执行搜索,并以表格形式给出结果。另一方面,ADSI 用于更改目录中的项。通常,使用 ADO 搜索一个或多个对象,然后在结果集中反复查找,并更改所指定的对象。在下面的示例中给出了 ADSI 和 ADO 的用法。 Microsoft Exchange 目录架构 为了编写在 Exchange 目录上使用 ADSI 的应用程序,必须对目录架构有一定的了解。该架构定义了目录中的对象类、对象类之间的关系、每个对象类的属性以及属性和类的特性。使用 Exchange Administration 程序,您可以查看 Exchange 目录架构。若要执行此操作: 在 RAW 模式下运行 Exchange Admin (admin /r)。 从菜单上选择“View.Raw Directory”。 从左窗口中选择“Schema”。 从右窗口双击代表相关属性或对象类的对象。 在 ADSI 支持中有以下三个重要的属性: Heuristic Heuristic 属性的解释如下: 第 0 位
0:在站点间复制
1:不在站点间复制
第 1 位
0:属性对于 LDAP 不可见
1:属性对于匿名的和已验证的 LDAP 客户端可见
第 2 位
0:已验证的客户不能访问属性
1:已验证的客户可以访问属性(但匿名客户不可以)
第 3 位
0:属性不是操作属性
1:属性是操作属性
第 4 位
0:属性在 Admin UI 中不可见(DS Site Configuration 对象的属性页)
1:属性在 Admin UI 中可见(DS Site Configuration 对象的属性页)
查看 Heuristic 值,就可以确定特定属性是否可见。例如,Heuristic 值为 3 说明该属性不能在站点间复制,且对于匿名 LDAP 客户可见。 Heuristic 值为 11 说明该属性为操作属性,且对于已验证的 LDAP 客户端可见。操作属性(设置了 Heuristic 位 3 的属性)对 ADSI 不可见,即使可以设置其值,也是如此。要获得操作属性的值,必须使用 ADO 查询,如下例所示。注意:更改 Heuristic 属性位 0 的值,可能会使目录复制停止。不应更改某一属性的 Heuristic 特性的这一位。 ACL: ACL 属性决定了用户更改属性所需的权限。ACL 属性值的定义如下: 0:只有系统可以更改该属性 1:有更改管理权限的用户可以更改该属性 2:有更改用户权限的用户可以更改该属性 3:有更改许可权限的用户可以更改该属性 说明 说明确定了属性或类的 LDAP 名称。 注意 更改 LDAP 名称将出现互操作性问题。 常用对象类 下面给出了常用对象类及其最重要的属性。下表中的列解释如下: LDAP 名称:通过 LDAP 显现的属性名称(Exchange 架构中对该属性的说明) Exchange 名称:在 Exchange 架构中该属性的名称 Mandatory:对象的属性是强制的还是非强制的 Heuristic:属性的 heuristic 值,如上所述。 ACL:属性的访问类别如上所示。 语法:属性的语法。 Boolean:布尔型语法的属性的值为 TRUE 或 FALSE Integer:任何整数值 String(Unicode):Unicode 字符串 String(Numeric):数字字符串 String(Octet):二进制字符串。根据 LDAP,使用二进制表示的字符串编码,支持二进制属性。 Object(DS-DN):采用 rfc1779 格式的 DN(如cn=jsmith,ou=redmond,o=microsoft,c=us) 注释:关于该属性的注释。 Mail-Recipient(个人)对象类 Mail-Recipient 对象类通过 LDAP 显现为‘个人’对象类。该对象类可由邮件能发送到的所有对象类继承,例如邮箱、自定义收件人、通讯组和公用文件夹。值得指出的是该对象类是抽象的。所以您不能创建该对象类的实例。定义它只是为了让目录中的其它对象类继承其属性。下表给出了‘个人’对象类上常用的属性: Exchange 名称
Mandatory
Heuristic
ACL
语法
注释
Common-Name
Y
2
1
String(Teletex)
公用名称(该对象的 RDN)
Display Name
N
2
1
String(Unicode)
地址簿所显示的字符串
Language-ISO639
N
3
2
String(Unicode)
ISO639 语言
LabeledURI
N
5
2
String(Unicode)
指定默认 HTML Web 页的 URL
Voice-Mail-
Recorded-Name
N
13
2
String(Octet)
语音邮件用户的别名
Voice-Mail-
Password
N
13
2
String(Unicode)
代表用户帐户安全代码的 DTMF 数字
Voice-Mail-
Greetings
N
13
2
String(Unicode)
语音邮件用户所录制的问候语
Voice-Mail-
User-ID
N
13
2
String(Unicode)
代表用户帐户的 DTMF 数字(如电话分机)
MAPI-Recipient
N
18
1
Boolean
向网关表明其是不是 MAPI 收件人(True=是,False=否)
Proxy-Addresses
N
18
1
String(Teletex)
该收件人的外部邮件系统的地址列表。该属性按如下方式显现:主 SMTP 地址 - 邮件主 X.400 地址 - textEncodedORAddress 其它地址 - otherMailbox
Display-Name-
Printable
N
18
1
String(Printable)
此‘显示名称’的可打印字符串版本。
Mail-nickname
N
18
1
String(Unicode)
邮件昵称
Comment
N
18
2
String(Unicode)
该收件人在 Exchange 地址簿中的注释。
WWW-Home-
Page
N
18
2
String(Unicode)
与该项相关的 WWW 主页
X509-Cert
N
18
2
String(Octet)
用户的 X.509 v3 证书
Extension-
Attribute-9
N
20
1
String(Unicode)
供客户使用的通用扩展属性
Extension-
Attribute-1
N
20
1
String(Unicode)
供客户使用的通用扩展属性
Extension-
Attribute-10
N
20
1
String(Unicode)
供客户使用的通用扩展属性
Extension-
Attribute-2
N
20
1
String(Unicode)
供客户使用的通用扩展属性
Extension-
Attribute-3
N
20
1
String(Unicode)
供客户使用的通用扩展属性
Extension-
Attribute-4
N
20
1
String(Unicode)
供客户使用的通用扩展属性
Extension-
Attribute-5
N
20
1
String(Unicode)
供客户使用的通用扩展属性
Extension -
Attribute -6
N
20
1
String(Unicode)
供客户使用的通用扩展属性
Extension-
Attribute-7
N
20
1
String(Unicode)
供客户使用的通用扩展属性
Extension-
Attribute-8
N
20
1
String(Unicode)
供客户使用的通用扩展属性
Extension-
Attribute-15
N
21
1
String(Unicode)
供客户使用的通用扩展属性
Extension-
Attribute-11
N
21
1
String(Unicode)
供客户使用的通用扩展属性
Extension-
Attribute-12
N
21
1
String(Unicode)
供客户使用的通用扩展属性
Extension-
Attribute-14
N
21
1
String(Unicode)
供客户使用的通用扩展属性
Extension-
Attribute- 13
N
21
1
String(Unicode)
供客户使用的通用扩展属性
Mailbox (organizationalPerson) Object Class Mailbox 对象类通过 LDAP 显现为 organizationaPerson 对象类。该对象类代表在 Microsoft Exchange 系统中包含邮件存储的一个对象。Mailbox 对象的一个关键属性是 Assoc-NT-Account,它包含对该邮箱有访问权限的 NT 帐户的安全标识符 (SID)。 LDAP 名称
Exchange 名称
Mandatory
Heuristic
ACL
语法
注释
mail Preference Option
Delivery-
Mechanism
Y
4
1
Integer
该邮箱接收邮件所使用的机制。该属性应设置为 0。
personal Title
Personal-
Title
N
3
2
String (Unicode)
称呼(先生、夫人等)
Assoc- NT-
Account
Assoc- NT-
Account
N
12
1
String (Octet)
与该邮箱相关的主 NT 帐户
street
Street-
Address
N
12
1
String (Unicode)
实际街道地址
generation Qualifier
Generation-
Qualifier
N
13
1
String (Unicode)
代限制符,例如老、小、第四代等
house Identifier
House- Identifier
N
13
1
String (Unicode)
位于某个地点的建筑物
Company
Company
N
18
1
String( Unicode)
邮箱所有人所在的公司
department
Department
N
18
1
String(Unicode)
该收件人所在的部门。
givenName
Given-Name
N
18
1
String (Unicode)
指定邮箱所有人的名
international ISDNNumber
International ISDN Number
N
18
1
String (Numeric)
与该邮箱相关的 ISDN 号码
manager
Manager
N
18
1
Object (DS-DN)
该收件人的‘管理员’。
physical Delivery OfficeName
Office
N
18
1
String (Unicode)
例如 1/1061
sn
Last Name
N
18
1
String (Unicode)
指定邮箱所有人的姓
st
State Or Province Name
N
18
1
String (Unicode)
用户所在的州或省
teletex Terminal Identifier
Teletex Terminal-
Identifier
N
18
1
String (Octet)
title
Title
N
18
1
String (Unicode)
邮箱所有人的职务
X121-
Address
N
18
1
String (Numeric)
x121 地址
Telephone-
Office2
N
18
2
String (Unicode)
邮箱所有人的办公室电话号码 (2)
co
Text- Country
N
18
2
String (Unicode)
用户所在的国家/地区
facsimile Telephone Number
Telephone-
Fax
N
18
2
String (Unicode)
邮箱所有人的传真号码
homephone
Home phone number
N
18
2
String (Unicode)
邮箱所有人的家庭电话号码
initials
Initials
N
18
2
String (Unicode)
用户名称的缩写
l
City
N
18
2
String (Unicode)
用户所在的位置/城市
mobile
Mobile number
N
18
2
String (Unicode)
邮箱所有人的移动电话号码
pager
Pager number
N
18
2
String (Unicode)
邮箱所有人的呼机号码
postal Address
Address
N
18
2
String (Unicode)
邮箱所有人的街道地址
postal Code
Postal code
N
18
2
String (Unicode)
邮政编码
secretary
Assistant
N
18
2
String (Unicode)
邮箱助理显示名称
telephone Number
Phone number
N
18
2
String (Unicode)
邮箱所有人的办公室电话号码 (1)
telex Number
Telex Number
N
18
2
String(Octet)
employee Number
Employee Number
N
21
1
String (Unicode)
职员编号
employee Type
Employee Type
N
21
1
String (Unicode)
职员类型
homeFax
Telephone Home- Fax
N
21
2
String (Unicode)
家庭传真号码
home Postal Address
Address Home
N
21
2
String (Unicode)
家庭住址
personal Mobile
Telephone Personal-
Mobile
N
21
2
String (Unicode) 手机号码
personal Pager
Telephone Personal Pager
N
21
2
String (Unicode)
呼机号码
Custom-Recipient(自定义收件人) Custom-Recipient 对象类通过 LDAP 显现为 custom-recipient 对象类。该对象类包含上述 organizationalPerson 对象类中除 mailPreferenceOption 之外的所有属性。Custom-Recipient 对象类还包含一个额外的、带有下列特性的强制属性: LDAP 名称
Exchange 名称
Mandatory
Heuristic
ACL
语法
注释
Target Address
E-Mail Address
Y
18
1
String (Unicode)
收件人的实际地址(该地址的格式为 : ,如 SMTP :jsmith@org. com
Distribution-List Distribution-List 对象类通过 LDAP 显现为 groupOfNames 对象类。其属性为: LDAP 名称
Exchange 名称
Mandatory
Heuristic
ACL
语法
注释
Company
Company
FALSE
18
1
String (Unicode)
主要用于 AB 视图分组
department
Department
FALSE
18
1
String (Unicode)
主要用于 AB 视图分组
physical Delivery Office Name
office
FALSE
18
1
String (Unicode)
主要用于 AB 视图分组
st
State-Or-
Province-
Name
FALSE
18
1
String (Unicode)
主要用于 AB 视图分组
title
Title
FALSE
18
1
String (Unicode)
主要用于 AB 视图分组
co
Text-Country
FALSE
18
2
String (Unicode)
主要用于 AB 视图分组
l
City
FALSE
18
2
String (Unicode)
主要用于 AB 视图分组
Hide-DL-
Membership
Hide- DL-
Membership
FALSE
20
1
Boolean
指出成员资格是否应对客户隐藏(默认值为 FALSE)。
owner
Owner
FALSE
20
1
Object(DS-DN)
拥有该通讯组的邮箱 DN。
member
Members
FALSE
20
2
Object(OR-Name)
通讯组成员的 DN 列表
通过 ADSI 检索增量更改 在某些应用程序(如目录同步服务)中,从 Exchange 目录获得增量更改是非常重要的。通过查找 Exchange 目录上每个对象的下列操作属性,就可实现这一目的。 USN-Changed:每次更改对象时,Exchange 目录将该整数加 1(删除与对该对象的任何其它更改一样对待);USN-Created:该整数表明在 Exchange 目录中创建此对象的时间。When-Changed:更改对象的 UTC 时间;When-Created:创建对象的 UTC 时间 通过查询 USN-Changed/Created 或 When-Changed/Created,应用程序可获得自上次轮询更改以来,在 Exchange 目录中所做的更改。 任何已验证的用户均可使用这些属性。 通过 ADSI 检索已删除的对象 检索已删除对象的功能与从 Exchange 目录检索增量更改一样重要。使用明文验证,并将“,cn=admin”附加到用户 DN 的后面(如 dc=domain,cn=jsmith,cn=admin),即可实现该操作。 将“,cn=admin”加到用户 DN 中,并对 Exchange Directory 验证客户时,就能查询称为“is-deleted”的操作属性。该属性是布尔型属性,它表明该对象是否已被删除。已删除对象被称为“逻辑删除”。逻辑删除保存的时间由 Microsoft Exchange Admin 程序中 DS Site Configuration 属性页上“Tombstone lifetime”参数给出。默认情况下,“Tombstone lifetime”设置为 30 天。如果应用程序从 Exchange Directory 获得删除的内容,则确保其在“Tombstone lifetime”期限内运行。 ADSI 示例 本节包含几个 ADSI 示例,它们给出了对 Exchange 目录的验证,查找使用 ADO 的对象,并处理使用 ADSI 的对象。 通讯组管理器 下面的代码将创建一个通讯组,并将 ADO 查询所找到的用户加入到通讯组中: 显式选项 Dim strDisplayName
' DL's Display name
Dim strAliasName
' DL's Alias name
Dim strDirectoryName
' DL's Directory name
Dim strUserName
' User's logon name and domain
Dim strPassword
' User's domain password
Dim strServer
' Exchange server name
Dim strOrganization
' Exchange Organization
Dim strSite
' Exchange SiteDim str
RecipientsPath
' ADsPath to the Recipients Container
Dim strMSPrivMDBPath
' ADsPath to the MS Private MDB
Dim objRecipients
' Recipients Container object
Dim objMSPrivMDB
' MS Private MDB object
Dim objNewDL
' new distribution list object
Dim strMail
' mail address of the MS Private MDB object
Dim intPos
' numeric position of the '@' in an SMTP address
Dim strSMTPExt
' SMTP domain type (ie. com, org, etc...)
Dim strSMTPAddr
' new DL's SMTP address
Dim aOtherMailbox(1)
' other addresses created (ie. MSMail, CCMail)
Dim strx400Addr
' new DL's X400 address
Dim objMyIADs
' ADSI object
' used by the PutEx method to set a muti-valued property
Const ADS_PROPERTY_UPDATE = 2
strDisplayName = "BellevueDL"
strAliasName = "BellevueDL"
strDirectoryName = "BellevueDL"
strUserName = "dc=redmond, cn=v-sparke"
strPassword = "password"
strServer = "sparker1"
strOrganization = "16"
strSite = "3081"
Set objMyIADs = GetObject("LDAP:")
下列代码确定了域地址的扩展名,方法是查找 Microsoft Private MDB 对象的“mail”属性: strMSPrivMDBPath = "LDAP://" + strServer + "/cn=Microsoft Private MDB,cn=" + strServer + ",cn=Servers ,cn=Configuration,ou=" + strSite + ",o=" + strOrganization
此应用程序使用‘OpenDSObject’方法访问目录对象。用户的登录域、名称和密码以参数的形式传递。值为 0 表示 ADSI LDAP 提供程序将进行简单的绑定: Set objMSPrivMDB = objMyIADs.OpenDSObject(strMSPrivMDBPath, strUserName, strPassword, 0)
objMSPrivMDB.GetInfo
strMail = objMSPrivMDB.Get("mail")
intPos = InStr(strMail, "@")
strSMTPExt = Mid(strMail, intPos, Len(strMail))
下列代码生成 SMTP、MSMAIL、CCMAIL 和 X400 地址。‘US’被硬编码到 X400 地址中。可以解析 MS Private MDB 对象的‘textEncodedORaddress’属性,以确定正确的 X400‘寻址’方案: strSMTPAddr = replace(strAliasName, " ", "") + strSMTPExt
aOtherMailbox(0) = CStr("MS$" + strOrganization + "/" + strSite + "/" + strAliasName)
aOtherMailbox(1) = CStr("CCMAIL$" + strAliasName + " at " + strSite)
strx400Addr = "c=US;a= ;p=" + strOrganization + ";o=" + strSite + ";s=" + strAliasName + ";"
strRecipientsPath = "LDAP://" + strServer + "/cn=Recipients,ou=" + strSite + ",o=" + strOrganization
Set objRecipients = objMyIADs.OpenDSObject(strRecipientsPath, strUserName, strPassword, 0)
本代码创建通讯组: Set objNewDL = objRecipients.Create("groupOfNames", "cn=" + strDirectoryName)
注意,在 VBScript 中,必须使用 CStr() 字符串值正确地设置 ADSI 数据的格式: objNewDL.Put "cn", CStr(strDisplayName)
objNewDL.Put "uid", CStr(strAliasName)
objNewDL.Put "distinguishedName", CStr("cn=" + strAliasName + ",cn=Recipients,ou=" + strSite + ",o=" + strOrganization)
objNewDL.Put "mail", CStr(strSMTPAddr)
本代码创建多值属性。在 VBScript 中,必须使用括号取消对数组的引用: objNewDL.PutEx ADS_PROPERTY_UPDATE, "otherMailbox", (aOtherMailbox)
objNewDL.Put "Report-To-Originator", True
objNewDL.Put "Report-to-Owner", False
objNewDL.Put "Replication-Sensitivity", CInt(20)
objNewDL.Put "rfc822Mailbox", CStr(strSMTPAddr)
objNewDL.Put "textEncodedORaddress", CStr(strx400Addr)
objNewDL.SetInfo
Response.Write "DL Created Successfully!
"
下列代码将在 Exchange 目录服务中查找其‘City’属性与搜索条件匹配的邮箱。‘City’属性的 ADSI LDAP 名称是‘l’。 Dim objADOconn' ADO connection objectDim strADOQueryString' ADO query stringDim objRS ' recordset objectDim strCriteria ' value used to search the directory treestrCriteria = "Bellevue"
Set objADOconn = CreateObject("ADODB.Connection")
objADOconn.Provider = "ADSDSOObject"
objADOconn.Open "ADs Provider"
strADOQueryString = ";(%26amp;(objectClass=organizationalPerson)(l=" + strCriteria + "));cn,adspath;subtree"
Set objRS = objADOconn.Execute(strADOQueryString)
If Not objRS.EOF Then
While Not objRS.EOF
objNewDL.Add objRS.Fields(1).Value
Response.Write objRS.Fields(0) + " added :)
"
objRS.MoveNext
Wend
Else
Response.Write "No mailboxes were added to the DL :(
"
End If
objRS.Close
Phone List
本代码将更改邮箱的电话号码属性。默认情况下,所有用户都有更改其邮箱上该属性的权限。 下列代码将使浏览器弹出用户标识对话框。IIS 服务器的密码验证只能设置为‘Allow Anonymous’和‘Basic (Clear Text)’。这样,浏览器在使用‘GetObject’方法时,就能使用正确的安全上下文。 Dim strAT ' Authorization Type information
strAT = Request.ServerVariables("AUTH_TYPE")
If InStr(1, "_BasicNTLM", strAT, 1)
Response.Buffer = True
Response.Status = ("401 Unauthorized")
Response.End
End If
Dim strMailboxPath' ADsPath to the user's mailboxDim strServer' name of the Exchange 5.5 serverDim intPosPrefix' numeric index used used to build ADsPath to schema objectDim intPosSuffix' numeric index used used to build ADsPath to schema objectDim strPrefix' prefix string used to build ADsPath to schema objectDim strSuffix' suffix string used to build ADsPath to schema objectDim strPathToSchemaObject' ADsPath to the schema objectDim objMailbox' mailbox objectDim strNewPoneNumber' value of the new phone number
Function isUserEditable(strSchemaObjectPath)
Dim objSchemaObject' schema objectDim intValue' value of the 'Access-Category' propertySet objSchemaObject = GetObject(strSchemaObjectPath)intValue = objSchemaObject.Get("Access-Category")If intValue = 2 Then' user may modify the mailbox propertyisUserEditable = TrueElse' the value was 0, 1, or 3 isUserEditable = False
End If
End Function
本过程将更改包含字符串数值的对象属性。要将属性设置为空字符串,必须将其从对象中删除: Sub ModifyProperty(strNewValue, strADsProperty)
On Error Resume Next
If Len(strNewValue) 0 Then
objMailbox.Put strADsProperty, CStr(strNewValue)
Else ' The new value is empty
objIADs.Get (strADsProperty)
'If the property doesn't exist on the object, an error will be generated using the Get method:
If Err.Number = 0 Then' the property exists on the object and must be removed objMailbox.PutEx ADS_PROPERTY_CLEAR, strADsProperty, CStr(" ")
End If
Err.Clear
End If
End Sub
Const ADS_PROPERTY_CLEAR = 1' used by the PutEx method to clear a property from an objectstrMailboxPath = "LDAP://SPARKER1/cn=SParker,cn=Recipients,ou=3081,o=16"
strServer = "sparker1"
strNewPoneNumber = "(425) 882-8080 x 13882"
intPosPrefix = InStr(strMailboxPath, "/cn")
intPosSuffix = InStr(strMailboxPath, "ou")
strPrefix = Mid(strMailboxPath, 1, intPosPrefix - 1) + "/cn="
strSuffix = ",cn=Microsoft DMD," + Mid(strMailboxPath, intPosSuffix, Len(strMailboxPath))
strPathToSchemaObject = strPrefix + "Telephone-Office1" + strSuffix
If isUserEditable(strPathToSchemaObject) Then
Set objMailbox = GetObject(strMailboxPath)
ModifyProperty strNewPoneNumber, "telephoneNumber"
objMailbox.SetInfo ' save the object information
Response.Write "Phone number modified successfully :)
"
Else
Response.Write "You don't have permissions to modify your phone number :(
"
End If
%
ADSI 的局限 ADSI 尚不能处理访问控制列表 (ACL),后者包含有关哪个用户有某个对象权限的安全信息。它不能获取 Windows NT 安全标识符 (SID),SID 是用户帐户名的二进制表示,因而无法设置创建用户权限所需的位。开发人员无法只通过 ADSI 创建实用的邮箱对象,这是因为邮箱对象要求在 Assoc-NT-Account 属性中设置 NT 帐户 SID,以及在 NT-Security-Descriptor 属性中设置邮箱对象的正确安全权限。预计在以后的版本中会提供处理 ACL 的功能。 使用 ADSI 增强 Exchange 有了 ADSI,开发人员无须再开发目录专用的 API,使管理功能更灵活、更方便。例如,目录专用的 API 可能要求管理员在 Active Server 页上键入安全密码和域,从而将其暴露在危险之中。与此相反,ADSI 对象强制 Web 浏览器提示管理员输入这些信息。 一旦开发人员学会了 ADSI 规则,则可以方便地编写 LDAP 路径名,并指定对象的类和属性。Exchange 5.5 将弹出一个 ADSI 页,允许开发人员在相应的 Exchange Server 中键入,将其从注册表中抽出,并添加到服务器字段中。使用 ADSI 对象,他们可以开发各种使用方便的应用程序。例如,开发人员可以编写 Web 服务器脚本,允许浏览器查找不同目录中用户的详细情况; 或者创建通讯组管理器,后者在不同目录中创建用户的通讯组。或者指定打印机队列的访问特权。正是由于 ADSI 灵活多变的特点,它可获得广泛的应用。 结论 ADSI 旨在为不同种类的目录服务提供一个一致的、开放的接口集,它为当今迅猛发展的企业网络和 Intranet 打下了非常重要的基础。另外,Exchange 管理员和开发人员还可使用它编写应用程序;将基于 Exchange 目录访问编程接口 (DAPI) 的应用程序移植到 ADSI。这些应用程序将在 Exchange 5.5 环境下运行;稍作更改甚至不经更改就可以在 NT 5 Active Directory 上运行。因此,Exchange 开发人员和管理员在有效地开发支持目录的应用程序的同时,可以更方便地与更改保持同步。 其它信息 有关详细信息,请访问下列 Web 站点: ftp://ds.internic.net/internet - 草案 - 包括 LDAPV3 协议的 Internet 草案 http://www.microsoft.com/ntserver - ADSI 和 NT 5 Active Directory http://www.microsoft.com/msdn - 用于开发人员的 Microsoft 技术大全 %26copy; 1998 Microsoft 和/或其提供商。版权所有。使用条款。