假设您有 2 个域控制器,DC1 和 DC2。
无论出于什么原因,两个不同的人去创建新的用户帐户 - 一个在 DC1 上创建,另一个在 DC2 上创建。
据推测,这两个帐户现在具有相同的用户名,但具有不同的 SID。
当 DC 下次尝试同步时会发生什么情况?
答案1
其中一个帐户将保留所需的名称,而另一个帐户将自动重命名为其他名称以解决冲突。
这个例子实际上在这里使用,相关部分粘贴如下。
以 contoso.com 域中的 jsmith 用户对象为例。DC1 上的管理员将 jsmith 的描述更改为“营销”。几乎同时,DC3 上的管理员将同一用户的描述更改为“销售和营销”。此时,DC1 和 DC3 关于 jsmith 描述属性的信息进行比较,如图 9 所示。
如果 DC2 同时收到这两个更改,则显然需要确定哪一个是“获胜”更改。冲突解决的决胜顺序如下:
具有更高 versionID 的修改将被接受为“获胜”更改;“失败”更改将被覆盖。在本例中,两个记录的 versionID 都是 2,因此我们需要进入第二个决胜局。
如果两个记录的 versionID 相同,则时间戳较晚的更改将被视为获胜更改;失败的更改将被覆盖。在这种情况下,DC3 的原始写入的时间戳较晚,因此 jsmith 的描述将设置为“销售和营销”。在极少数情况下,当 versionID 和时间戳都相同时,我们需要第三个决定性的决胜因素:
如果两个记录具有相同的 versionID 和时间戳,则由具有较低 GUID 的 DC 发起的写入将获胜;来自较高 GUID 的写入将被覆盖。因此,如果 DC1 的 GUID 是 1234567890 而 DC3 的 GUID 是 2345678901,则如果 versionID 和时间戳都相同,则来自 DC1 的原始写入将获胜。
您可能在想,“将时间戳作为第一个决胜局不是更有意义吗?”这并不像您想象的那么简单。如果时间戳是 Active Directory 冲突解决中的主要决胜局,那么恶意管理员要传播其更改所需要做的唯一事情就是将某个特定 DC 上的时钟调回,以便它始终通过时间戳获胜。
解决对象创建冲突
如果创建了两个同名的对象,Active Directory 将使用上一节中描述的三个决胜因素来确定哪个对象是“获胜”对象。但是,与上一节不同,“失败”对象不会被覆盖。相反,失败对象将使用字符 CNF(表示冲突对象)重命名,后跟冒号和“失败”对象的 GUID。这使管理员可以更有条理地确定应保留哪个对象以及应删除哪个对象。