You need to enable JavaScript to run this app. 使用net/ldap实现Ruby查询Active Directory指定OU下对象列表
优惠活动
大模型
产品
解决方案
定价
更多

使用net/ldap实现Ruby查询Active Directory指定OU下对象列表

问题定位与修正方案

原代码核心问题

  • 过滤条件逻辑完全错位:代码中设置的Net::LDAP::Filter.eq("OU", "ServerGroups"),作用是匹配「OU属性值等于ServerGroups」的条目,刚好精准命中ServerGroups OU自身的条目。该OU下的所有子对象(用户、安全组、嵌套子OU等)都不满足这个筛选规则,自然不会出现在返回结果中——相当于进了楼之后,只找门牌号贴在墙上的标识,完全忽略了楼里的住户,只把大门本身当查询目标。
  • 搜索目标和实际需求错位:需求是拉取指定OU管辖范围内的所有对象,现有代码却把筛选目标对准了OU实体本身,方向完全偏离。

修正实现要点

  • 替换适配需求的过滤规则:如果需要拉取OU下所有类型的对象,直接使用全匹配过滤条件Net::LDAP::Filter.all,该规则对应LDAP标准的(objectclass=*)匹配逻辑,AD中所有合法条目都会命中。如果只需要特定类型的对象,可以按需替换对应规则,比如仅查询组对象就匹配objectclass=group,仅查询用户就匹配objectclass=user。
  • 显式声明全子树搜索范围:net/ldap的search方法默认搜索范围是递归遍历base节点下的所有层级,但建议显式指定scope: Net::LDAP::SearchScope_WholeSubtree,避免版本变更导致默认值修改、搜索范围缩小(如果范围被误设为仅查询base节点,就会只返回OU本身,和当前现象完全一致)。
  • 适配大数量查询场景:如果OU下的对象总数超过AD单次查询返回的默认上限(1000条),需要开启分页查询参数,否则返回结果会被截断。

修正后的可运行代码

require 'net/ldap'

ldap = Net::LDAP.new(
  host: <server_ip_address>,
  port: 389,
  auth: {
    method: :simple,
    username: <username>,
    password: <password>
  }
)

# 全匹配规则:获取OU下所有类型的对象
# 按需替换filter即可筛选特定对象类型,例:
# 仅获取安全组: Net::LDAP::Filter.eq("objectclass", "group")
# 仅获取域用户: Net::LDAP::Filter.eq("objectclass", "user")
filter = Net::LDAP::Filter.all
treebase = "OU=ServerGroups,OU=Unix,OU=RBAC,OU=Role Groups,OU=Resource Administration,DC=corp,DC=our-company,DC=com"

ldap.search(
  base: treebase,
  filter: filter,
  scope: Net::LDAP::SearchScope_WholeSubtree,
  # 开启1000条/页的自动分页,适配大数量场景
  paged_search_segmentsize: 1000,
  # 按需指定返回属性,避免拉取冗余大字段提升效率
  attributes: ['dn', 'name', 'objectclass', 'samaccountname']
) do |entry|
  puts("DN: #{entry.dn}")
  entry.each do |attribute, values|
    puts("   #{attribute}: #{values.join(', ')}")
  end
end

puts("操作结果:#{ldap.get_operation_result}")

常见异常排查

  • 如果修正过滤条件后依然只返回OU本身,检查绑定使用的账号是否对该OU下的子对象有读取权限。AD的权限是分层继承的,如果子对象的读取权限被拦截,查询结果只会返回当前权限范围内可见的最上层节点,也就是OU本身。
  • AD的属性值普遍存在多值场景,输出结果时统一用数组拼接的方式处理,避免单值/多值判断带来的格式问题。

内容的提问来源于stack exchange,提问作者208_man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 03:24:01