我们正在使用LDAP对用户进行身份验证。 LDAP管道的另一端是一个非常大的Active Directory实现。我们发现身份验证查询花费的时间太长(15秒或更长)。
以下是我们正在做的事情的代表:
ldap://ldap.myco.com/DN?dc=myco,dc=com??sub?(sAMAccountName=John)
实现这一目标的最佳方法是什么方式适用于任何巨大的AD实施?
谢谢!
答案 0 :(得分:3)
虽然您的搜索还包括计算机和组,但sAMAccountName是已定义索引的。您可以使用(&(objectCategory=person)(objectClass=user)(samAccountName={0}))
进一步限定它。
更大的问题是你为什么要开始搜索?如果您只想通过LDAP绑定检查用户名和密码,请执行绑定到LDAP:// DC = myco,DC = com并访问myDirectoryEntry.NativeObject
。如果它抛出异常你就会遇到问题。
另外,什么是“ldap.myco.com
”?那是负载均衡器吗?它是您域名的名称吗?你应该能够在这里进行无服务器绑定......
答案 1 :(得分:0)
如果索引sAMAccountName
,则此查询应为O(1)或O(log(N)),具体取决于索引结构。如果它需要15秒,它听起来像O(N),这意味着它没有被索引。
答案 2 :(得分:0)
为了冗余(并传播负载),您应该有多个可用于绑定的DC。 Microsoft AD客户端用于定位DC的算法(基于站点成员资格和SRV RR权重和首选项值)非常重要,但您可以通过获取要绑定的几个DC的地址(或名称)来进行近似。