LDAP сравнивает атрибуты

#attributes #comparison #ldap

#атрибуты #сравнение #ldap

Вопрос:

Я хотел бы выполнить фильтрацию для всех объектов LDAP, где CN не равен sAMAccountName. Поэтому я написал следующий запрос, который, к сожалению, не работает и, похоже, не соответствует RFC:

(!(cn=sAMAccountName))

Кто-нибудь знает, как достичь желаемой функциональности?

С наилучшими пожеланиями, Томас

Комментарии:

1. Вопрос, похоже, не имеет смысла в том виде, в каком он был задан. Вы действительно хотите получить все записи, кроме этой? Каковы ваши фактические требования?

2. Как уже было сказано, я хочу получить все объекты (в моем случае пользователей), у которых общее имя не равно sAMAccountName. Я думал, что запрос будет (cn!=sAMAccountName), который также может быть записан как (!(cn=sAMAccountName)) … Но, видимо, я не эксперт LDAP 🙂

3. Нет, это просто возвращает все записи, где атрибут ‘cn’ не имеет значения ‘sAMAccountName’, принимаемого за литерал. Я не думаю, что вы можете написать фильтр для того, что вы хотите. В качестве имени атрибута берется только LHS.

4. Взгляните на сообщение в блоге Скотта Лоу об использовании для этого анализатора журналов .

Ответ №1:

Фильтры LDAP не позволяют использовать значение другого атрибута для сравнения фильтров. Вы должны извлечь запись и сравнить оба значения.

Ответ №2:

(!(cn=sAMAccountName)) является «совместимым с RFC», потому что правая часть утверждения принимается за значение cn атрибута.

Использование этого фильтра приведет к тому, что в ответе поиска будут возвращены все записи, в которых присутствует значение cn атрибута, и правило сопоставления для cn возвращает false значение без учета регистра samaccountname (при условии, что cn правило сопоставления атрибутов не было изменено по сравнению с опубликованным стандартом). Результаты будут зависеть от:

  • ограничение по времени сервера
  • ограничение размера сервера
  • управление доступом к серверу

Возможно, вы имели в виду использовать

  • cn=value-of-samaccount-name

Ответ №3:

Если вы работаете в среде Windows, вы можете использовать для этого язык выражений PowerShell.

 Get-ADUser -Filter * -Server my.domain.name -Properties CN |
  Where-Object {$_.CN -ne $_.sAMAccountName}
  

Это довольно дорогой запрос, потому что он возвращает каждый отдельный пользовательский объект для обработки PowerShell, но он действительно работает.