首页 > 解决方案 > What is the efficient way of get members for specific user in LDAP Query?

问题描述

In Active Directory, I have to use an LDAP query for getting members of a specific user. I am using the LDAP query format is,

userSearchFilter = (&(sAMAccountType=805306368)(sAMAccountName=user));
userSearchBase = user + ",DC=test,DC=COM";
userReturnedAtts[]={"tokenGroups"};

NamingEnumeration userAnswer = ctx.search(userSearchBase, userSearchFilter, userSearchCtls);

标签: javaactive-directoryldap

解决方案


tokenGroups属性列出了用户所属的所有安全组(不是通讯组)的 SID。如果您想获取组的名称,则必须查找每个组。这不是很有效。

它也是一个计算属性,这意味着它是在您请求它时计算的。它也是一个递归列表(如果用户是组 A 的成员,组 A 是组 B 的成员,则组 A 和组 B 都将在列表中)。这可能就是为什么需要这么长时间。

收集用户的所有成员资格可能很复杂,具体取决于您的 AD 环境和您要查找的内容。在最好的情况下,您只有一个不信任任何其他域的域。在这种情况下,您可以使用memberOf用户的属性。这将包含用户是其直接成员的安全组和通讯组。

我在回答您的其他问题时提到了这一点,但请看一下我写的关于此的文章:查找所有用户的组。代码示例是 C#,但原则适用于任何语言。

您可能还可以从阅读我的另一篇文章中受益:是什么让会员成为会员?. 实际上有 3 种方式可以将用户视为组的成员,尽管您可能只关心一种。但我也描述了当你不想依赖的时候memberOf


推荐阅读