域内所有的域控制器都有一个内容相同的Active Directory,而且 Active Directory 的内容是动态平衡的,也就是说任何一个域控制器修改了 Active Directory,其他的域控制器都会把这个 Active Directory 的变化复制过去。
今天我们要考虑这么一个问题,如果域中有多个域控制器,但他们所拥有的 Active Directory 内容不一致,那么应该以哪个域控制器的 Active Directory 内容为准?可能我们会疑惑,怎么会出现这种情况呢?其实假如有个域控制器由于更换硬件导致有几天时间没有在线,而其他的域控制器在这段时间对 Active Directory 进行了修改,那么当这个域控制器重新上线时就会出现我们所提到的这种情形。
当域控制器们发现彼此的 Active Directory 的内容不一致,他们就需要分析一下 Active Directory 的优先级,从而决定以哪个域控制器的 Active Directory 内容为准。Active Directory 的优先级比较主要考虑三方面因素,分别是:
1、版本号:版本号指的是 Active Directory 对象的修改次数,版本号高者优先。例如域中有两个域控制器 A 和 B,A 域控制器上的用户 administrator 口令被修改了 4 次,最后被改为 12345;B 域控制器上的用户 administrator 口令被修改了 5次,最后被改为 123456。那么 A 和 B 发现他们的 Active Directory 中 administrator 口令不一致,这时 A 和 B 会分析版本号,发现版本号分别是 4 和 5,这时 A就会把 B 的 Active Directory内容复制到本机的 Active Direcotry中。 经过这么一轮复制后,A 和 B 的 Active Directory 内容就达到了新的平衡,他 们 Active Directory 中所有对象的版本号也都完全一致了。
2、时间:如果 A 和 B 两个域控制器都是对 administrator 口令修改了 4 次,那么版本号 就是相同的。这种情况下两个域控制器就要比较时间因素,看哪个域控制器完成修改的时间靠后,时间靠后者优先。这里我们顺便提及一下,Active Directory 中时间是个非常重要的因素,域内计算机的时间误差不能超过 5 分钟,而且 Active Directory 还有一个墓碑时间的限制,这些我们以后再详细加以说明。
3、GUID:如果 A 和 B 两个域控制器的版本号和时间都完全一致,这时就要比较两个域控制器的 GUID 了,显然这完全是个随机的结果。一般情况下时间完全相同的非常罕见,因此 GUID 这个因素只是一个备选方案。
下面我们引入一个具体的例子让大家加深理解。
1、域中有两个域控制器 Florence 和 Firenze。
2、域中有一个用户张建国,我们在 Firenze 上对 Active Directory 已经进行了备份。
3、我们在 Florence 上不小心把张建国误删除了,显然 Firenze 会很快把 Active Directory 中的张建国也删除,以便和 Florence 的 Active Directory 保持一致。
那么我们应该怎么做才能把张建国给恢复回来呢?
可能我们会想到利用 Firenze 上的 Active Directory 备份来解决这个问题,既然备份中有张建国,那么把备份还原回来不就 OK 了吗?这个问题没这么简单,如果域中只有一个域控制器,那么用备份还原是成立的。但现在域中有两个域控制器,我们就要好好考虑一下了。
发现问题:Firenze 从备份还原后,Active Directory 中已经拥有了张建国的用户账号,但 Firenze 会和 Florence 比较 Active Directory 内容,并且Florence的版本号要高,所以Firenze 认为 Florence 的 Active Directory 比自己的优先级高,因此 Firenze 会把 Florence 的 Active Directory 复制过来, 这样一来,刚被还原的张建国肯定会被重新删除掉!
解决思路:在 Firenze 从备份还原 Active Directory 之后,我们可以利用一个工具NTDSUTIL.EXE来修改Active Directory对象的版本号,让Firenze的版本号大于Florence的版本号,这样我们就可以利用达到目的了。这种还原方式我们称为授权还原,下面我们通过一个实例为大家演示一下具体过程。
现在的场景是 Firenze 已经对 Active Directory 进行了备份,备份中包含了域用户张建国。在备份之后我们误删除了张建国,现在我们在 Firenze 上开始利用备份进行主要还原。首先在 Firenze 上重启计算机,BIOS 自检后按下 F8, 如下图所示,选择进入目录服务还原模式。目录服务还原模式可以把 Active Directory 挂起,适合我们从备份还原 Active Directory。
在以下界面中,勾选“授权还原”,
点击“恢复”,过程需要10-20分钟,请稍等...
如下图所示,还原结束后,千万别选择重启计算机,我们还没有修改Active Directory的版本号呢,保持以下界面,打开命令提示符窗口。
在命令提示符中,运行了 NTDSUTIL,再运行 Authoritative restore 来修改 AD 对象的版本号。
我们可以简单地运行 restore database,这样整个 AD 内所有对
象的版本号都将加到最大,版本号加到最大是什么含义呢?微软规定,AD 对象
的版本号每天最多可以增加10万。在本例中我们不需要把AD中所有对象的版本号都增加到最大,只要修改张建国的版本号就可以了。因此我们可以使用
Restore Object 命令只针对张建国的版本号进行修改,那如何在AD中表示张建国呢?按照目录对象的命名规范,张建国隶属于
ADTEST.COM
域中的人事部组织单位,那我们描述张建国就应该使用“cn=张建国,ou=人事部,dc=adtest,dc=com”。如下图所示,我们输入修改指令后观察一下运行的效果。
运行完命令后,系统询问是否执行授权还原,我们选择“是”。
如下图所示,授权还原成功完成,用 quit 命令退出 NTDSUTIL。
重启计算机,正常启动,以域管理员登录,提示如下,
打开Active Directory用户和计算机,如下图所示,Firenze的 AD 中已经重新拥有了用户张建国,修改版本号成功了。
很多朋友会很自然地想到利用
Firenze 上的 Active Directory 备份来解决这个 问题,既然备份中有张建国,那么把备份还原回来不就 OK
了吗?这个问题没这 么简单,如果域中只有一个域控制器,那么用备份还原是成立的。但现在域中有 两个域控制器,我们就要好好考虑一下了。Firenze
从备份还原后,Florence
和 Firenze 的 Active
Directory 内容就不一样了,那么 Florence 和 Firenze 的 Active Directory
哪个优先级更高呢?哦,不对,似乎是 Florence 的版本 号更高一些!那我们就可以从理论上得出结论,Firenze 从备份还原之后,Acti
ve Directory 中已经拥有了张建国的用户账号,但 Firenze 和 Florence 比较 了
Active Directory 之后,Firenze 认为 Florence 的 Active Directory 比自 己的优先级高,因此
Firenze 会把 Florence 的 Active Directory 复制过来, 这样一来,刚被还原的张建国肯定会被重新删除掉!
难道我们对此就无能为力了吗?不是的,在 Firenze 从备份还原 Active Direc tory 之后,我们可以利用一个工具NTDSUTIL.EXE
来修改 Active Direct
ory 对象的版本号,让Firenze的版本号大于Florence的版本号,这样我们就可以利用游戏规则顺利地达到目的了。这种还原方式我们称为授权还原,下面我们通过一个实例为大家演示一下具体过程。
现在的场景是
Firenze 已经对 Active Directory 进行了备份,备份中包含了域 用户张建国。在备份之后我们误删除了张建国,现在我们在
Firenze 上开始利 用备份进行主要还原。首先在 Firenze 上重启计算机,BIOS 自检后按下 F8,
如下图所示,选择进入目录服务还原模式。目录服务还原模式可以把 Active Di rectory 挂起,适合我们从备份还原
Active Directory。