我正在尝试编写一个 LDAP 搜索过滤器来检索属于特定组的用户成员。
我们正在运行自定义 LDAP 实现(在 OpenLDAP 上运行:slapd 2.4.40),其中用户和组之间的关系被映射Group (memberUid) -> User (uid)
。
用户 LDIF 没有 memberOf 属性,因此无法使用通常的方法(&(objectClass=person)(memberOf=login_group))
用户 LDIF 如下所示:
dn: uid=user1,ou=people,dc=example,dc=com
cn: user1
displayName:: User1
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: posixAccount
uidNumber: 2698
uid: user1
LDIF 组如下:
dn: cn=login_group,ou=groups,dc=example,dc=com
gidNumber: 1643
objectClass: posixGroup
objectClass: top
objectClass: groupOfUniqueNames
cn: login_group
memberUid: user1
memberUid: user2
是否可以编写一个与 SQL JOIN 或“IN”过滤器等效的单个 LDAP 查询,例如。
SELECT u.* FROM user u WHERE u.uid IN (SELECT memberUid FROM group WHERE cn=login_group)
它必须是一个单一查询,因为它将用于控制对第三方门户的访问,我们无法更改客户端的实现。