В настоящее время я использую 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%'
Обновление:
После просмотра ответа Габриэля я запускаю это.
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 вероятно хэширует членство в группе.
Я пойду почитаю, но я предполагаю, что имена групп доступны для поиска по шаблону?