普通のLDAP検索フィルタは、ネストしたセキュリティグループに対応不可
Active Directory環境では、セキュリティグループのメンバーにセキュリティグループを入れるというネスト(入れ子)構造をよく使うと思う。セキュリティグループは会社組織と対応付けされることが多いので、例えば○○部のセキュリティグループの下に●●課のセキュリティグループと▲▲課のセキュリティグループを入れるといった具合だ。
ところが、このような構造において、「○○部に所属するユーザを全員取り出す」といったLDAP検索フィルタを書こうとすると難儀することになる。
![]() |
Figure.1 ネストしたセキュリティグループ |
上図のような構造で、GroupAに属するユーザーを取り出すLDAPフィルタを書く場合、単純に考えると
1 | (&(objectClass=user)(memberOf=CN=GroupA,DC=example,DC=com)) |
AD独自の演算子で、ネストしたセキュリティグループを再帰的に検索
実はADのLDAPには、この問題を解決してくれる独自の演算子が用意されている。Search Filter Syntax (Windows)
に紹介されている"LDAP_MATCHING_RULE_IN_CHAIN"がそれだ。
具体的には下記のように記述すればよい。
1 | (&(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=GroupA,DC=example,DC=com)) |
手っ取り早く試すなら、ldifdeコマンドで
1 | ldifde -f export.ldf -r "(&(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=GroupA,DC=example,DC=com))" |
0 コメント:
コメントを投稿