在重命名期间避免违反 Active Directory 唯一性约束

Avoiding Active Directory Uniqueness Constraint Violation During Rename

我们的环境有 2 个 Windows 域控制器在 W2k12 上成功复制。在那个领域,和其他人一样,我们有大量的账户,其中一些账户属性需要是唯一的。出于不值得在这里访问的业务原因,我们有时需要在帐户之间交换属性。也就是说,用户 1 可能有(强制唯一的)foo@domain.com 邮件,但我们很多人需要将其交换为 bar@domain.com,以便为用户 2 提供邮件属性 foo@domain.com。

如果我执行 LDAP 更新将 user1 的邮件设置为 bar@domain.com,获得成功的结果,然后将 foo@domain.com 分配给 user2,我经常(但不总是)面临唯一性约束违规。即使我在操作之间关闭会话;最多暂停 2 秒;等。如果我给它 5-10 秒,它似乎可以通过,但我有一个 HTTP 响应取决于此,所以我真的很想在此之前返回结果。

这给我留下了两个问题:

  1. 尽管成功 MOD,但导致违规的原因是什么?
  2. 是否有一种合理的方式来交换这些电子邮件,而无需线程化操作并希望它成功(或让用户等待 10-15 秒)?

回想起来,很明显,为了检查唯一性,AD 会查询全局目录,要求您等待与 DC 正在检查的任何全局目录服务器进行复制。如您所说,解决方案是在本身托管全局目录副本的 DC 上执行操作。

在您的特定情况下,只有两个 DC,我建议您将它们都设为全局目录服务器。除了重命名问题,您目前没有任何需要 GC 的操作的冗余。