【问题标题】:single line LDAP query that enumerates users from a group within a supergroup单行 LDAP 查询,枚举来自超组内的组的用户
【发布时间】:2011-05-26 18:58:48
【问题描述】:

我有一个如下所示的方案:

  1. 用户存在,如 UserA、UserB、UserC。
  2. 存在诸如 OverGroup、SubGroup 之类的组。
  3. OverGroup 会自动将新用户(如 UserA、UserB 等)添加到其成员资格中。
  4. 我自己创建的子组。我已将 OverGroup 设置为 SubGroup 的成员。

我希望能够单行查询 SubGroup 而不是检索 OverGroup,即:

Values:  
CN=OverGroup,OU=Groups,DC=example,DC=com

但 OverGroup 中实际用户(用户 A、B、C)的完整枚举,即:

Values:  
CN=UserA,OU=OtherOU,DC=example,DC=com
CN=UserB,OU=OtherOU,DC=example,DC=com
CN=UserC,OU=OtherOU,DC=example,DC=com

是否有可以检索此内容的单行 LDAP 过滤器? (它将被放入 Request Tracker 实例中的 ExternalAuth 配置“ldap”部分。很确定我只能通过 ExternalAuth 模块可以理解的一个查询来做到这一点。)

我尝试的所有方法都不起作用,并且根据我的阅读,似乎不可能通过任何单行查询枚举属于另一个组的组中的用户列表。想法?

【问题讨论】:

    标签: active-directory ldap


    【解决方案1】:

    Active Directory 有一个特殊的搜索过滤器选项,允许它过滤链接的对象,如嵌套组。该功能描述为here

    以下是如何检索组中所有用户的示例,包括嵌套组:

    (&(objectClass=user)(memberof:1.2.840.113556.1.4.1941:={0}))
    

    其中{0} 是父组的DN。

    【讨论】:

    • 它可以工作,尽管查询速度很慢(~5-10 秒)
    • 由于一旦确定了根就必须递归并返回整个子树,因此查询的性能预计会随着树的深度/广度而扩展。它等同于 SQL“Connect By”查询,事实上,它可以在幕后转化为它。也就是说,运行缓慢的东西通常比完全不起作用的东西要好。如果您有更快的解决方案,请分享,让所有人受益。
    • 如果您将 base/root 设置为特定的用户 DN,它会很快,但显然只检查该用户是否是成员。
    • 仅供参考:在一个非常大的组织中,这对我来说非常快。
    • 我认为重要的是要注意这不会显示该组的所有成员。例如,外国安全负责人可能不会被退回,除非我弄错了
    【解决方案2】:
    (&(objectClass=user)(memberof:1.2.840.113556.1.4.1941:=CN=MPV_BedPlacement,OU=Security Groups,OU=Groups,OU=CCHCS,DC=CCHCS,DC=LDAP))
    

    您必须为组添加完整的 DN,并且不能使用花括号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      相关资源
      最近更新 更多