Пределы отображения в MMC и ограничения на размер буфера поиска можно обойти

Чем больше работаешь с Active Directory (AD), тем выше вероятность столкнуться с ограничениями, налагаемыми самой AD или интерфейсом администрирования. Ограничения служат в основном для повышения производительности AD и слабо связаны с числом объектов. Например, максимально допустимое число учетных записей пользователей в домене Windows NT составляет 40 000, а в домене AD может находиться огромное количество учетных записей. Я не знаю, каков абсолютный максимум, но в инфраструктуре AD Korea.com (Internet-портал, предоставляющий разнообразные Web-службы гражданам Кореи) насчитывается 8 млн. учетных записей пользователей. В данной статье рассматриваются некоторые типичные ограничения AD и даются рекомендации по преодолению связанных с ними проблем.

Предел отображения папки в MMC

При использовании оснастки Active Directory Users and Computers консоли управления Windows 2000 Microsoft Management Console (MMC) для отображения содержимого организационной единицы (OU) или контейнера, в котором находится более 2000 объектов, на экране появляется сообщение об ошибке. В нем говорится, что AD не может отобразить все объекты, и дается инструкция по изменению стандартного режима. Пользователи Windows Server 2003 получают более информативное сообщение, в котором указываются предел и число выводимых на экран объектов AD.

Чтобы изменить стандартный предел отображения, следует перейти в меню View, Filter Options и изменить параметр Maximum number of items displayed per folder. Данное ограничение является обоснованным: для отображения OU, содержащей более 30 000 объектов, может потребоваться много времени.

Размер буфера поиска

Преодолев принимаемый по умолчанию предел в 2000 объектов отображения, можно наткнуться на другое препятствие при попытке вывести на экран содержимое OU, число объектов в которой превышает 10 000. Ограничение связано со стандартным размером поискового буфера AD, применяемого некоторыми инструментами пользовательского интерфейса (в том числе оснасткой Active Directory Users and Computers). В буфере хранятся результаты запросов, и по умолчанию, в целях повышения производительности, число объектов в нем ограничено 10000.

