【问题标题】:Query all the users in a system with LDAP使用 LDAP 查询系统中的所有用户
【发布时间】:2010-08-14 00:02:10
【问题描述】:

我正在使用 ruby​​ 的 net/ldap 库来解决这个问题,但实际上驱动程序语言并不重要。我需要找到一种方法来从系统中获取所有用户,并找出哪些用户没有分配给帐户的电子邮件。可能吗?

我可以通过 LDAP 连接甚至创建新记录,并且可以通过使用通配符条目过滤结果来返回查询。

假设我创建了一个过滤器来查找以三个 9 开头的 cn:

  filter = Net::LDAP::Filter.eq("cn", "999*")
  @connection.search(:base => "cn=Manager, dc=foo, dc=bar, dc=biz", 
                     :filter  => filter)

那么我的结果计数可能是 42。

假设我创建了相同的过滤器但只请求 1 个 9,查询失败并返回 false

  filter = Net::LDAP::Filter.eq("cn", "9*")
  @connection.search(:base => "cn=Manager, dc=foo, dc=bar, dc=biz", 
                     :filter  => filter)

如果我只请求"cn", "*",这也是一样的,我应该说“把所有的 cn 都给我。 ”。

【问题讨论】:

    标签: ruby active-directory ldap


    【解决方案1】:

    所以这个问题的简短回答是,这完全取决于您的架构是如何设置的。如果您正在设置 LDAP 模式,您需要有几组具有各种 cn(通用名称)标识符的记录,例如 cn=activeUserscn=inactiveUsers,这将允许您在列表中查询比我的情况更深的查询。

    【讨论】:

      【解决方案2】:

      我认为您在 LDAP 服务器上对搜索操作设置的时间限制存在问题。

      如果您有一个非常大的搜索需要很长时间,LDAP 服务器会返回错误“超出时间限制”并且没有数据。

      Ruby-Ldap 在这种情况下会引发异常 LDAP::ResultError。但是我不知道 Net-Ldap 的行为如何。

      尝试提高 LDAP 服务器的时间限制或使用更严格的搜索过滤器,例如“(&(cn=9*)(active=TRUE))”。将此处的“active=TRUE”替换为您的活跃用户标准。

      【讨论】:

      • 我同意你的看法,除了数据返回之间的差异应该是大约 18 个条目并且我使用的数据库是真实数据库的子集,只有几百条记录。我绝对认为在我的情况下这是一个架构问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多