Фильтр Ldap "> =" не работает для дефисов в Active Directory - PullRequest
0 голосов
/ 03 мая 2019

У нас есть следующие 3 значения в extensionattribute1 пользователей:

  • -1000
  • -7
  • * Полдень * 12

Этот фильтр LDAP выбирает только пользователей, которые имеют 3-е значение в extensionattribute1,

extensionattribute1 >= *Noon*12

AD выполняет лексический поиск, и он должен получать всех пользователей, которые имеют все вышеупомянутые 3 значения.

Мы пытаемся найти причину такого поведения Active Directory. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 08 мая 2019

Символ * является подстановочным знаком.Поэтому, если вы хотите использовать его в качестве литерала (в качестве фактического * символа в значении), вам следует избегать его:

extensionattribute1 >= \2ANoon\2A12

Подробнее здесь: https://social.technet.microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-filters.aspx#Special_Characters

Тем не менее, я не думаю, что это ваша проблема здесь.

Правила того, что означает "лексикографический" для нашей эры, не разъяснены ни в одной документации, которую я смог найти.В общем, это означает «алфавитный порядок».Это отлично подходит для текста, но что это означает для символов, совершенно неясно.Он определенно не всегда использует свою позицию в таблице Unicode .

Я провел некоторое собственное тестирование.Он оценивает период (.) выше запятой (,), как и следовало ожидать от их позиций в таблице Unicode.Но дефис, который находится между точкой и запятой в таблице, AD, кажется, оценивается очень, очень низко.Это всегда меньше, чем почти все.Я могу искать значения меньше пробела (<=\20), и они будут соответствовать дефису.

Итак, короткий ответ: вы не можете делать то, что пытаетесь сделать.Использование >= не даст вам ожидаемых результатов.

Однако вы можете использовать сравнение ИЛИ, чтобы найти все три из этих значений, если это единственные три значения, которые вы хотите найти:

(|(extensionattribute1=\2ANoon\2A12)(extensionattribute1=-1000)(extensionattribute1=-7))
...