Сегодня корпоративным специалистам по информационным технологиям приходится держать под контролем огромное количество данных, с которыми работают пользователи, причем ко всем этим данным нужно обеспечивать доступ. В качестве центрального хранилища таких данных можно использовать объекты и атрибуты встроенной в Windows 2000 службы Active Directory (AD). Как известно, стандартное определение каталога AD - схема - подразумевает стандартный набор классов объектов, а также такие атрибуты, как имя, телефонный номер и почтовый адрес. Установив пакет Microsoft Exchange 2000 Server, мы получаем возможность использовать много новых атрибутов, в том числе 15 расширений атрибутов, в которых можно хранить дополнительную информацию.

Дело в том, что стандартных атрибутов и расширенных атрибутов сервера Exchange 2000 бывает недостаточно для удовлетворения информационных потребностей предприятия или прикладной программы. Упомянутые расширенные атрибуты могут содержать по одному значению, тогда как приложению иногда требуется, чтобы в атрибуте хранилось несколько значений (к примеру, массив).

Кроме того, синтаксис атрибутов зачастую налагает ограничения на тип информации, которая может храниться в том или ином атрибуте. Простой пример. Допустим, вам нужно заложить в AD паспортные данные сотрудников. Если вы установили пакет Exchange 2000, задачу можно решить с помощью расширения, однако синтаксис расширенного атрибута предусматривает ввод данных в формате строки Unicode, так что ввести численное значение номера документа может оказаться нелегко.

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

Что такое контекст именования?

Как показано на Рисунке 1, служба AD содержит три контекста именования: (naming contexts, NCs): контекст именования домена (Domain NC), контекст именования конфигурации (Configuration NC) и контекст именования схемы (Schema NC). Каждому контексту отводится своя роль и соответствующая область тиражирования.

Контекст именования домена. В контексте именования домена, который иначе называется принимаемым по умолчанию контекстом именования (Default NC), содержатся все данные домена AD; система Windows 2000 тиражирует этот контекст только на контроллеры домена (DC), принадлежащие данному домену. Контекст именования домена в верхнем дереве доменов леса AD можно также называть корневым контекстом именования, Root NC, но во всех прочих отношениях он будет проявлять себя как обычный контекст именования домена Domain NC.

Контекст именования конфигурации. Этот контекст содержит ключевые объекты инфраструктуры AD (такие, как контроллеры доменов, узлы, подсети, ссылки на узлы и другие объекты конфигурации). Контекст именования конфигурации четко указывает на топологию соответствующего леса AD; система Windows 2000 реплицирует данный контекст в пределах всего леса.

Контекст именования схемы. Этот контекст, являющийся своего рода метаконтекстом именования, определяет все объекты и атрибуты AD. Windows 2000 тиражирует контекст именования схемы в пределах всего леса.

Чтобы просмотреть содержимое какого-либо контекста именования, можно воспользоваться оснасткой ADSI Edit консоли управления Microsoft Management Console (MMC). Эту программу вы найдете на компакт-диске Windows 2000 Server в папке \upport\tools. На Рисунке 2 показано, как оснастка ADSI Edit отображает содержимое контекста именования схемы.

С помощью данного средства можно также исследовать взаимосвязи различных объектов AD, хотя для этой цели больше подходит оснастка Active Directory Schema консоли MMC, показанная на Рисунке 3. В окне оснастки отображаются два контейнера: контейнер Classes (в нем содержатся объекты classSchema) и контейнер Attribtes (в нем содержатся объекты attributeSchema). Важно иметь в виду, что оснастка Active Directory Schema по умолчанию не вызывается. Чтобы зарегистрировать ее в системе, откройте окно командной строки и введите

regsvr32 %systemroot%\system32\schmmgmt.dll

Терминология, используемая корпорацией Microsoft для описания содержимого контекста именования схемы, может показаться довольно сложной. Поэтому вы должны быть уверены, что термины объект (object), атрибут (attribute), класс (class) и экземпляр (instance) вы понимаете правильно.

О классах

Каждый объект AD в контексте именования домена или в контексте именования конфигурации представляет собой пример, или экземпляр объектного класса (object class). Так, объект User представляет собой экземпляр класса user; а объект Computer, соответственно, экземпляр класса computer. Класс описывает объект AD и ассоциированные с ним свойства, или атрибуты, необходимые для формирования экземпляра объекта данного класса (т.е. обязательные атрибуты), либо те, которые могут присутствовать в экземпляре класса (т.е. факультативные атрибуты). Контекст именования схемы содержит определения всех классов и атрибутов, имеющихся в других контекстах именования AD. Но дело осложняется тем, что служба AD предусматривает хранение этих определений, которые в данном случае именуются объектами.

