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

使用ADODB/ADSDSOObject时登录用户的Active Directory认证机制咨询

Active Directory无显式凭证查询的认证机制解析

我的系统已接入Active Directory,可通过指定用户名和密码绑定的方式查询目录信息。我发现使用ADO或ADSDSOObject Provider(已在Java/Python/VBA中测试)时,无需显式提供用户名和密码也能完成查询。我希望了解这种场景下的认证实现方式。

需显式提供凭证的示例代码

import ldap3
from ldap3.extend.microsoft.addMembersToGroups import ad_add_members_to_groups as addUsersInGroups
server = Server('172.16.10.50', port=636, use_ssl=True)
conn = Connection(server, 'CN=ldap_bind_account,OU=1_Service_Accounts,OU=0_Users,DC=TG,DC=LOCAL','Passw0rds123!',auto_bind=True)
print(conn)

无需显式提供凭证的示例代码

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "SELECT Name FROM 'LDAP://DC=mydomain,DC=com' WHERE objectClass = 'Computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
Set objRecordSet = objCommand.Execute

我曾尝试查看相关库的源码,但未能理解具体实现逻辑。


认证实现方式解析

这种无需手动输入账号密码就能完成AD查询的机制,核心是Windows集成身份验证(底层依赖Kerberos或NTLM协议),具体逻辑如下:

  • ADSDSOObject是微软为AD定制的OLE DB Provider,默认启用了集成身份验证模式。当调用objConnection.Open不指定凭证时,它会自动调用系统的SSPI(安全支持提供程序接口)
  • SSPI会获取当前运行代码的Windows用户的安全上下文——也就是你当前登录Windows的域用户(或已通过域验证的本地用户)的身份凭证,比如Kerberos票据或NTLM哈希
  • 这些凭证会被自动传递给AD服务器完成身份校验,只要当前用户本身拥有AD目录的查询权限,就能成功执行查询
  • 这种方式和显式指定凭证的简单绑定不同:显式绑定是用你指定的服务账号身份完成认证,和当前登录用户无关;而集成身份验证完全复用当前用户的已验证身份

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:35:15