假设你有2个域控制器,DC1和DC2。
无论出于何种原因,两个不同的人会创build一个新的用户帐户 – 一个是在DC1上,另一个是在DC2上。
据推测,这两个帐户现在有相同的用户名,但不同的SID。
当DC尝试下次同步时会发生什么?
你得到一个复制冲突 。
其中一个帐户将保持所需的名称,另一个将自动重命名为其他内容来解决冲突。
这个例子实际上是在这里使用的 ,相关的部分粘贴在下面。
考虑contoso.com域中的jsmith用户对象的示例。 DC1的pipe理员将jsmith的描述更改为“Marketing”。 几乎同时,DC3的pipe理员将同一用户的描述更改为“销售和营销”。 此时,DC1和DC3的关于jsmith描述属性的信息比较如图9所示。
如果DC2同时收到这两个变化,则显然需要确定哪一个是“获胜”变化。 争议解决的破坏者的顺序如下:
具有较高版本ID的修改将被接受为“获胜”变化; “失败”的变化将被覆盖。 在这种情况下,两个logging的版本ID都是2,所以我们需要进入第二个决胜盘。
如果两个logging具有相同的版本ID,则具有较晚时间戳的更改将被接受为获胜更改; 丢失的变化将被覆盖。 在这种情况下,来自DC3原始写入的时间戳较晚,因此jsmith的描述将被设置为“Sales and Marketing”。 在极less数情况下,当versionID和timestamp都相同时,我们需要第三个和决定性的tiebreaker:
如果两个logging具有相同的版本ID和时间戳,那么具有较小编号GUID的DC发起的任何写入都将获胜; 从较高编号的GUID写入将被覆盖。 所以如果DC1的GUID是1234567890而DC3的GUID是2345678901,那么如果版本ID和时间戳是相同的,那么来自DC1的原始写入将会获胜。
你可能在想,“把时间戳作为第一个打破僵局是不是更有意义?” 这不像你想像的那么干脆。 如果时间标记是Active Directory冲突解决scheme中的主要决定因素,那么恶意pipe理员需要做的唯一一件事情就是在一个特定的DC上设置时钟,以便它总是通过方式获胜的时间戳。
解决冲突的对象创build
在使用相同名称创build两个对象的情况下,Active Directory将使用前面部分中描述的三个分析器来确定哪一个是“获胜”对象。 但是,与上一节不同,“丢失”对象不会被覆盖。 相反,使用CNF字符(用于冲突对象)重命名丢失的对象,然后使用冒号和“丢失”对象的GUID。 这允许pipe理员更有条理地确定哪个对象应该被保留,哪些被删除。