实现非 Exchange 邮件系统与 ActiveDirectory 之间的目录同步
上一次修改主题: 2006-08-23
本节解释如何在符合 LDAP 的目录与 Active Directory 之间手动执行目录同步。有关如何通过编程创建收件人对象的详细信息,请参阅了解 Exchange Server 2003 中的互操作性和迁移。
若要在非 Exchange 邮件系统与 Exchange 2003 之间执行目录同步,必须完成下列步骤:
将源目录信息提取到迁移文件 通常可以通过多种方法从邮件系统获取目录信息。一种方法是使用随非 Exchange 邮件系统附带的管理工具中的目录导出功能。从邮件系统获取目录信息的另一种办法是使用 Exchange 迁移向导,如本主题前面所述。例如,可以使用 Exchange 迁移向导从符合 LDAP 的目录提取目录信息。有关如何使用 Exchange 迁移向导提取 LDAP 目录信息的详细说明,请参阅如何执行半自动目录同步。
如果运行 Exchange 迁移向导的 LDAP 目录不是 Netscape Directory Server,则可能会注意到,迁移向导无法正确地标识用户对象,因此无法执行提取。表明存在此问题的一些线索包括:用户在“容器”向导页上作为 Internet 容器列出,以及“帐户迁移”向导页上的帐户列表为空。
默认情况下,Exchange 迁移向导期望用户帐户的对象类为 inetOrgPerson。如果您的目录使用其他对象类,除非编辑名为 mlmigad.ini 的 .ini 文件(位于 \Program Files\Exchsrvr\Bin 目录)并在 ADSI_ObjectClass 行中指定用户帐户的对象类,否则,迁移向导将无法标识并迁移用户帐户。例如,Active Directory 对用户帐户使用对象类 organizationalPerson。表 1 列出可以在 mlmigad.ini 中指定的所有设置。表 1 LDAP 目录导出的 Mlmigad.ini 配置参数
参数 默认值(对应于 Netscape Directory Server) Active Directory 对应值 说明 ADSI_ObjectClass
inetOrgPerson
organizationalPerson
用于确定哪些对象是邮件用户。
ADSI_UserID
uid
cn 或 sAMAccountName
为 IMAP4 邮箱的后续迁移提取 LDAP 信息时,IMAP 提取程序使用此参数来登录 IMAP 邮箱。这是必需属性。
ADSI_MailServer
mailhost
Mailhost
为 IMAP4 邮箱的后续迁移提取 LDAP 信息时,IMAP 提取程序使用此参数来登录 IMAP 邮箱。这是必需属性。
ADSI_EmailAddress
mail
Mail
为 IMAP4 邮箱的后续迁移提取 LDAP 信息时,使用此参数作为 Exchange 中的辅代理地址。
发送到此地址的邮件将路由到 Exchange 邮箱。这是必需属性。
ADSI_FullName
未指定
displayName
用于在 Exchange 中创建显示名。如果此值为空,则通过其他属性(例如电子邮件地址)创建显示名。这是可选属性。
ADSI_FirstName
givenname
givenName
用户的名。这是可选属性。
ADSI_LastName
sn
Sn
用户的姓。这是可选属性。
ADSI_Initials
initials
缩写
用户的中间名首字母。这是可选属性。
ADSI_NickName
uid
mailNickname
用户的简短名称,还用于 Exchange 别名。这是可选属性。
ADSI_Title
title
Title
用户的头衔。这是可选属性。
ADSI_Company
未指定
company
用户的公司名。这是可选属性。
ADSI_Department
ou
department
用户的部门名。这是可选属性。
ADSI_Office
roomnumber
physicalDeliveryOfficeName
此用户的办公室位置。这是可选属性。
ADSI_PostalAddress
postaladdress
streetAddress
用户的通信地址。这是可选属性。
ADSI_City
l
L
用户所在的城市。这是可选属性。
ADSI_StateOrProvince
st
St
用户所在的州/省。这是可选属性。
ADSI_PostalCode
postalcode
postalCode
用户的邮政编码。这是可选属性。
ADSI_Country
未指定
Co
用户所在的国家/地区。这是可选属性。
ADSI_TelephoneNumber
telephonenumber
telephoneNumber
用户的办公电话号码。这是可选属性。
ADSI_TelephoneNumber2
未指定
otherTelephone
用户的第二个办公电话号码。这是可选属性。
ADSI_TelephoneHome
homephone
homePhone
用户的住宅电话号码。这是可选属性。
ADSI_TelephoneHome2
未指定
otherHomePhone
用户的第二个住宅电话号码。这是可选属性。
ADSI_TelephoneMobile
mobile
mobile
用户的移动电话号码。这是可选属性。
ADSI_TelephonePager
pager
Pager
用户的寻呼机号码。这是可选属性。
ADSI_TelephoneFax
facsimiletelephonenumber
facsimileTelephoneNumber
用户的传真机号码。这是可选属性。
ADSI_AssistantName
secretary
assistant
用户助理的姓名。这是可选属性。
ADSI_AssistantPhone
未指定
telephoneAssistant
用户助理的电话号码。这是可选属性。
ADSI_AlternateAddress
mailalternateaddress
proxyAddresses
用作用户在 Exchange 中的附加 SMTP 地址。这是可选属性。
ADSI_Comment
description
Info
此用户的注释。这是可选属性。
注意: Exchange 迁移向导忽略不存在的或拼错的目录属性。 格式化导出的目录信息以导入目录 使用正确配置的 mlmigad.ini 文件对 LDAP 目录运行 Exchange 迁移向导,可以创建包含所有导出的收件人信息的 directory.pri 迁移文件。图 1 显示 Internet 邮件系统中的 directory.pri 文件示例。
可以使用此文件中的信息将导入文件格式化为 LDAP 数据交换格式 (LDIF),以便使用 Ldifde.exe 创建或更新 Active Directory 中的收件人信息。下表显示用于将三个帐户导入 Active Directory 的 LDIF 文件。导入此 LDIF 文件将在名为“远程 SMTP 收件人”的专用组织单位中创建启用邮件的联系人。必须在导入帐户之前创建组织单位。
dn: CN=Ted Bremer,OU=Remote SMTP Recipients,DC=fabrikam,DC=com
changetype: add
objectClass: contact
cn: Ted Bremer
sn: Bremer
givenName: Ted
displayName: Ted Bremer
mailNickname: Ted
targetAddress: SMTP: Ted@legacy.fabrikam.com
mail: Ted@legacy.fabrikam.com
extensionAttribute1: Manual DirSync Process
dn: CN=Birgit Seidl,OU=Remote SMTP Recipients,DC=fabrikam,DC=com
changetype: add
objectClass: contact
cn: Birgit Seidl
sn: Seidl
givenName: Birgit
displayName: Birgit Seidl
mailNickname: Birgit
targetAddress: SMTP: Birgit@legacy.fabrikam.com
mail: Birgit@legacy.fabrikam.com
extensionAttribute1: Manual DirSync Process
dn: CN=Kim Akers,OU=Remote SMTP Recipients,DC=fabrikam,DC=com
changetype: add
objectClass: contact
cn: Kim Akers
sn: Akers
givenName: Kim
displayName: Kim Akers
mailNickname: Kim
targetAddress: SMTP: Kim@legacy.fabrikam.com
mail: Kim@legacy.fabrikam.com
extensionAttribute1: Manual DirSync Process
注意: 有关如何使用 Ldifde.exe 创建用户帐户以及如何使用 Microsoft Excel 宏将 .csv 文件转换为 LDIF 文件的详细信息,请参阅 了解 Exchange Server 2003 中的互操作性和迁移。 将目录信息导入 Active Directory 使用 Ldifde.exe 导入正确格式化的 LDIF 文件是一个非常简单的过程。在命令提示符下使用下列命令:
ldifde -i -f <import file> -s <Server>,
,例如ldifde -i -f c:\importfile.ldf -s Server01
。
如果尝试为 Active Directory 中已存在的用户创建新帐户,Ldifde.exe 将报告错误并停止导入过程。可能需要在 Active Directory 中搜索与非 Exchange 邮件系统中的收件人对应的现有用户帐户,并通过修改导入文件来更改这些帐户的属性,而不是添加新帐户。下面解释了如何搜索和更新 Active Directory 对象。
下列响应表明帐户已存在:
Importing directory from file "c:\importfile.ldf"
Loading entries.
Add error on line 1: Already Exists
The server side error is "An attempt was made to add an object to the directory
with a name that is already in use."
0 entries modified successfully.
相反,肯定响应包含以下信息:
Logging in as current user using SSPI
Importing directory from file "c:\importfile.ldf"
Loading entries....
3 entries modified successfully.
已启用邮件的联系人在 Active Directory 中已存在,Exchange 用户可以从全局地址列表选择这些联系人,以向其发送邮件。图 2 显示“远程 SMTP 收件人”组织单位中的联系人对象。
保持 Active Directory 中的目录信息为最新 可能需要在源目录系统中的地址列表发生更改时立即执行收件人信息的更新,以便所有目录包含的信息一致。为此,做最简单的方法是将所有以前导入的收件人对象从 Active Directory 中删除,然后使用从源目录提取的新信息执行新导入。只需要找到以前导入的对象。在分析上面所示的 LDIF 导入列表时,将在每个帐户部分发现以下行:
extensionAttribute1: Manual DirSync Process
。此信息用于将用户帐户与手动目录同步过程关联。可以基于此信息创建筛选器,以检索以前从 Active Directory 创建的所有对象。例如,可以在命令提示符下使用以下命令,在全局编录服务器的整个域中搜索 extensionAttribute1 值为 Manual DirSync Process 的所有收件人对象:
ldifde -f c:\Exportuser.ldf -s Server01 -t 3268 -d "dc=fabrikam,dc=com" -p subtree -r "(extensionAttribute1=Manual DirSync Process)" -l "targetAddress"
Ldifde.exe 将下列结果写入导出文件:
dn: CN=Ted Bremer,OU=Remote SMTP Recipients,DC=fabrikam,DC=com
changetype: add
targetAddress: SMTP: Ted@legacy.fabrikam.com
dn: CN=Birgit Seidl,OU=Remote SMTP Recipients,DC=fabrikam,DC=com
changetype: add
targetAddress: SMTP: Birgit@legacy.fabrikam.com
dn: CN=Kim Akers,OU=Remote SMTP Recipients,DC=fabrikam,DC=com
changetype: add
targetAddress: SMTP: Kim@legacy.fabrikam.com
若要删除这些帐户,必须使用以下 LDIF 内容将导出的文件更改为导入文件,并使用 LDIFDE 导入命令(例如ldifde -i -f c:\importfile.ldf -s Server01
)导入文件:
dn: CN=Ted Bremer,OU=Remote SMTP Recipients,DC=fabrikam,DC=com
changetype: delete
dn: CN=Birgit Seidl,OU=Remote SMTP Recipients,DC=fabrikam,DC=com
changetype: delete
dn: CN=Kim Akers,OU=Remote SMTP Recipients,DC=fabrikam,DC=com
changetype: delete
删除已过期的帐户信息之后,可以重新导入新的地址列表,以便使用新的目录信息重新创建所有联系人。但是,在每次发生更改时都删除并重新创建整个地址列表可能并不是个好方法。收件人更新服务必须为所有对象分配新的电子邮件地址,必须将所有对象重新复制到全局编录,如果 Internet 邮件用户使用 Active Directory 中已启用邮件的用户帐户,则甚至可能无法删除旧帐户。重要提示: 如果删除 Windows 用户帐户,然后又重新创建该帐户,则会创建一个具有不同安全标识符的全新对象。换句话说,用户将失去对单独为其旧用户帐户分配的文件共享和其他资源所拥有的特殊权限。因此,如果用户使用已启用邮件的用户帐户,请不要使用删除并重新创建 Active Directory 中的收件人对象的方法来同步目录信息。 执行目录更新的最佳做法是将源目录中的地址信息与 Active Directory 中的目录信息进行比较。可以使用公用名、电子邮件地址或任何其他支持目录对象可靠关联的用户属性来访问 Active Directory 中的现有信息。例如,对于电子邮件地址中的 SMTP 域为 legacy.fabrikam.com 的所有收件人对象,以下 LDIFDE 命令可从全局编录服务器检索它们的显示名和电话号码。
ldifde -f c:\Exportuser.ldf -s Server01 -t 3268 -d "dc=fabrikam,dc=com"
-p subtree -r "(mail=*@legacy.fabrikam.com)" -l "displayName,telephoneNumber"
可以检查生成的导出文件,以确定更改了显示名或电话号码的所有收件人,使用更新的值创建新的 LDIF 文件,并将此文件导入 Active Directory 以更新现有帐户的值。以下 LDIF 文件说明如何修改两个收件人的显示名。为了演示如何修改帐户的两个属性,第一个对象的电话号码也会被更改:
dn: CN=Ted Bremer,OU=Remote SMTP Recipients,DC=fabrikam,DC=com
changetype: modify
replace: displayName
displayName: Ted
-
replace: telephoneNumber
telephoneNumber: 425 5550150
-
dn: CN=Birgit Seidl,OU=Remote SMTP Recipients,DC=fabrikam,DC=com
changetype: modify
replace: displayName
displayName: Birgit
-
按相反方向执行目录同步 还必须使用与更新 Active Directory 相同的原则更新非 Exchange 目录,以实现从 Active Directory 到旧目录的目录同步。如前面所述,Exchange 迁移向导可以将目录信息从 Active Directory 提取到 directory.pri 文件。请确保在 mlmigad.ini 文件中为 ADSI_ObjectClass 指定 organizationalPerson。否则,Exchange 迁移向导将无法识别用户帐户。也可以使用 Ldifde.exe 导出在 Exchange Server 2003 中有邮箱的所有用户,这样可以只导出选定的已启用邮箱的用户帐户。如果已启用邮件的收件人对象引用了在旧邮件系统中有邮箱的用户,则必须将该收件人对象排除。以下命令可从全局编录服务器检索所有已启用邮箱的用户帐户:
ldifde -f Exportuser.ldf -s Server01 -t 3268 -d "dc=fabrikam,dc=com" -p subtree -r "(&(objectClass=User)(homeMDB=*))" -l "cn,mail,samAccountName"
注意: 有关如何导入 SMTP 收件人的目录信息的信息,请与非 Exchange 邮件系统的供应商联系。