コンテクスト
LDAPサーバーからアプリケーションにメンバーをインポートするときに、グループメンバーシップフィルタリングを追加します。
(以前は、特定のldap「ベースDN」からすべてのメンバーをインポートしました。現在、管理者は特定のグループ、つまりベースDNのメンバー「Sales」と「HR」に制限できます)。
私たちのアプリケーションは以下をサポートします:
SunONE
Active Directory
また、動的グループではなく、静的グループのみをサポートする予定です。
どのようにそれをしただろうか
以前は、2つのルックアップを使用して、この新しい機能のためにメンバーをデータベースに複製していました。
- baseDNのすべてのメンバーを検索します
- グループ名がリストに含まれているすべてのグループ(メンバーを含む)を検索します(例:「Sales」または「HR」)。「どのユーザーがどのグループに属しているか」、つまり「グループメンバー」属性(SunONEでは「uniqueMember」、ActiveDirectoryでは「member」)を使用して、マップを介してプログラムで追跡します。
- #1と#2の結果を交差させて、「メンバーにインポート」を取得します
MemberOf / IsMemberOfはクエリとロジックを減らすことができますか?
簡単なインターネット調査で、SunONEとActiveDirectoryには、「このユーザーが属するグループ」を識別する属性(isMemberOf / memberOf)があることがわかりました。
理論的には、上記のロジックを1つのLDAPクエリに簡略化できます。
- いずれかのグループのメンバーであるbaseDNのすべてのメンバーを検索します
MemberOf / IsMemberOfはクエリとロジックを減らすことができますか?
問題を知っている:-memberOf /isMemberOfは静的グループのみをサポートします-ネストされたグループはサポートしません
質問
- memberOf / IsMemberOfを使用したこのアプローチは機能しますか?
- 注意点はありますか?
- OpenLDAPや他のサーバーはどうですか?それらはすべてそのような属性をサポートしていますか?(OpenLDAPにはmemberOf "overlay"があるようですが、管理者は明示的に有効にする必要があります)
参照
SunOne: http ://docs.oracle.com/cd/E19575-01/820-2763/bcajq/index.html
Active Directory: http: //msdn.microsoft.com/en-us/library/ms677943.aspx
関連するSOの質問: ユーザーがグループのメンバーであるかどうかをテストするためのLDAPクエリを作成するにはどうすればよいですか?