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