语境
在将成员从 LDAP 服务器导入我们的应用程序时,我们正在添加组成员过滤。
(以前我们从给定的 ldap“基本 DN”导入所有成员;现在管理员可以限制到某些组,即基本 DN 中的成员“Sales”和“HR”)。
我们的应用程序支持:
SunONE
活动目录
此外,我们计划仅支持静态组,不支持动态组。
我们会怎么做
过去,我们会使用两次查找将成员复制到我们的数据库中以实现这一新功能。
- 在 baseDN 中查找所有成员
- 查找组名在列表中的所有组(包括成员)(例如“销售”或“人力资源”)。通过 Map 以编程方式跟踪“哪些用户属于哪些组”,即使用“组成员”属性(SunONE 中的“uniqueMember”,ActiveDirectory 中的“成员”)
- 将 #1 和 #2 的结果相交以获得“要导入的成员”
MemberOf/IsMemberOf 可以减少查询和逻辑吗?
在简短的互联网研究中,我发现 SunONE 和 ActiveDirectory 有一个属性 (isMemberOf/memberOf),它标识“此用户所属的组”
理论上,我们可以将上述逻辑简化为一个 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
活动目录:http: //msdn.microsoft.com/en-us/library/ms677943.aspx
相关的 SO 问题: 如何编写 LDAP 查询来测试用户是否是组的成员?