Таким образом, следует постоянно иметь в виду различие между объектом, который является экземпляром класса (это может быть, скажем, экземпляр объекта контекста именования конфигурации или контекста именования домена), и объектом, который является определением класса или атрибута (это может быть объект схемы в контексте именования схемы). Объекты схемы делятся на две категории: объекты classSchema определяют классы, а объекты attributeSchema - атрибуты. Каждый атрибут имеет лишь одно определение, но может использоваться с несколькими различными классами.

Представьте себе, что вы создаете объект User с именем James Bond. Этот объект является экземпляром класса user, и контекст именования схемы определяет его с помощью особого объекта classSchema, именуемого user. Служба AD сохраняет регистрационное имя объекта James Bond (пусть это будет имя BondJ), в атрибуте, именуемом SAMAccountName, определяемом контекстом именования схемы через особый объект attributeSchema, называемый SAMAccountName. Объект user категории classSchema определяет связь между объектом SAMAccountName и классом user. Вернее, объект SAMAccoutName представляет собой имя объекта attributeSchema, отображаемое при использовании протокола Lightweight Directory Access Protocol, или LDAP. Фактическое же имя объекта хранится в его атрибуте common name (cn) именуемом SAM-Account-Name.

Определение объектов: объекты категории classSchema

Объекты контекста именования схемы, относящиеся к категории classSchema, содержат определения классов. В этих определениях заключены следующие сведения:

