Механизм "известных объектов" ("well-known objects") для надежного нахождения важных записей в Active Directory
Как известно, любую запись в Active Directory можно найти по ее различающемуся имени (DN) или уникальному GUIDу.Существует немалое количество популярных записей, часто используемых приложениями - например, контейнер CN=Computers,DC=BQSNLF-dom,DC=com. Часто при написании приложений люди "строят" такие адреса путем конкатенации различающегося имени домена и фиксированной строки типа "CN=Computers," + <domain DN>. Этот способ работает почит всегда. Но Active Directory позволяет переименовывать или переносить некоторые из этих контейнеров, и тогда приложение перестает работать.
Для того, чтобы приложение могло по-прежнему находить перенесенный контейнер, в Active Directory существует механизм специальных указателей, так называемых "известных объектов" (well-known objects). Эти указатели "живут" в атрибутах wellKnownObjects и otherWellKnownObjects на фиксированных объектах (типа домена или конфигурационного контейнера), и представляют собой комбинацию из GUID и различающегося имени. Вот, например, как выглядит такой указатель на контейнер Computers:
Dn: DC=BQSNLF-dom,DC=com
1> wellKnownObjects: B:32:AA312825768811D1ADED00C04FD8D5CD:CN=Computers,DC=BQSNLF-dom,DC=com;
Для того, чтобы гарантированно найти этот контейнер, нужно выполнить следующий запрос в Active Directory: <WKGUID=AA312825768811D1ADED00C04FD8D5CD,DC=BQSNLF-dom,DC=com>.
Как видите, это не совсем стандартное различающееся имя. Префикс WKGUID говорит о том, что необходимо заглянуть в специальные атрибуты-указатели; далее идет значение GUID, соответствующее контейнеру Computers (этот GUID был выбран разработчиками этого контейнера), а далее идет различающееся имя объекта, на котором эти атрибуты-указатели хранятся.
При этом если контейнер будет переименован или перемещен, то этот "указатель" автоматически обновится и WKGUID-запрос его легко найдет.
Данный механизм используется в Exchаnge 2007 для нахождения Универсальных групп, существующих в единственном экземпляре. По умолчанию эти группы создаются на этапе подготовки леса в корневом домене. Но поскольку некоторые администраторы Exchange стремятся держать корневой домен "в чистоте" (а некоторые вообще блокируют к нему доступ), то мы поддерживаем перемещение этих групп в другой домен. Указатели на эти группы зранятся в атрибуте otherWellKnownObjects на контейнере Microsoft Exchange:
Dn: CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=BQSNLF-dom,DC=com
5> otherWellKnownObjects:
B:32:9C5B963F67F14A4B936CB8EFB19C4784:CN=ExchangeLegacyInterop,OU=Microsoft Exchange Security Groups,DC=BQSNLF-dom,DC=com;
B:32:DC1301662F547445B9C490A52961F8FC:CN=Exchange View-Only Administrators,OU=Microsoft Exchange Security Groups,DC=BQSNLF-dom,DC=com;
B:32:0BD898D939081042B77BF4A555E07FA1:CN=Exchange Recipient Administrators,OU=Microsoft Exchange Security Groups,DC=BQSNLF-dom,DC=com;
B:32:354B603D92D95541AAFD8C0AE688EA0F:CN=Exchange Organization Administrators,OU=Microsoft Exchange Security Groups,DC=BQSNLF-dom,DC=com;
B:32:A7D2016C83F003458132789EEB127B84:CN=Exchange Servers,OU=Microsoft Exchange Security Groups,DC=BQSNLF-dom,DC=com;
Соответственно, для того, чтобы гарантированно найти, скажем, группу Exchange Organization Administrators, необходимо выполнить такой запрос (GUID этот одинаков для всех инсталляций Exchange):
<WKGUID=354B603D92D95541AAFD8C0AE688EA0F,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=BQSNLF-dom,DC=com>
Так и поступают все компоненты Exchange 2007. Я рекомендую использовать этот способ при написании приложений, которые должны надежно работать с Exchange 2007 (или просто приложений для Active Directory).