Как написать запрос LDAP для проверки, является ли пользователь членом группы?

Я хочу написать запрос LDAP, который проверяет, является ли пользователь (sAMAccountName) членом определенной группы. Можно ли сделать это, чтобы получить либо 0, либо 1 результат?

Наверное, я могу получить все группы для пользователя и проверить каждый из них для соответствия, но мне было интересно, могу ли я упаковать его в одно выражение LDAP.

Есть идеи?

благодаря

Здесь вы можете создать запрос с этим фильтром:

(&(objectClass=user)(sAMAccountName=yourUserName) (memberof=CN=YourGroup,OU=Users,DC=YourDomain,DC=com)) 

и когда вы запускаете это на своем LDAP-сервере, если вы получите результат, ваш пользователь «yourUserName» действительно является членом группы «CN = YourGroup, OU = Users, DC = YourDomain, DC = com

Попробуйте посмотреть, работает ли это!

Если вы используете C # / VB.Net и System.DirectoryServices, этот fragment должен сделать трюк:

 DirectoryEntry rootEntry = new DirectoryEntry("LDAP://dc=yourcompany,dc=com"); DirectorySearcher srch = new DirectorySearcher(rootEntry); srch.SearchScope = SearchScope.Subtree; srch.Filter = "(&(objectClass=user)(sAMAccountName=yourusername)(memberOf=CN=yourgroup,OU=yourOU,DC=yourcompany,DC=com))"; SearchResultCollection res = srch.FindAll(); if(res == null || res.Count <= 0) { Console.WriteLine("This user is *NOT* member of that group"); } else { Console.WriteLine("This user is INDEED a member of that group"); } 

Осторожно: это будет проверяться только на непосредственное членство в группах, и оно не будет проверять членство в так называемой «первичной группе» (обычно «cn = Пользователи») в вашем домене. Он не обрабатывает вложенные членства, например, Пользователь А является членом Группы А, который является членом Группы В, - тот факт, что Пользователь А действительно является членом Группы В, также не находит отражения здесь.

Марк

Если вы используете OpenLDAP (то есть slapd), который является общим для серверов Linux, тогда вы должны включить элемент overlay для сопоставления с фильтром, используя атрибут (memberOf = XXX).

Кроме того, после включения оверлея он не обновляет атрибуты memberOf для существующих групп (вам нужно будет удалить существующие группы и снова добавить их обратно). Если вы включили оверлей, когда firebase database была пуста, вы должны быть в порядке.

Я добавлю еще один ответ Марку: атрибут memberOf не может содержать подстановочные знаки, поэтому вы не можете сказать что-то вроде «memberof = CN = SPS *» и ожидать, что он найдет все группы, начинающиеся с «SPS».

Вы должны установить базу запросов в DN соответствующего пользователя, а затем установить свой фильтр в DN группы, о которой вы задаетесь вопросом, являются ли они членами. Чтобы узнать, является ли jdoe членом группы, тогда ваш запрос будет выглядеть примерно так:

 ldapsearch -x -D "ldap_user" -w "user_passwd" -b "cn=jdoe,dc=example,dc=local" -h ldap_host '(memberof=cn=officegroup,dc=example,dc=local)' 

Если вы хотите видеть ВСЕ группы, в которых он участвует, просто запросите только атрибут ‘memberof’ в вашем поиске, например:

 ldapsearch -x -D "ldap_user" -w "user_passwd" -b "cn=jdoe,dc=example,dc=local" -h ldap_host **memberof** 
  • LDAP: код ошибки 49 - 80090308: LdapErr: DSID-0C0903A9, комментарий: Ошибка AcceptSecurityContext, данные 52e, v1db1
  • Добавление и удаление пользователей из групп Active Directory в .NET.
  • Как получить список пользователей Linux из LDAP
  • Невозможно установить соединение с ldap
  • Давайте будем гением компьютера.