特定のグループのメンバーであるユーザーを取得するための単一の 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)
これはサードパーティのポータルへのアクセスを制御するために使用されるため、単一のクエリである必要があり、クライアントの実装を変更することはできません。