例如,以下是 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一深度。
使用它有两个障碍:
- 它仅受 OpenLDAP 支持(带覆盖斯拉波-德雷夫) 和 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 控制时,应注意不要多次检索数据。例如,如果用户是多个组的成员,则您将多次检索相同的数据,这可能会造成实际的性能损失。
所以无论如何,客户端连接也许是更好的解决方案。