问题描述
当目标基本 DN 的最低元素是组 CN(实际上不是用户/人员对象)时,有没有办法编写 LDAP 搜索过滤器字符串或基本 DN 语法来获取具有匹配 sAMAccountName
属性的用户?以前从未使用过 LDAP 查询,因此不太了解如何执行此操作。
拥有组 CN 的 AD 路径,例如...
DC=myorg,DC=local
OU=datagroups
OU=zones
CN=group1
CN=group2
...
...并且有两个参数可用于匹配登录字符串:
- 将被
python-ldap.search_s()
function 接受为OU=zones,OU=datagroups,DC=myorg,DC=local
arg 的单个基本 DN(例如base
)。 - 一个搜索过滤器字符串,用于对该基本 DN 进行操作并返回具有匹配
sAMAccountName
的单个用户/个人,该用户/个人将用作python-ldap.search_s()
function 中的filterstr
参数。默认格式为'sAMAccountName={login}'
也试过了
base_dn = OU=zones,DC=local
search_filter = (&(sAMAccountName={login})(|(memberOf=CN=zone1,OU=zones,DC=local)(memberOf=CN=zone2,DC=local)))
无济于事。
有更多经验的人知道我该怎么做吗?我似乎对这种情况有任何误解(从那以后,我不经常使用 LDAP 查询)?
解决方法
在从其他人那里了解了 LDAP 查询的工作原理之后...
基本 DN 需要找到您想要的对象而不是组。 memberOf
和 sAMAccountName
是用户对象的属性,因此您正在编写的查询是在说类似...
“搜索 OU=zones,OU=datagroups,DC=myorg,DC=local
以查找具有 {login} 的 sAMAccountName
属性和 memberOf
或 CN=zone1,OU=zones,DC=local
的 CN=zone2,DC=local
属性的任何对象”。>
组包含一个成员属性,该属性将为您提供所有用户 DN,但它们中通常不包含 sAMAccoutName,因此您需要获取每个组的所有成员,然后查找每个成员的对象属性。>
因此,我将 baseDN 更改为 DC=myorg,DC=local
以使其在整个域中搜索对象。