在开发一个查询 AD 中的用户信息的应用程序时,我不断检索域控制器作为结果的一部分。
DirectorySearcher
使用带有以下过滤器的C# :
"(objectClass=User)"
经过一番挖掘,我注意到对于我们的 DC,objectClass 属性设置为:
top; person; organizationalPerson; user; computer
我觉得这有点奇怪。但是,我没有参考资料,也找不到任何关于它的具体文档。
有人能告诉我这是否正确吗?如果不正确,应该怎么做?此外,任何与此相关的文档/最佳实践/标准都将不胜感激。
答案1
从技术上讲,您必须过滤 2 个值。首先,objectCategory=Computer
因为域控制器和其他计算机一样,都是计算机;其次,您需要过滤用户帐户控制属性寻找具有ADS_UF_SERVER_TRUST_ACCOUNT
旗帜。
ADS_UF_SERVER_TRUST_ACCOUNT
是 0x1000 或十进制的 8192。binary and
使用1.2.840.113556.1.4.803
运算符。因此,您的查询最终将如下所示:
(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))
答案2
另一个可能性能更好的域控制器对象查询是 (&(objectCategory=computer)(primaryGroupId=516))。对于只读域控制器,查询为 521。或者对于两者:(&(objectCategory=computer)(|(primaryGroupId=516)(primaryGroupId=521)))
在小型域中可能不太明显,但是在具有大量计算机对象的域中,userAccountControl:查询可能需要很长时间。
如果您正在对 Active Directory 站点和服务中出现的服务器对象执行查询,那将是:(objectCategory = server),并且基础需要是配置命名上下文。