我们可以通过单个查询获取 LDAP 中所有引用 DN 的属性吗?

我们可以通过单个查询获取 LDAP 中所有引用 DN 的属性吗?

例如,以下是 ldapquery 及其输出:

# ldapsearch -LLL -h myldaphost -D uid=myname,ou=People,ou=MyBranch,o=MyOrg -x -w mypasswd -b cn=TEST_USERS,ou=Groups,ou=MyBranch,o=MyOrg uniqueMember
dn: cn=TEST_USERS,ou=Groups,ou=MyBranch,o=MyOrg
uniqueMember: uid=user1,ou=People,ou=MyBranch,o=MyOrg
uniqueMember: uid=user2,ou=People,ou=MyBranch,o=MyOrg
uniqueMember: uid=user3,ou=People,ou=MyBranch,o=MyOrg
uniqueMember: uid=user4,ou=People,ou=MyBranch,o=MyOrg

假设每个 uniqueMember dn 也具有员工编号属性。

ldapsearch -LLL -h myldaphost -D uid=myname,ou=People,ou=MyBranch,o=MyOrg -x -w mypasswd -b uid=user1,ou=People,ou=MyBranch,o=MyOrg  employeeNumber
dn: uid=user1,ou=People,ou=MyBranch,o=MyOrg
employeeNumber: 5282345

如何通过一次查询获取集团内所有员工的员工编号?

答案1

您不能,至少在没有覆盖的情况下不能。LDAP 不是 SQL,并且本身不支持连接操作。

如果您想要该信息,您将必须执行 1+n 查询。

除了可以使用memberOf覆盖来执行与遵循单个 dn 值属性相同的操作。在这种情况下,过滤字符串是memberOf=cn=groupname,ou=groups,dc=example,dc=com

答案2

有一个 IDLDAP 取消引用控制可以与搜索操作一起使用来取消引用 DN深度。

使用它有两个障碍:

  • 它仅受 O​​penLDAP 支持(带覆盖斯拉波-德雷夫) 和 IIRC 也是 389-DS。
  • 您正在使用群组成员属性唯一成员这不是尊贵名称语法(语法 OID 1.3.6.1.4.1.1466.115.121.1.12)但名称和可选的 UID(语法-OID 1.3.6.1.4.1.1466.115.121.1.34)。但是草案-masarati-ldap-deref明确要求 DN 语法。

使用 deref 控制时,应注意不要多次检索数据。例如,如果用户是多个组的成员,则您将多次检索相同的数据,这可能会造成实际的性能损失。

所以无论如何,客户端连接也许是更好的解决方案。

相关内容