使用 DirectoryServices.Protocols 进行 LDAP 搜索速度慢

2024-01-11

我们使用 System.DirectoryServices.DirectorySearcher 进行 sAMAccountName 查找。这工作得很好,只是当查询某个我们怀疑很大的 AD 时,搜索经常会超时。经过一些研究后,我发现在查询大型 AD 时使用 System.DirectoryServices.Protocols 进行搜索可以更快。我正在尝试使用协议重新创建我们所拥有的内容,看看这是否会对超时产生任何影响。这是目前的情况:

Dim Entry As New DirectoryEntry(anLDAPURL, aDomainUserName, aPassword)

Dim obj As Object = Entry.NativeObject 'Force Authentication on Active Directory Server

Dim Filter As String = String.Format("(sAMAccountName={0})", aDomainUserName)

Dim Search As New DirectorySearcher(Entry, Filter)
Search.PropertiesToLoad.Add(SID)
Search.PropertiesToLoad.Add(ACCOUNTISLOCKEDOUT)
Search.PropertiesToLoad.Add(ACCOUNTISDISABLED)

Dim Results As SearchResult = Search.FindOne()

这工作正常并且非常快(除了上面提到的超时情况)。这就是我试图将其更改为的内容,以便我可以对其进行测试:

Dim credentials As New System.Net.NetworkCredential(aDomainUserName, aPassword)
Dim directoryIdentifier As New System.DirectoryServices.Protocols.LdapDirectoryIdentifier("ldap-ad.example.org")

Using connection As New System.DirectoryServices.Protocols.LdapConnection(directoryIdentifier, credentials, Protocols.AuthType.Basic)
    Dim attributes() As String = {SID, ACCOUNTISLOCKEDOUT, ACCOUNTISDISABLED}

    Dim search As New System.DirectoryServices.Protocols.SearchRequest(
    "dc=example,dc=org",
    String.Format("(sAMAccountName={0})", aDomainUserName),
    Protocols.SearchScope.Subtree,
    attributes)

    Dim response As System.DirectoryServices.Protocols.SearchResponse = DirectCast(connection.SendRequest(search), System.DirectoryServices.Protocols.SearchResponse)
End Using

上面的代码可以工作,因为它返回一个结果,但比原始代码慢得多。我怀疑我尝试查询的方式效率低下,但我不太确定应该如何设置它以使其更快。


我遇到了同样的问题,最终是由于返回结果中的“推荐追逐”System.DirectoryServices.Protocols.LdapConnection.SendRequest方法。这是由于“假”域名“corp.org”没有任何 DNS 条目(因此SendRequest浪费了大量时间对结果进行 DNS 查找)。要禁用推荐追踪:

