【问题标题】:Python ldap3 search creates an empty entryPython ldap3 搜索创建一个空条目
【发布时间】:2016-10-22 01:56:35
【问题描述】:

我的程序的第一步要求我搜索公司的活动目录并按部门查找用户列表。到目前为止,这是我的代码:

from ldap3 import Server, Connection, SUBTREE, ALL
server = Server('my.company.local', get_info=ALL)
conn = Connection(server, auto_bind=True)
conn.search('dc=my, dc=company, dc=local', '(givenName=Charles)')
print(conn.entries)

但是,无论我在 conn.search 的搜索过滤器部分中添加什么内容,在我的条目日志中都找不到任何数据。条目日志是一个空列表。当我打开 Active Directory 用户和计算机时,我可以浏览每个部门并查找名称并搜索他们的属性编辑器(是的,那里有一个 GivenName=Charles)。请指出正确的方向,为什么我没有任何想法,所以没有返回数据。谢谢。

编辑:如果相关,print(server.schema) 返回无。此外, print(conn) 返回为insert my.company.local here:389 - cleartext - user: None - not lazy - bound - open - <local: 10.5.112.213:63755 - remote: 10.5.107.41:389> - tls not started - listening - SyncStrategy - internal decoder 这让我非常确定我已连接。

【问题讨论】:

  • 没有错误?你确定你正在连接? conn 是否还有其他有趣的方法可以帮助您检查连接? “我们更喜欢可以回答的问题,而不仅仅是讨论。提供详细信息。分享您的研究。”
  • 您似乎没有向 AD 提供任何凭据。 ldap3 与 ADUC 控件不同,它似乎不会自动继承您的用户令牌。因此,您执行了与 AD 的匿名绑定,虽然它成功,但不会为您提供可以运行搜索等的上下文。基本上,您需要以某种方式提供凭据才能进行搜索。

标签: python search filter ldap


【解决方案1】:

所以 cannatag 和 ig0774 都是正确的。使用搜索功能需要提供用户凭据。否则,搜索函数将返回一个空条目列表。谢谢!

【讨论】:

    【解决方案2】:

    您没有提供用户名,因此您的连接是匿名的。尝试在连接对象中使用username="myname", password="mypassword" 进行访问。您还可以尝试使用authentication=NTLM 进行 NTLM 身份验证。 (您必须从 ldap3 包中导入 NTLM)。在这种情况下,用户名必须是 "mydomain//myname"

    【讨论】:

      【解决方案3】:

      在黑暗中拍摄,但尝试删除查询周围的括号,以便 (givenName=Charles) 变为 givenName=Charles。您确定域组件正确吗?

      【讨论】:

      • 括号是必须的。我刚检查过。我 90% 确定我的域组件是正确的,因为我的 Active Directory 用户和计算机显示的域与我在代码中输入的域相同。
      • @Crazysexman:好的,就像我说的那样,这只是在黑暗中拍摄。您是否尝试过一些您知道会返回类似(cn=*) 的结果的方法?
      • 不幸的是,我有。我想我可能以某种方式搜索了错误的域,但我不知道到底出了什么问题。
      • 所以如果你执行ldapsearch -H ldap://my.company.local:389 -x -b dc=my, dc=company, dc=local '(givenName=Charles)' 会得到预期的结果吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 2023-03-10
      • 2014-01-08
      相关资源
      最近更新 更多