我正在嘗試編寫一個 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
是否可以編寫一個 LDAP 查詢來執行相當於 SQL JOIN 或「IN」過濾器的操作,例如。
SELECT u.* FROM user u WHERE u.uid IN (SELECT memberUid FROM group WHERE cn=login_group)
它必須是單一查詢,因為它將用於控制對第三方入口網站的訪問,我們無法更改客戶端實作。