我们发现 Active Directory LDAP 查询存在一个奇怪的问题。
情况是:我们在给定的 OU 中有一个安全组。该安全组需要移动到一个完全不同的欧亚。
我们有一个使用 LDAP 针对 AD 进行身份验证的应用程序,它使用 Active Directory 进行查询LDAP_MATCHING_RULE_IN_CHAIN,以便它支持嵌入式组:
(memberOf:1.2.840.113556.1.4.1941:=CN=SystemAdministrators,OU=SA Users,OU=System Administrators,OU=Departments,DC=ds,DC=example,DC=com)
示例查询如下:
ldapsearch -LLL -x -W -H 'ldap://ny-dc02.ds.example.com:389' -D '[binding account details]' -b 'OU=Departments,DC=ds,DC=example,DC=com' '(memberOf:1.2.840.113556.1.4.1941:=CN=SystemAdministrators,OU=SA Users,OU=System Administrators,OU=Departments,DC=ds,DC=example,DC=com)' dn
它返回属于所请求的 OU 的完整用户列表 - 正如预期的那样。
但是,如果我们将该组移出Departments\System Administrators
并移入Security Groups\System Administration
(并适当地更新查询):
(memberOf:1.2.840.113556.1.4.1941:=CN=SystemAdministrators,OU=System Administration,OU=Security Groups,DC=ds,DC=example,DC=com)
例如:
ldapsearch -LLL -x -W -H 'ldap://ny-dc02.ds.example.com:389' -D '[binding account details]' -b 'OU=Security Groups,DC=ds,DC=example,DC=com' '(memberOf:1.2.840.113556.1.4.1941:=CN=SystemAdministrators,OU=System Administration,OU=Security Groups,DC=ds,DC=example,DC=com)' dn
我们没有从 LDAP 搜索中返回任何结果。
我们的第一个想法是“哦,它可能正在缓存某些东西”。但是我们将安全组留在其新的 OU 中几个小时,我们仍然看到了相同的结果。
以前有人见过类似的事情吗?关于下一步该如何排除故障,您有什么建议吗?
答案1
搜索基础应该设置为用户所在的位置,而不是组所在的位置(组的位置已包含在选项中)。因此,无论组在哪里,您的搜索基础都应该保持不变(如果用户没有移动)。
答案2
权限如何?应用程序是否有权在新 OU 中进行搜索?我会查看新旧 OU 上的有效权限。
另外,我要确认新位置实际上是一个 OU。可以在 AD 中创建“容器”对象,就像“用户”容器不是 OU 一样。因此,DN 将从:CN=SystemAdministrators,OU=System Administration,OU=Security Groups,DC=ds,DC=example,DC=com 更改为:CN=SystemAdministrators,CN=系统管理,OU=安全组,DC=ds,DC=example,DC=com