LDAP 查询过滤器用户组如 *x*

LDAP Query Filter User's with Groups Like *x*

我目前正在使用 Python 和 LDAP 查询 Active Directory 中的用户。

我有一个名字列表,名字是姓氏。不够具体,无法找到确切的用户。

我想要一个可以找到所有匹配 'Last, First*' 的用户的过滤器 并且属于其中包含关键字的任何组。

    _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%'

更新:

在查看了 Gabriel 的回答后,我 运行 这个。

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()]

但我确实想知道,我可以搜索名称中带有 'Keyword' 的组并从中构建过滤器吗?此外,那会更快吗?我假设它会因为 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 目录可能允许它。

如果你需要检查用户是否是组的成员,那么你可以告诉你的搜索return搜索中的memberOf属性(我不知道phython,但你应该有办法告诉它你想要哪些属性 returned)。然后您可以遍历 memberOf 属性中的组并查找该关键字。