首页 > 解决方案 > LDAP 查询不在子查询中

问题描述

我正在尝试的是仅获取活动用户并排除非活动用户(唯一的区别是非活动用户具有 的值accountExpires)。

所以我有过期的用户查询是:

(&(objectClass=user)(!accountExpires=9223372036854775807)(!accountExpires=0))

我现在需要的是如何添加查询的第一部分:

(&(objectClass=user)(givenName=*" & userVariable & "*))

所以查询应该是这样的:

(&(objectClass=user)(givenName=*" & userVariable & "*)) NOT IN (&(objectClass=user)(!accountExpires=9223372036854775807)(!accountExpires=0))

我知道 LDAP 中没有“不在”表达式,但我怎样才能得到这个查询?如果我否定过期用户的查询,它就不起作用。

希望有人找到了解决方案。

谢谢!

标签: ldap

解决方案


如果我否定过期用户的查询,它就不起作用。

我认为这是问题所在:您必须根据布尔代数正确分配否定。

完整的过滤器变为:

(&(objectClass=user)(givenName=*" & userVariable & "*)(|(!accountExpires=*)(accountExpires=9223372036854775807)(accountExpires=0)))

查询说明

如果我们有一个布尔表达式p ∧<em>q,则正确的否定是 ¬ p ∨¬<em>q。因此,要排除过期用户并仅包含未过期用户,我们需要过滤器:

(|(!accountExpires=*)(accountExpires=9223372036854775807)(accountExpires=0))

这将包括没有价值的用户accountExpires(参见属性存在条款)或无限期的用户。

我只是将 the 转换&为 an|并颠倒了否定,但我认为包含 of!accountExpires=*也是必要的。


推荐阅读