python - LDAP 查询过滤用户的组如 *x*
问题描述
我目前正在使用 Python 和 LDAP 来查询用户的 Active Directory。
我有一个名字列表,名字是First Last。不够具体,无法找到确切的用户。
我想要一个过滤器,它可以找到所有匹配“最后一个,第一个 *”并属于其中包含关键字的任何组的用户。
_filter = '''(& (objectclass=user) (objectcategory=person) (name={}*) )'''.format(search_string)
我试过添加......
(memberOf=CN=*Keyword*,OU=Delegated,OU=Groups,DC=amr,DC=corp,DC=xxxxxx,DC=com)
到我的过滤器,但没有成功。
如果这是 SQL,我会写如下内容:
Select *
From
Users
Where
Users.name like 'First, Last%'
and Users.memberOf like 'Keyword%'
更新:
在查看加布里埃尔的答案后,我正在运行这个。
def get_idsids(self, search_string): _filter = '''(& (objectclass=user) (objectcategory=person) (anr={}) )'''.format(search_string) # Search for user. # Will return list of users matching criteria. # The results are wrapped up as a list(tuple(dict))) where the dict vals are binary strings or lists of binary strings. users = self.con.search_s(ActiveDirUser.BASEDN, ldap.SCOPE_SUBTREE, _filter, ['displayName', 'sAMAccountName', 'memberOf']) # This line is ugly... It just converts the results to a list of ids # So long as the user has at least one group with 'Keyword' in the name. # upper() is used to make the Keyword requriement case insensitive. return [user[1]['sAMAccountName'][0].decode() for user in users if 'KEYWORD' in ''.join(map(str, user[1]['memberOf'])).upper()]
我确实想知道,我可以搜索名称中带有“关键字”的组并从中构建过滤器吗?此外,这会更快吗?我认为它会像 AD 一样散列组成员身份。
我会去做一些阅读,但我认为组名是通配符可搜索的?
解决方案
我建议你使用Ambiguous Name Resolution:
_filter = '''(& (objectclass=user)
(objectcategory=person)
(anr={}) )'''.format(search_string)
阅读该文档以了解它是如何工作的,但如果你给它一个“first last”字符串,它可以找到用户。这是 AD 用户和计算机中的搜索框使用的。
请注意,如果人们的名字相似,您可以获得双打。如果你以我的名字为例:如果你搜索“Gabriel Luci”,并且有其他人的名字是“Gabriel Luciano”,你会找到我们俩。
这个:
(memberOf=CN=*Keyword*,OU=Delegated,OU=Groups,DC=amr,DC=corp,DC=xxxxxx,DC=com)
不起作用,因为您不能在任何属性上使用通配符distinguishedName
,例如memberOf
.
无论如何,这适用于 Active Directory。其他 LDAP 目录可能允许它。
如果您需要检查用户是否是组的成员,那么您可以告诉您的搜索返回搜索中的memberOf
属性(我不知道 phython,但您应该有一种方法告诉它您想要返回哪些属性)。然后,您可以遍历memberOf
属性中的组并查找该关键字。
推荐阅读
- html - Html 媒体标签并非不惜一切代价工作
- python - 是否可以在方法中使用 self.value 作为默认参数?
- json - 从 Windows 批量读取 JSON 中的 jq.exe 输出中获取变量
- javascript - 如何包含
- 不使用 innerHTML 或 jQuery 的带有 textNode 的元素
- node.js - 发生 API 错误:在 slack 中打开模式时出现 invalid_arguments
- typescript - 通过在组件之间传递状态来关闭 Modal
- html - 在 Chrome Dev Tools 中模拟移动设备时,HTML 和 body 的大小有什么关系?
- xcode - Github Actions:xcodebuild 由于服务器指纹而失败
- reactjs - Dispatch 不是函数 useContext/useReducer React hooks
- amazon-ec2 - 客户端无法连接到 Hazelcast-jet ec2 集群