我编写了一些代码来从 Active Directory 服务器获取用户信息。假设 Active Directory 服务器有节点,每个节点都是位于不同地理位置的另一个 Active Directory 安装。例如:一个 AD 服务器位于美国,另一个位于澳大利亚,而根 AD 服务器位于美国,前两个服务器作为节点。
如果我在根 AD 服务器上运行我编写的用于跨地理位置搜索用户的筛选查询,它们会起作用吗?我使用的查询是
(|(objectClass=user)(objectClass=person)(objectClass=inetOrgPerson))
我实际上无法测试这种情况,但需要知道这里会发生什么。
答案1
AD 是分布式多主数据库,一般来说,您可以向任何域控制器查询有关用户的信息,并在任何 DC(节点)中获得相同的答案。
在 AD 中,您可以配置服务器之间数据更改的复制,因此如果用户在澳大利亚更改了某些属性,而您针对纽约的服务器查询某些数据,您可能会得到不同的答案。域管理员可以告诉您有关域中的时间复制的信息。
一旦复制完成,您将在任何 DC 中拥有相同的信息。通常复制时间约为几分钟,但在某些情况下,它仅设置为每天 1 或 2 次。
我希望这能回答你的问题。
答案2
您的 WRT Active Directory 术语不够准确。我为您指出了两个问题:
- 查询 AD 的最近副本
- 了解多域环境中的查询行为
全局目录维护林中所有域内容的子集。如果您使用的术语“节点”指的是分散的域,则针对全局目录的查询将允许您在单个查询中查询林中的所有域(假设您要查找的属性是复制到 GC 中的子集的一部分)。
物理上接近的 DC 的位置是通过 DNS 和 LDAP 查询的组合来实现的。在 Gooooooogle 上搜索“dns ldap find nearest domain controller”会返回一些不错的初始步骤 (通过 LDAP 查找最近的域控制器)。
如果您在 Windows 上进行开发,则可以使用 ADSI API“免费”获取域控制器位置。
答案3
这里不清楚的是您所说的“节点”一词的含义。
- 单个 Active Directory 域具有地理分布的多个域控制器?
- 一个具有 OU 的单个域,其中包含每个地理位置的用户和计算机?
- 多个域名代表各个公司地区办事处?
只要你查询域控制器属于同一域,你会得到同样的答案同一查询其中任何一个(除了复制问题)。
但是如果您有多个域,或者您想要查询给定域的特定子树(OU),您将得到不同的答案。
答案4
您确定要在查询中使用“OR”“|”运算符吗?这没有意义。此外,您是否将节点等同于域?
下面还将为您提供一个不需要代码进行测试的示例。
dsquery * domainroot -filter (|(objectClass=user)(objectClass=person)(objectClass=inetOrgPerson))" -attr *
但就像我说的,“OR”|运算符没有意义。
奇怪的是,我在 serverfaults 应答代码中发现了一个 bug,如果在执行此操作后它消失了,那就很奇怪了