【发布时间】:2012-08-17 07:46:28
【问题描述】:
我在为 LDAP 查询编写过滤器时遇到问题。
我有两个对象类——Person 和 Service。数据库由许多人组成,每个人都有零个或多个子服务。每个人都有一个标识符 personNumber 属性。我想选择几个人和他们给定人员编号的所有服务。是否可以在一个查询中执行此操作?
例如,如果我们有以下一组对象:
personNumber=1,ou=root,o=org
serviceNumber=1,personNumber=1,ou=root,o=org
serviceNumber=2,personNumber=1,ou=root,o=org
personNumber=2,ou=root,o=org
serviceNumber=3,personNumber=2,ou=root,o=org
personNumber=3,ou=root,o=org
serviceNumber=4,personNumber=3,ou=root,o=org
,如果给定人号 1 和 2,是否有可能检索这些对象:
personNumber=1,ou=root,o=org
serviceNumber=1,personNumber=1,ou=root,o=org
serviceNumber=2,personNumber=1,ou=root,o=org
personNumber=2,ou=root,o=org
serviceNumber=3,personNumber=2,ou=root,o=org
但不是这些:
personNumber=3,ou=root,o=org
serviceNumber=4,personNumber=3,ou=root,o=org
,只使用一个查询?这是一个例子;可以加载两个以上的标识符。他们不是先验的。
另外,除了生成大的(|(a=..)(a=..)(a=..)..) 过滤器之外,有没有办法指定属性值应该在某些值集合中,例如 SQL 中的IN (..) 子句?
【问题讨论】:
-
我不明白你问题的第一部分。如果您为每个找到的节点找到 people 节点,则必须检索子节点(在您的情况下为服务)。 LDAP 不进行汇总。根据这个规范,第二部分可能不是:tools.ietf.org/html/rfc4515
-
@rene 我在我想做什么的问题中添加了一个示例。
-
这样就更清楚了。人是否具有将其链接到服务的(多值)属性,或者是 ldap 层次结构的唯一关系?在后一种情况下,你不能得到这样的结果。
-
@rene 不,它只是 LDAP 层次结构。谢谢你。如果您回答正确,我会将您的答案标记为已接受。
标签: filter ldap jndi ldap-query