【问题标题】:What is the efficient way of get members for specific user in LDAP Query?在 LDAP 查询中获取特定用户的成员的有效方法是什么?
【发布时间】:2019-07-29 10:25:17
【问题描述】:

在 Active Directory 中,我必须使用 LDAP 查询来获取特定用户的成员。我使用的 LDAP 查询格式是,

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

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

【问题讨论】:

  • 您的意思是“特定组的成员”吗? memberOf 属性设置了吗?
  • 使用正确的缩进突出显示代码。
  • @LutzHorn,我问的是获取特定用户的组吗?我上面提到查询将需要 20 秒的响应。

标签: java active-directory ldap


【解决方案1】:

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

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

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

我在回答您的其他问题时提到了这一点,但请看一下我写的关于此的文章:Finding all of a user’s groups。代码示例是 C#,但原则适用于任何语言。

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

【讨论】:

    猜你喜欢
    • 2016-05-11
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多