对组执行权威性的恢复导致DC中的成员身份不一致(MSKB)

来源:互联网 发布:java前景 编辑:程序博客网 时间:2024/05/22 00:11
对组执行权威性的恢复可能导致域控制器中的成员身份信息不一致

症状
在对用户和组执行权威性恢复后,恢复的组中的成员身份在各个域控制器中可能不一致。

如果组在恢复的域控制器上为空,但在副本域控制器上却已被填充,则向该恢复的域控制器上的组中添加一个用户后,副本域控制器上的组中的用户将被删除。

ManagedBy 属性也可能出现该同一问题,因为在执行权威性恢复后该属性可能为空。

原因
发生此问题的原因是组成员身份是以 Member 属性的形式存储在组对象中的。在向组中添加安全主要成员(用户、组或计算机)时,一个反向链接将被添加到该主要成员对象的 MemberOf 属性中。在执行权威性恢复期间,如果组对象是在用户对象之前恢复的,则 Active Directory 将从组中的 Member 属性中删除该值,因为不存在具有匹配的反向链接的用户。

在执行权威性恢复后,恢复的组的 Member 属性的版本信息在每个域控制器中都是一致的,即使该属性中的值不一致。每当修改组的成员身份时,版本号都将递增,并且该组的内容将被复制到所有域控制器中。如果在具有有效组成员身份的域控制器上修改组,则该组的所有内容都将被复制,并且数据不会丢失。不过,如果在恢复的域控制器上修改组,则只复制添加的用户,并且副本域控制器上的组中的用户将被删除。

注意:即使对用户执行了权威性恢复而未对组执行此恢复,也可能会发生此问题。如果系统状态恢复已完成并且只有用户被标记为权威,则在已执行恢复的域控制器上,这些用户的组成员身份将会恢复(因为在系统状态恢复过程中组对象中的正向链接应该已经恢复)。如果自系统状态备份完成后组的成员身份一直未更改,则恢复后将不对组进行复制。这将会导致各域控制器之间的组成员身份不一致。在一个域控制器上更改组的成员身份会将该域控制器上的该组的当前内容复制到其他域控制器中。

解决方案
警告:在执行本部分所描述的过程之前,请仔细阅读下面的信息。如果不完全按照该过程操作,用户和组信息可能会丢失并且无法恢复。请记住,在继续操作之前,应先在权威域控制器上创建一个 Active Directory 备份文件并对其加以验证。

要解决此问题,必须对所有安全主要成员对象(用户、组和计算机)进行权威性恢复并将其复制到所有域控制器中,然后再次对所有组对象进行权威性恢复并重新复制到所有域控制器中。在执行此过程时,第二次恢复之前的所有潜在的组成员(用户、组和计算机)都位于数据库中,并且反向链接将被保留。

在对用户帐户及其组成员身份进行权威性恢复时,请找到具有标记为权威所需的足够信息的域控制器,然后断开该域控制器与网络的连接。此服务器将成为权威域控制器。

要解决此问题,请执行以下操作:
1. 对计算机状态执行完整备份以备份该 Active Directory 的权威副本,以防该过程中发生错误。
2. 同时禁用站点内部和站点之间的拓扑生成。 有关如何禁用站点内部和站点之间的拓扑的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
242780 (http://support.microsoft.com/kb/242780/EN-US/) How to Disable the Knowledge Consistency Checker From Automatically Creating Replication Topology
3. 启动“Active Directory 站点和服务”管理单元,然后删除权威域控制器的“NTDS 设置”对象下的所有连接对象。

完成该步骤后,域控制器将无法复制在该过程中所做的任何更改。权威域控制器的复制伙伴仍具有指向该服务器的连接对象,这使它们能够从该服务器获得权威性数据。
4. 重新启动计算机,进入 Active Directory 恢复模式。
5. 分别对每个所需的帐户执行权威性恢复。例如,要恢复 NWTRADERS.MSFT 中“财务”组织单位中的 James Smith 用户帐户,请使用以下语法:
authoritative restore:restore subtree "cn=James Smith,ou=Accounting,dc=nwtraders,dc=msft"
注意:由于可以为 Ntdsutil 工具编写脚本,您可以生成要恢复的用户帐户列表,然后将该列表传递给您的脚本。本文的“更多信息”部分中介绍了一个示例脚本。

如果组织单位通常包含用户和组,此时您也可以恢复整个组织单位。
6. 以正常模式重新启动计算机。
7. 使已恢复的用户可以正常复制。

要强制复制伙伴从权威域控制器进行复制,请使用 ReplMon 工具,或者使用“Active Directory 站点和服务”管理单元。
8. 将用户复制到所有域控制器后,请重新启动计算机,进入 Active Directory 恢复模式。
9. 对包含以前恢复的对象的每个组帐户执行权威性恢复。例如,要恢复 NWTRADERS.MSFT 中 ITG 组织单位中的 Web 管理员组,请使用以下语法:
authoritative restore:restore subtree "cn=Web Administrator,ou=ITG,dc=nwtraders,dc=msft"
注意:由于可以为 Ntdsutil 工具编写脚本,您可以生成要恢复的用户帐户列表,然后将该列表传递给您的脚本。本文的“更多信息”部分中介绍了一个示例脚本。
10. 以正常模式重新启动计算机。
11. 使已恢复的组可以进行正常复制。

要强制复制伙伴从权威域控制器进行复制,请使用 ReplMon 工具,或者使用“Active Directory 站点和服务”管理单元。
12. 撤消在此过程的第二步中对站点对象所做的更改。

状态
Microsoft 已经确认这是 Microsoft Windows 2000 中的一个问题。

更多信息
在权威域控制器已断开网络连接后,可以在计算机启动到 Active Directory 恢复模式之前运行以下脚本以获取用户列表:
List.vbs
--------
Set strOU = GetObject("LDAP://localhost/ou=layer two,ou=layer one,ou=test,dc=i,dc=j,dc=com")
strOU.Filter = Array("user")

For Each Member in strOU
Wscript.Echo Chr(92) & Chr(34) & member.distinguishedname & Chr(92) & Chr(34)
Next

注意:请务必更改第一行中的组织单位路径以指向包含要恢复的用户和组的路径。另外,可以使用该同一脚本创建用户或组列表。

要列出组,请将第二行中的筛选器更改为:
oU.Filter=Array("group")

要运行该脚本并将结果输出到文本文件中,请在命令提示符处键入以下命令(在脚本所在的同一文件夹中运行该命令):
cscript //nologo list.vbs > users.txt
创建完用户列表和组列表后,可以使用 Ntdsutil 权威性地恢复每一项:
Authrest.cmd
------------
@echo off
ntdsutil "popups off" "authoritative restore" "restore subtree %1" quit quit

要对用户或组列表中的每一项都运行此脚本,请使用 for 命令读取列表中的项,然后将该项传递给前面描述的匹处理文件。在命令行中键入以下命令(在先前创建的两个文本文件所在的同一文件夹中创建这些文件):
for /f "tokens=*" %i in (users.txt) do authrest %i
该命令将循环通过文本文件的每一行并对用户执行权威性恢复。

这篇文章中的信息适用于:
• Microsoft Windows Server 2003 Datacenter Edition
• Microsoft Windows Server 2003, Enterprise Edition
• Microsoft Windows Server 2003 Standard Edition
• Microsoft Windows 2000 Advanced Server
• Microsoft Windows 2000 Server

关键字: kbprb KB280079
原创粉丝点击