#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, но он действительно работает.