当使用LDAP查询我们的Active Directory结构来查找用户帐户时,某些记录(但不是全部)缺少某些关键字段,特别是memberOf和userAccountControl(它有一个位标志,指示帐户是否被禁用).
这里有一些提炼细节:
如果将查询设置为对任何这些字段进行过滤(例如在市场营销部门组中获取未禁用的帐户列表),它们将从结果集中消失(因为就AD而言,它们已丢失) .
如果使用具有高权限的域管理员帐户执行查询,则查询工作正常.
有问题的记录大约是总用户记录的1/4 - 1/3.大多数都似乎是较新的记录(我们认为一段时间,这是可能涉及到升级到2003的域控制器服务器上),但也有一些较旧的记录似乎受到影响.
粗略地查看两个类似的记录,其中一个记录可以通过任何帐户查看,另一个记录不会显示任何明显的差异.
所以我最好的猜测是,有一些权限拒绝设置(可能在模式级别?),这使得某些字段受到限制.我应该注意,域管理员永远不会故意设置任何此类权限.
更新/解决方案: ADSI Edit(在Windows 2003支持工具中)帮助我将其归结为Authenticated User角色的默认权限更改.对于某些人来说,该角色包含读取帐户限制(包含userAccountControl)和读取组成员身份(memberOf),而对于其他人则不包含.
差异的原因仍然不明确,尽管大多数"坏"记录是在切换到域控制器的Windows 2003 之后创建的,这可能是一个因素.
解决方案: 这仍然有点未定,但最有可能是更新的组策略,并结合更新现有帐户的脚本.