实现非 Exchange 邮件系统与 ActiveDirectory 之间的目录同步

 

上一次修改主题: 2006-08-23

本节解释如何在符合 LDAP 的目录与 Active Directory 之间手动执行目录同步。有关如何通过编程创建收件人对象的详细信息,请参阅了解 Exchange Server 2003 中的互操作性和迁移

若要在非 Exchange 邮件系统与 Exchange 2003 之间执行目录同步,必须完成下列步骤:

  1. 将源目录信息提取到迁移文件   通常可以通过多种方法从邮件系统获取目录信息。一种方法是使用随非 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

    此用户的注释。这是可选属性。

    note注意:
    Exchange 迁移向导忽略不存在的或拼错的目录属性。
  2. 格式化导出的目录信息以导入目录   使用正确配置的 mlmigad.ini 文件对 LDAP 目录运行 Exchange 迁移向导,可以创建包含所有导出的收件人信息的 directory.pri 迁移文件。图 1 显示 Internet 邮件系统中的 directory.pri 文件示例。
    71e967f3-3d8b-4eb6-b289-9d8068f514e8
    可以使用此文件中的信息将导入文件格式化为 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

    note注意:
    有关如何使用 Ldifde.exe 创建用户帐户以及如何使用 Microsoft Excel 宏将 .csv 文件转换为 LDIF 文件的详细信息,请参阅 了解 Exchange Server 2003 中的互操作性和迁移
  3. 将目录信息导入 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 收件人”组织单位中的联系人对象。
    1f563ed6-d588-4b09-b78f-6273c12a153b

  4. 保持 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 中已启用邮件的用户帐户,则甚至可能无法删除旧帐户。

    important重要提示:
    如果删除 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
    -

  5. 按相反方向执行目录同步   还必须使用与更新 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"

    note注意:
    有关如何导入 SMTP 收件人的目录信息的信息,请与非 Exchange 邮件系统的供应商联系。