上下文
我们在将成员从LDAP服务器导入我们的应用程序时添加了组成员资格过滤功能。
(之前我们从给定的ldap“基本DN”导入了所有成员;现在管理员可以限制到某些组,即基本DN中的成员“Sales”和“HR”。
我们的应用程序支持:
SUNONE
Active Directory
此外,我们计划仅支持静态组,而不支持动态组。
我们将如何完成
过去,我们会使用两次查找将成员复制到我们的数据库中以获得此新功能。
可以使用MemberOf / IsMemberOf减少查询和逻辑吗?
在简短的互联网研究中,我发现SunONE和ActiveDirectory有一个属性(isMemberOf / memberOf),用于标识“此用户所属的组”
理论上,我们可以将上述逻辑简化为一个LDAP查询:
可以使用MemberOf / IsMemberOf减少查询和逻辑吗?
了解问题: - memberOf / isMemberOf仅支持静态组 - 它不支持嵌套组
问题
参考
的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问题: How to write LDAP query to test if user is member of a group?
答案 0 :(得分:2)
Will this approach using memberOf/IsMemberOf work?
这将起到警告的作用。
Any caveats?
如果它以OpenLDAP实现的方式工作,则memberOf属性仅适用于启用后创建的条目。它没有“赶上”。
What about OpenLDAP or other servers? do they all support such an attribute. (I see that OpenLDAP has memberOf "overlay", but an
管理员必须明确启用它)
您可以询问任何LDAP服务器的根DN,以确定它是否支持该功能。您对OpenLDAP对此的支持是正确的。
答案 1 :(得分:0)
我无法与Sun ONE对话,但Active Directory确实支持用户的memberOf属性,您可以对其进行查询。该属性是一个多值属性,包含用户所属组的distinguishedName。
也就是说,您必须通过它的dn查询该组,并且您不能使用通配符匹配作为其一部分。这本身不支持嵌套组,但如果您愿意,我只需将objectCategory添加到查询属性中,并检查“如果此成员是另一个组,则重复查找”。
如果你的团队结构中有一个循环,这一切都会变得很糟糕,但我很确定很多其他事情也是如此,而且AD阻止你这样做。