You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过单DC获取AD林中双域用户的sAMAccountname等指定属性?

解决方案

1. 启用LDAP自动引用(优先推荐)

你当前连接AD时设置了auto_referrals=False,这会阻止父域DC将跨域查询请求重定向到子域DC,直接导致查询corp.example.com返回空结果。修改连接参数启用自动引用即可解决:

conn = Connection(server="DC_of_the_example.com", user="example.com\\user", password="password", auto_bind=AUTO_BIND_NO_TLS, auto_referrals=True)

启用自动引用后,执行原有查询语句即可获取两个域的用户完整属性(包括department):

# 查询example.com域用户
parent_domain_users = conn.search(
    'DC=example,DC=com',
    '(&(objectclass=user))',
    attributes=['sAMAccountname', 'distinguishedName', 'displayName', 'department']
)

# 查询corp.example.com域用户
child_domain_users = conn.search(
    'DC=corp,DC=example,DC=com',
    '(&(objectclass=user))',
    attributes=['sAMAccountname', 'distinguishedName', 'displayName', 'department']
)

2. 合并结果并去重

由于每个用户的distinguishedName是AD中唯一的标识,可通过该属性实现无重复的用户集合:

# 合并两个域的用户列表
all_users = parent_domain_users + child_domain_users

# 基于distinguishedName去重
unique_users = []
seen_dns = set()
for user in all_users:
    user_dn = user.entry_attributes_as_dict['distinguishedName'][0]
    if user_dn not in seen_dns:
        seen_dns.add(user_dn)
        unique_users.append(user)

备选方案:手动切换子域DC查询

如果启用自动引用遇到网络或权限限制,可在同一个连接会话中手动切换到子域DC进行查询:

# 切换到corp.example.com的DC
conn.server = "DC_of_corp.example.com"
child_domain_users = conn.search(
    'DC=corp,DC=example,DC=com',
    '(&(objectclass=user))',
    attributes=['sAMAccountname', 'distinguishedName', 'displayName', 'department']
)

# 切回example.com的DC查询父域用户
conn.server = "DC_of_the_example.com"
parent_domain_users = conn.search(
    'DC=example,DC=com',
    '(&(objectclass=user))',
    attributes=['sAMAccountname', 'distinguishedName', 'displayName', 'department']
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:39:54