правила, определяющие, где можно создавать объекты AD (например, в организационной единице (organizational unit, или OU), взаимосвязи, или производные классы, между объектами classchema (например, родительский класс данного класса, именуемый суперклассом (superclass)), отношения между атрибутами и объектами категории classSchema, в частности, обязательные и факультативные атрибуты класса.

В Таблице 1 приведены обязательные и факультативные атрибуты, обычно используемые службой AD при создании объектов classSchema (с полным списком имеющихся атрибутов можно ознакомиться в Microsoft Developer Network-MSDN по адресу http://msn.microsoft.com/library/psdk/adsi/ glschema3_88fn.htm). Каждый объект classSchema относится к одной из трех категорий классов: абстрактная (abstract), вспомогательная (auxiliary) и структурная (structural).

Абстрактные классы. Объекты classSchema (иначе говоря, классы), относящиеся к абстрактной категории, выступают в качестве формальных параметров-заполнителей; эти классы нельзя использовать для создания экземпляра объекта в другом контексте именования AD. В службе AD абстрактные классы используются главным образом как родительские классы других классов, или суперклассы, так что администратор может создавать иерархическую структуру из объектных классов и определять систему наследования атрибутов между классами (в атрибуте subClasOf каждого класса хранится имя его суперкласса). Хотя наследование и не является прерогативой абстрактных классов, это именно то качество, из-за которого данные классы используются. Значение атрибута objectClassCategory абстрактных объектов classSchema равно 2.

Вспомогательный класс. Вспомогательные объекты classSchema подобны абстрактным классам в том, что они тоже не используются для создания экземпляров объектов AD. Вспомогательные классы напоминают файлы include и заголовочные файлы; с помощью этой категории классов можно включать набор из нескольких атрибутов в определение другого класса. Атрибуты systemAuxiliaryClass и auxiliaryClass являются атрибутами, которые способны содержать несколько значений (multivalue attributes). Иными словами, одному объекту classSchema можно поставить в соответствие множество вспомогательных классов. Атрибут с одним значением (single-value attribute) может содержать только одно значение, тогда как атрибут со множеством значений может содержать несколько значений.

При установке пакета Exchange 2000 в лесу AD программа установки Exchange 2000 Setup дополняет схему AD множеством новых классов. Некоторые из них относятся к категории вспомогательных классов и определяют атрибуты, которые используются только в Exchange 2000. Принадлежащие объекту classSchema атрибуты systemAuxiliaryClass или auxiliaryClass определяют объекты любого применимого вспомогательного класса. Значение атрибута objectClassCategory вспомогательных классов равно 3.

Структурный класс. Это единственный тип класса, с помощью которого можно создавать экземпляры объектов в других контекстах именования службы AD. Определения классов, внутри которых могут располагаться созданные экземпляры класса, определяемого объектами classSchema, содержатся в атрибутах systemPossSuperiors и possSuperiors. Так, принадлежащий классу user атрибут systemPossSuperiors определяет класс organizationalUnit в качестве возможного контейнера для экземпляров класса user, поэтому объект User можно создавать в экземпляре класса organizationalUnit. Эти определения известны как правила реализации (instantiation rules). Значение атрибута objectClassCategory структурных объектов classSchema равно 3.

На Рисунке 4 показано, как взаимодействуют три описанных типа классов. Вверху расположен абстрактный объект категории classSchema, который является суперклассом по отношению к абстрактному объекту Person категории classSchema. Person, в свою очередь, выступает в роли суперкласса по отношению к абстрактному объекту organizationaPerson, принадлежащему категории classSchema. Последний объект является суперклассом класса user (т.е. объекта user категории clssSchema). Наконец, объект user категории classSchema представляет собой структурный объект класса, определяющий объекты User (иными словами, экземпляры класса user).

Класс user наследует атрибуты своих суперклассов (см. Рисунок 4), равно как и различных вспомогательных классов. Каждый объект имеет набор обязательных атрибутов и набор факультативных атрибутов. Атрибуты systemMustContain и mustContain объекта категории classScema определяют его обязательные атрибуты, тогда как в атрибутах systemMayContain и mayContain объекта категории classSchema записаны факультативные атрибуты данного объекта. Оснастка ADSI Edit не дает возможности увидеть определенное значение для атрибутов systemMustContain и mustContain класса user. Это не означает, что у класса user нет обязательных атрибутов. Класс user наследует обязательные атрибуты своих суперклассов (скажем, класса Person) и вспомогательных классов (например, класса mailRecipient).

Определение атрибутов: объекты attributeSchema

Объекты attributeSchema контекста именования схемы определяют атрибуты, предусмотренные в службе AD. Так же, как и объекты категории classSchema, все объекты типа attributeSchema имеют наборы атрибутов, в которых определены их характеристики. В Таблице 2 описаны обязательные и факультативные атрибуты, которые используются службой AD при создании объекта attributeSchem. С полным их списком можно ознакомиться на узле MSDN по адресу http://msdn.microsoft.com/library/psdk/adsi/ glschema3_92yb.htm.

Каждый атрибут схемы AD имеет заранее заданный синтаксис, определяющий тип информации, который может храниться в данном атрибуте. Например, телефонные номера хранятся в атрибутах иначе, нежели двоичные значения или строки. Синтаксис атрибута atributeSyntax объекта attributeSchema определяется с помощью идентификатора объектов Object Identifier (OID), а для определения синтаксиса атрибута oMSyntax того же объекта применяется обозначение объектной модели X/Open (X/Open Object Model). Атрибут объекта oMObjectClass тоже описывает его синтаксис, правда, в другой форме.

Значение атрибута oMSyntax всегда равно 127 (это значение свидетельствует о том, что синтаксис указывает на тип данных «объект»). Необходимо следить за тем, чтобы атрибут oMObjectClass объекта отображал корректное значение для избранного синтаксиса, как показано в Таблице 3. В этой таблице перечислены все возможные синтаксические конструкции, а также соответствующие идентификаторы объектов OID, атрибуты oMSyntax и значения атрибута oMObjectClass. На момент подготовки данной статьи возможность добавления новых синтаксических конструкций службой AD не предусмотрена.

Уникальные описания

Каждый класс AD и каждый атрибут должны быть уникальны, поэтому каждому определению класса и атрибута нужно назначать уникальный идентификатор OID. Идентификатор представляет собой строку из десятичных чисел, разделенных точками - так же, как в IP-адресах (В Таблице 4 показаны OID нескольких объектных классов). OID объекта classSchema помещается в его атрибуте governsID, а идентификатор OID объекта attributeSchema - в атрибуте attributeID.

Эти идентификаторы назначаются центром регистрации имен (Name Registration Authority) Международной организации по стандартизации (International Organization for Standardizatin, ISO). Более подробную информацию можно найти по адресу http://eb.ansi.org/public/services/reg_org.html или http://www.iso.ch/memers/index.html.

Используемая в идентификаторах OID цифровая система обозначений имеет древовидную структуру. За отдельные участки дерева именования отвечают конкретные инстанции с четко разграниченными полномочиями, которые могут выделять "подветви" (arcs) другим инстанциям более низкого уровня, а те, в свою очередь, выделять "подветви подветвей" инстанциям еще более низкого уровня. В Таблице 5 представлена структура дерева OID объектного класса builtiDomain схемы AD. Кстати, как показано в Таблице 4, основа идентификатора OID класса organizationalUnit не совпадает с основой идентификаторов Microsoft. Определением OID класса organizationalUnit ведает другая организация. Компания, желающая добавить новый атрибут схемы, может направить заявку на регистрацию OID в центр регистрации имен ISO или создать новый идентификатор OID под ветвью Microsoft (для этого нужно воспользоваться средством oidgen.exe из комплекта ресурсов Microsoft Windows 2000 Server ResourceKit).

Кстати, не путайте идентификаторы OID с глобальными уникальными идентификаторами типа GUID (globally unique ID). OID содержит уникальное обозначение класса, а GUID - уникальное обозначение экземпляра объекта. Например, OID класса user - это 1.2.840.113556.1.5.9; каждый объект User, создаваемый из этого класса, будет иметь уникальный идентификатор GID, но являться потомком одного и того же класса (т.е. класса, OID которого равен 1.2.840.113556.1.5.9).

Категория объекта

В комплект поставки операционной системы Windows 2000 входит базовая схема, включающая объекты типов classSchema и attributeSchema. С помощью этих объектов служба AD организует свои базовые функции и структуру. Упомянутые объекты являются частью дерева данных о каталогах (Diectory Information Tree, DIT) и хранятся в файле базы данных ntds.dit. Эти базовые классы и атрибуты известны как объекты категории 1 (Category 1 objects). Классы или атрибуты, которые добавляются к базовому дереву DIT прикладными программами или администратором (например, атрибуты, добавляемые программой установки Exchange 2000 Setup), известны как объекты категории 2.

Определение категории объекта помещается в атрибутах systemFlags объектов classSchema и attributeSchema. Как явствует из его имени, атрибут systemFlags содержит двоичные флаги, которые могут быть установлены или сброшены. Атрибут systemFlags состоит из 4 байт; 4-й байт определяет тип категории. Если объект относится к категории 1, 4-й байт "включен" (т.е. его значение в десятичном формате равно 16); если речь идет об объекте категории 2, этот бит "выключен". Если в атрибуте systemFlags объекта категории 2 не нужно устанавливать другие двоичные флаги, этот атрибут может быть пустым (т.е. не установленным). В этом случае в оснастке ADSI Edit значение атрибута systemFlags будет отображено как (не установлено), из чего следует, что объект относится к категории 2.

Понятие категории объекта имеет большое значение, ибо его использование снижает вероятность того, что изменения, вносимые в схему одной из прикладных программ, отразятся на работе других приложений. Кроме того, применение категорий ограничивает тип изменений, которые прикладная программа может внести в схему.

Дополнительные справочные материалы о схеме

Схема AD содержит массу данных. Разобраться с объектами схемы и их взаимосвязями непросто, но сделать это необходимо. Специалисты Compaq подготовили сценарии, позволяющие загружать все данные об объектах схемы в электронную таблицу Microsoft Excel. Эти сценарии входят в состоящую из двух частей информационную "белую книгу", которая озаглавлена "Understanding the Microsoft Windows Sript Host and the Active Directory Service Interfaces in Windows 2000" (Part 1) и "The Powerful Combination of Windows Script Host and Active Drectory Service Interfaces under Windows 2000" (Part 2). Чтобы загрузить эту книгу и сценарии, нужно зайти на Web-сайт ActiveAnswers корпорации Compaq (http://activeanswers.comaq.com/aa_asp/solution_list.asp). Прокрутив изображение вниз, вы увидите пункт Knowledge Mgmt. & Messaging и далее Mail and Messaging. Щелкните на элементе Microsoft Exhange Server. В окне Available Information выделите элемент Tecnology (возможно, вы сможете получить доступ к этому узлу лишь после того, как зарегистрируетесь в качестве пользователя). Щелкните на пункте Windows 2000 and Exchange.

Ну вот, теперь вы имеете некоторое представление о структуре схемы службы AD. Термины Microsoft могут показаться слишком сложными, однако, разобравшись в объектах схемы и их взаимосвязях, вы сможете обрести необходимую уверенность и модифицировать схему так, что она будет вполне соответствовать требованиям ваших деловых приложений. В своей следующей статье я объясню порядок действий при подготовке расширений схемы. Скажу сразу: для планирования и тестирования расширений придется выделить какое-то время. Но, поверьте, оно не будет потрачено впустую.

Ален Лиссо - С ним можно связаться по адресу: alain.lissoir@compaq.com.