var conn = new LdapConnection(...);
conn.SessionOptions.ReferralChasing = ReferralChasingOptions.None;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 DirectoryServices.Protocols 进行 LDAP 搜索速度慢 的相关文章

  • authContext.AcquireTokenSilentAsync 抛出错误

    我参考了this https github com Azure Samples active directory dotnet graphapi web git 项目 该项目具有用于连接并获取有关用户配置文件的信息的代码 在运行该项目时 我
  • 使用 PrimarySearcher.FindAll() 时出现内存泄漏

    我也有一个使用插件和应用程序域长时间运行的服务 并且由于使用目录服务而出现内存泄漏 请注意 我正在使用 system directoryservices accountmanagement 但据我了解 它使用相同的底层 ADSI API 因
  • 从活动目录读取objectGUID

    我正在尝试使用 node js 从 AD 获取信息 我试过了activedirectory and ldapauth fork一般来说 代码可以工作 但如果我需要一些octetstring数据如objectGUID 我在对象中看到了垃圾字符
  • 如何按名字和姓氏排序,然后按 SamAccountName 排序,其中并非所有姓名都有名字和姓氏?

    目前 我有以下内容 来自 LDAP Get context based on currently logged on user PrincipalContext domainContext new PrincipalContext Cont
  • AD、ADFS 与 LDAP:像我 5 岁一样解释一下

    我没有与 Microsoft 合作 但我很难从概念上理解 AD ADFS 和 LDAP 如何协同工作 假设我有一个需要身份提供者的应用程序 AD 和 LDAP 如何发挥作用 我的谷歌搜索还没有为我提供这些概念的清晰总结 但如果有存在的资源
  • 将启用的计算机添加到 Active Directory OU

    我正在尝试以编程方式将计算机添加到我公司的 Active Directory 我在互联网上搜索了很长时间 但找不到解决方案 My code DirectoryEntry dirEntry new DirectoryEntry LDAP OU
  • 检查字符串是否是有效的 AD 组

    使用以下代码 我可以轻松查看提供的用户是否存在于提供的组中 public static bool IsInGroup string user string group using var identity new WindowsIdenti
  • 在 .Net 应用程序中使用 Active Directory Web 服务

    我正在尝试构建一个 Net 应用程序来询问 Active Directory 编辑 我需要使用 Web 服务来执行此操作 因为我将使用需要使用 Web 服务的第三方工作流工具从 Sharepoint 工作流与 AD 进行通信 根据我的研究
  • 带有 LDAP 身份验证的 SVN 不起作用

    我首先从我的设置开始 为此我们有 2 台服务器 Server1 将用于所有源代码 文件等 在 Server2 上 我们拥有所有用户信息和登录信息 两台服务器都运行在 Centos 6 4 上 现在我们要在 server1 上设置一个 SVN
  • 尝试绑定到 AD 用户对象时出现错误 2147463168

    我正在 Windows 2012 不是 R2 并且无法升级 AD 环境上工作 当我使用管理员 非管理员 帐户从 vbscript 运行以下代码时 它运行完美 然而 当我以普通用户运行它时 我得到一个 2147463168 这似乎是一个绑定错
  • 使用通配符的 Active Directory 查询性能较差

    我正在用 C 编写一个方法 该方法应该查询 Active Directory 并查找具有以下格式的显示名称的所有用户和组 显示名称 带有前导和尾随通配符的通配符搜索 该方法将用于自动完成字段 问题是我编写的方法的性能非常差 尝试查询 AD
  • 使用 Windows 锁定屏幕后删除 Kerberos 缓存票证

    无论如何 有没有办法阻止 Kerberos 缓存的票证在 Windows 进入锁定屏幕后被删除 首次登录 Windows 时 klist exe 显示 2 个缓存票证 但是 发生 Windows 锁屏事件后 klist exe 显示 0 个
  • 使用 JNDI 添加 LDAP 条目

    我正在尝试使用 JNDI 将条目添加到 LDAP 服务器 我可以成功地从 LDAP 服务器读取条目 但是当我尝试添加新条目时出现错误 我检查了各种方法但都失败了 private String getUserAttribs String se
  • 使用用户名进行 Java LDAP 身份验证

    好吧 这让我发疯 我正在尝试使用 Java 创建 LDAP 身份验证 如果我在 SECURITY PRINCIPAL 中使用我的名字和姓氏 一切都很好 这是我的代码 try Hashtable
  • Active Directory:如何确定帐户是否是服务帐户?

    问题 是否可以使用 C LDAP 确定帐户是否是 Active Directory 中的服务帐户 如果是 怎么办 Context 我有一个程序正在检索模式类类型 USER GROUP COMPUTER FOREIGN SECURITY PR
  • 从 php 对 Active Directory/ISA 进行身份验证 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个复杂的问题 而且由于我真的不知道从哪里开始而加剧 在过去的几年里 我开发了许多基于 php Web 的系统 当我构建它们时 我
  • 使用活动目录对 Intranet 站点上的用户进行身份验证

    我建立了一个 内联网 站点 它有自己的登录系统 用户注册为新用户 并使用其上的用户名 密码登录该站点 但是 现在我想扩展它 让 Intranet 站点使用现有的 ActiveDirectory 进行身份验证 这就是我正在寻找的 前进 当用户
  • Delphi 如何与 Active Directory 集成?

    我们需要使用 Delphi 7 验证 Microsoft Active Directory 上的用户 最好的方法是什么 我们可以有两种情况 用户输入其网络用户名和密码 其中用户名可能包括域 然后我们检查活动目录是否是有效的活动用户 或者我们
  • 使用用户身份验证的 SQL 数据库与 Active Directory 的连接字符串

    我正在连接到 Azure 服务器上的数据库 其中数据库位于不同的服务器上 并且通过选择选项 Active Directory 和用户凭据选项建立连接 它在 SQL Server 中工作 但我需要一个连接字符串来连接数据库 有什么建议如何去做
  • UserPrincipal 相当于 DirectoryEntry.Invoke?

    我正在更新与应用程序中的 AD 交互的代码 当前代码使用ActiveDs接口 我正在更改代码以使用 System DirectoryServices AccountManagement 命名空间 我们的应用程序允许用户存储密码提示 这存储在

随机推荐