域控制器对象的正确 objectClass 是什么?

域控制器对象的正确 objectClass 是什么?

在开发一个查询 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),并且基础需要是配置命名上下文。

相关内容