Логическое выражение фильтра LDAP максимальное количество аргументов

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

Запрос выглядит так:

(| (clientid=1) (clientid=2) (clientid=3) ...)

Когда количество клиентов превышает 2103?! сервер LDAP выдает ошибку:

error code 1 - Operations Error

Насколько я могу судить, фактическая длина строки фильтра не имеет значения ~ 69 КБ (по крайней мере, для Microsoft AD ограничение длины составляет 10 МБ). Я пробовал использовать более длинные имена атрибутов и получил то же странное ограничение: 2103 операнда.

  1. Кто-нибудь знает больше об этом ограничении?
  2. Это что-то указано в спецификации протокола LDAP или зависит от реализации?
  3. Это настраивается?

Я проверил это на IBM Tivoli Directory Server V6.2, используя оба UnboundID и JNDI Java библиотеки.


person Dan Manastireanu    schedule 18.05.2012    source источник
comment
Проверьте максимальный размер BER, который принимает сервер.   -  person Terry Gardner    schedule 18.05.2012


Ответы (1)


Он не может быть больше 8099 символов. См. http://www-01.ibm.com/support/docview.wss?uid=swg21295980

Кроме того, то, что вы делаете, не является хорошей практикой. Если у этих записей есть общие атрибуты (например, код страны, номер отдела, местоположение и т. д.), попробуйте получить результаты, используя общие критерии, заданные этими атрибутами. Если нет, разделите поисковый фильтр на более мелкие, каждый из которых имеет несколько предикатов, и выполните несколько поисков. Это зависит от языка программирования, который вы используете для этого, но старайтесь выполнять каждый поиск в отдельном потоке, чтобы ускорить процесс поиска данных.

person Bora    schedule 24.05.2013