LDAPSoft AD Browser SQL 基于 UserPasswordExpiryTimeComputed 的 LDAP 查询过滤器

LDAPSoft AD Browser SQL LDAP query filter based on UserPasswordExpiryTimeComputed

我们正在使用 LDAPSoft 广告浏览器列出广告服务帐户。我们尝试过滤服务账户,那些都是密码永不过期的。我们尝试了以下查询并返回 0 个结果(我们单击子树选项复选框以列出子节点)。 并且可以看到 UserPasswordExpiryTimeComputed 值为 null。请帮助我们解决问题。

SELECT from  OU=AAA,OU=VVV,OU=VVV,DC=DDD,DC=COM where msDS-UserPasswordExpiryTimeComputed  NOT NULL

感谢提前。

msDS-UserPasswordExpiryTimeComputed 属性是构造属性,这意味着它是在您请求它时计算的。不存储这些值。因此,您不能在查询中使用构造属性。您只能从您已经找到的帐户中阅读它们。

当帐户设置为密码永不过期时,userAccountControl 属性会更新。这是一个位标志,意味着值的二进制表示中的每一位都是一个具有不同含义的 on/off 标志。

您要查找的设置是 ADS_UF_DONT_EXPIRE_PASSWD,它在文档中显示为 0x00010000 的十六进制值。那是 1 0000 0000 0000 0000‬ 的二进制值。因此,当第 17 位为 1 时,密码永不过期。当第17位为0时,密码过期。但是,您可以在查询中使用 65536‬ 的十进制等效值。

我通常使用 LDAP 查询符号,它看起来像这样:

(&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=65536))

这将找到密码设置为永不过期的所有用户帐户。这个奇怪的数字被描述为 here 作为对象标识符 (OID) LDAP_MATCHING_RULE_BIT_AND。那就是按位与运算符,它检查是否设置了某个位。

我还没有测试过,但是在 SQL 表示法中,您可能会使用 &,也就是 bitwise AND operator,像这样:

WHERE userAccountControl & 65536 = 65536