В статье Microsoft «Controlling the Active Directory Search Buffer Size» (http://support.microsoft.com/?kbid=243281) описано два способа изменить стандартный параметр. Первый из них заключается в изменении параметра реестра. Раздел реестра HKEY_CURRENT_USERSoftwarePoliciesMicrosoft WindowsDirectory UI следует дополнить новым параметром QueryLimit типа DWORD. Параметру QueryLimit нужно присвоить значение, соответствующее оптимальному размеру буфера. Если разделы Windows и Directory UI отсутствуют, их необходимо создать.

Второй метод также состоит в изменении параметров реестра, но делается это с помощью групповой политики. Следует открыть объект Group Policy Object (GPO), который предстоит редактировать (например, Default Domain Policy). В панели с деревом объектов требуется перейти к User Configuration, Administrative Templates, Desktop, Active Directory. Затем следует активизировать политику Maximum size of Active Directory searches и установить нужное значение параметра.

Я рекомендую второй подход, так как он исключает ошибки при введении значений реестра. Кроме того, иногда возникают неполадки при использовании первого метода в сочетании с функцией Run As и выделенными административными учетными записями. Параметр реестра не действует на учетные записи, заданные с помощью Run As, вероятно, потому, что на указанную учетную запись не распространяется действие параметров из ветви HKEY_CURRENT_USER. Если требуется использовать Run As после применения второго метода (GPO), то для активизации параметра Group Policy необходимо выполнить обычную процедуру регистрации Windows, по крайней мере один раз для каждой учетной записи, которую планируется указать с помощью Run As.

Любопытно, что параметр (при использовании любого метода) успешно работает с оснасткой Active Directory Users and Computers, но, похоже, совершенно не действует в оснастке MMC Active Directory Service Interfaces (ADSI) Edit. Мне не удалось найти способ использовать ADSI Edit для отображения более 10 000 объектов.

Максимальный размер страницы LDAP

Как известно, AD поддерживает упрощенный протокол доступа к каталогам LDAP (Lightweight Directory Access Protocol) версии 3.0. Благодаря совместимости LDAP и AD поиск в каталоге можно вести из LDAP-совместимого клиента. Для защиты от атак DoS (Denial of Service — отказ в обслуживании) и поисковых операций, которые могут отрицательно повлиять на производительность, максимальный размер страницы при передаче результатов запроса LDAP не должен превышать 1000. Другими словами, AD возвращает одновременно не более 1000 записей в ответ на запрос LDAP. Например, если провести поиск всех пользовательских объектов домена в поддереве LDAP, то будет получено 1000 записей и сообщение об ошибке Size Limit Exceeded (если в домене имеется более 1000 пользовательских объектов).

Данное ограничение можно обойти двумя способами. Первый — изменить максимальный размер страницы с компьютера-клиента; второй — изменить политику LDAP MaxPageSize на контроллерах доменов (DC), повысив порог. Лучше выбрать первый способ, не связанный с политикой LDAP. Пользователи и приложения все чаще применяют AD, и вероятность неэффективности запросов LDAP повышается. Ограничение максимального размера страницы защищает AD от неэффективных запросов. Главная опасность изменения политики заключается в снижении производительности DC. Более подробно об изменениях политик LDAP рассказано в статье Microsoft «HOW TO: View and Set Lightweight Directory Access Protocol Policies by Using Ntdsutil.exe in Windows 2000» (http://support.microsoft.com/?kbid=315071).

Один из способов определения максимального размера страницы на клиенте LDAP заключается в использовании LDAP-клиента ldp.exe из вспомогательного инструментального комплекта Windows 2003 или Windows 2000. Для этого необходимо выполнить следующие действия.

  • Открыть ldp.exe.
  • Установить соединение и подсоединиться к каталогу. Для этого нужно щелкнуть на пункте меню Connection, а затем щелкнуть на Connect. Требуется ввести имя DC, с которым устанавливается соединение, в формате FQDN (Fully Qualified Domain Name - полное доменное имя), например dc1.mydomain.com, или просто оставить поле пустым, если требуется подключиться к ближайшему DC в выбираемом по умолчанию домене, а затем щелкнуть на кнопке OK. Чтобы связать LDAP с DC, следует щелкнуть на функции Bind в меню Connection, ввести информацию о пользователе, пароле и домене, используя для этого учетную запись домена с соответствующими полномочиями (как правило, подходит обычная учетная запись пользователя), и щелкнуть на кнопке OK. Затем необходимо щелкнуть на кнопках Browse и Search.
  • Наконец, нужно щелкнуть на кнопке Options и изменить параметры, показанные на экране 1.
Экран 1. Установка размера страницы на клиенте LDAP

На экране 1 видно, что я изменил параметр Search Call Type со стандартного значения Sync. на Paged. В результате DC будет возвращать все результаты поиска группами, задаваемыми параметром Page size, и ограничение в 1000 записей будет устранено. На данном этапе возможна терминологическая путаница. Политика LDAP контроллера домена называется MaxPageSize. Эта политика не имеет отношения к параметру Page size клиента LDAP. Значение MaxPageSize представляет собой просто максимальное число записей, возвращаемых сервером. Параметр Page size в примере с ldp.exe указывает, что сервер должен передавать результаты группами по 16 (по умолчанию). Изменять стандартное значение не нужно. Я присвоил параметру Timeout (s) значение 60. По моему опыту, такое значение позволяет избежать задержки при использовании страничного обмена. Кроме того, параметру Attributes присвоено новое значение 1.1. Данный параметр блокирует передачу атрибутов контроллером домена. По умолчанию DC все же возвращает в результатах атрибут distinguishedName.

Администраторам, испытывающим особенный интерес к LDAP, следует знать, что ldp.exe задает размер страницы, активизируя элемент управления LDAP pagedResultsControl. Более подробно применение этого элемента управления LDAP описано в подготовленном Internet Engineering Task Force (IETF) документе Request for Comments (RFC) 2696 (http://www.ietf.org/rfc/rfc2696.txt).

Еще один способ задания размера страницы — использовать объекты ActiveX Data Objects (ADO) в сценарии VBScript. В листинге 1 показан сценарий, который выполняет поиск во всех учетных записях пользователей в домене. Если параметр Page size не применяется, а число пользователей превышает 1000, то работа сценария завершится неудачно. Как и в примере с ldp.exe, указание конкретного размера страницы заставляет сервер возвращать результаты группами в обход барьера в 1000 записей. Для запуска сценария необходимо создать новый файл (например, PageSize.vbs), отредактировать исходный текст, отмеченный меткой A, в листинге 1, указав конкретное имя домена, а затем сохранить файл. Открыв командную строку, следует перейти в каталог, в котором сохранен файл, и ввести следующие команды:

cscript PageSize.vbs

Ограничения на членство в группе

Администраторам средних и крупных предприятий приходится сталкиваться с ограничением в 5000 членов группы в Windows 2000 Server AD. Данный порог задан не жестко, а представляет собой приблизительное значение. Ограничение введено, потому что механизм базы данных AD, Jet, не может выполнять операции записи больше определенного размера при сохранении и репликации данных. Для обхода этого ограничения в Windows 2003 AD используется механизм LVR (Linked Value Replication — репликация связанных значений). В результате применения LVR при изменениях членства группы AD реплицирует отдельные значения в атрибуте члена, а не все значение целиком. Помимо устранения барьера в 5000 членов, этот метод репликации, несомненно, куда более эффективен в отношении использования как сетевых каналов связи, так и ресурсов DC.

В действительности ограничение в 5000 членов применяется не только к членству в группах внутри AD, но и к любым связанным атрибутам. Однако в большинстве организаций проблемы возникают именно с членством в группах. К атрибуту члена обращаются как к связанному, поскольку у него есть соответствующий атрибут memberOf. Например, в группе Sales имеются значения атрибута членов Tom, Dick и Harry. Если взглянуть на объекты Tom, Dick и Harry в AD, то видно, что каждый из них имеет атрибут memberOf со значением, включающим группу Sales. Другие примеры связанных атрибутов — атрибуты manager и directReports.

Единственный метод обхода ограничений членства в Windows 2000 AD предполагает использование вложенных групп. Для вложения группы необходимо разделить на более мелкие группы, а затем сделать их членами родительских групп. Вложение усложняет структуру организации, так как увеличивается общее количество групп для управления.

Размер маркера Kerberos

Аутентификация Kerberos по умолчанию используется в Windows 2000 и более новых версиях операционной системы. Если учетная запись пользователя является членом многих групп (в том числе вложенных), то могут возникнуть трудности с ее аутентификацией. Проблемы аутентификации могут проявляться по-разному — например, в медленных или неудачных процедурах регистрации на удаленной машине, невозможности применить групповую политику или ошибках при подключении компьютера к домену. В данном случае причиной ограничения стал способ, который используется системами, участвующими в аутентификации Kerberos (например, файл-сервер Windows 2000, Microsoft IIS), чтобы назначить маркер для доступа к ресурсам.

При назначении маркеров система указывает SID пользователя и идентификаторы SID всех групп безопасности, к которым принадлежит пользователь. При использовании вложенных групп число SID может резко возрасти и маркеры могут оказаться слишком малы, чтобы обработать их все. Маркеры имеют фиксированный размер, который указан в параметре реестра HKEY_LOCAL_ MACHINESYSTEMCurrentControlSetControlLsa KerberosParametersMaxTokenSize. Если учетные записи пользователей и связанные с ними группы перенесены из другого домена, то добавление предыстории SID может усугубить проблему размера маркеров, увеличив число SID.

При каком количестве групп могут возникать подобные проблемы? Ответить на этот вопрос нелегко, потому что на максимальный размер маркера влияют как параметр реестра MaxToken Size, так и версия пакета обновлений, установленного на системе, назначающей маркер. В Windows 2000 Service Pack 1 (SP1) и предшествующих пакетах предел составляет от 70 до 80 групп; в Windows 2000 SP2 и более поздних пакетах может быть около 120 групп. Windows 2000 SP4 и Windows 2003 обеспечивают оптимальное решение проблемы на уровне DC, хотя в некоторых случаях размер маркера может все же оказаться недостаточным. В этих редких случаях Microsoft предлагает формулу для расчета нужного значения параметра MaxTokenSize. Более подробную информацию об этой формуле, решающей проблему для слишком многочисленных групп, и параметре MaxTokenSize можно найти в статье Microsoft «New Resolution for Problems That Occur When Users Belong to Many Groups» (http://support.microsoft.com/?kbid=327825). Простого решения проблемы не существует, но, как правило, ее можно обойти, применив в лесу AD новейший пакет обновлений. В крайнем случае придется проводить расчеты по формуле из статьи Microsoft.

Полезные ограничения

Определенные ограничения будут присущи AD и связанным с ней инструментам всегда. Эти ограничения введены не для того, чтобы испортить жизнь пользователям; их цель — защитить AD от некорректного применения и повысить производительность систем. Зная ограничения и способы их обойти, можно значительно уменьшить число досадных недоразумений и более тщательно разобраться в механизмах AD.

Тони Мюррей-Смит (tony@activedir.org) - специалист по службам каталогов и почтовым системам, поддерживает сайт ActiveDir.org. Имеет звание MVP и сертификат MCSE.


Литература

Статьи Microsoft

Controlling the Active Directory Search Buffer Size

http://support.microsoft.com/?kbid=243281.

HOW TO: View and Set Lightweight Directory Access Protocol Policies by Using Ntdsutil.exe in Windows 2000

http://support.microsoft.com/?kbid=315071.

New Resolution for Problems That Occur When Users Belong to Many Groups

http://support.microsoft.com/?kbid=327825.

Документы REQUEST FOR COMMENTS (RFC) Internet Engineering Task Force (IETF) RFC 2696

http://www.ietf.org/rfc/rfc2696.txt


Листинг 1. Сценарий для задания размера страницы

set objCommand = CreateObject("ADODB.Command")
set objConnection = CreateObject("ADODB.
Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
objCommand.ActiveConnection = objConnection
strBase = ";"
strFilter = "(&(objectClass=user)
(objectCategory=Person));"
strAttrs = "distinguishedName;"
strScope = "subtree"
objCommand.Properties("Page Size") = 10
objCommand.CommandText = strBase
 & strFilter & strAttrs & strScope
set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
while Not objRecordSet.EOF
Wscript.Echo objRecordSet.Fields(0).Value
objRecordSet.MoveNext
wend