Симон Робинсон - C# для профессионалов. Том II
Заключение
В этой главе было рассмотрено использование базовых классов .NET для доступа к реестру и файловой системе из кода C#. Мы видели, что базовые классы предоставляют достаточно мощные и при этом доступные объектные модели для создания, модификации или чтения ключей в случае реестра, а в случае файловой системы — для копирования файлов, перемещения, создания и удаления файлов и папок, а так же для чтения и записи текстовых или двоичных файлов.
В этой главе предполагалось, что код должен выполняться с помощью учетной записи, которая имеет необходимые полномочия доступа для выполнения действий, требуемых кодом. Очевидно, что вопрос безопасности является важным вопросом там, где дело касается доступа к файлам, и эта область будет рассмотрена в главе 25.
Глава 15
Работа с активным каталогом
Мы получаем активный каталог (Active Directory) как часть Windows 2000 Server. Активный каталог является службой каталога, где может храниться информация о пользователях, принтерах, службах и обычные данные. Exchange Server 2000 компании Microsoft интенсивно использует его для хранения общедоступных папок и другой информации. Мы также можем хранить в активном каталоге определяемые нами данные. В файловой системе каталог хранит файлы, телефонный каталог хранит телефонные номера и имена. Служба каталога делает доступной информацию в каталоге. С помощью Проводника можно, например, находить файлы.
До появления ADS сервер Exchange мог использовать активный каталог для хранения своих объектов. Системным администраторам приходилось конфигурировать два идентификатора пользователя для одного человека: учетную запись пользователя в домене Windows NT, чтобы можно было зарегистрироваться в системе, и пользователя в Exchange Directory. Это было необходимо, так как для пользователей требовалась дополнительная информация (такая как адреса e-mail, телефонные номера и так далее), а данные о пользователях домена NT были нерасширяемыми, что не позволяло поместить туда требуемую информацию. Теперь системному администратору достаточно сконфигурировать только одного пользователя для человека в активном каталоге, данные объекта пользователя можно расширять, чтобы удовлетворить требованиям Exchange Server. Мы можем также расширить эту информацию.
Рассмотрим менеджера проекта в большой компании, который ищет с помощью Active Directory разработчика, способного создать приложения с помощью C#. Было бы неплохо, если бы менеджер мог сделать простой запрос для получения списка всех разработчиков, удовлетворяющих его требованиям. Такую возможность предоставляет активный каталог, в котором объект пользователя дополняется списком навыков.
Рассмотрим другой пример, где активный каталог может сыграть полезную роль: допустим, сконфигурирован используемый по умолчанию черно-белый принтер, но потребовалась цветная печать. Пользователь знает, что в пределах досягаемости имеется цветной принтер, который удовлетворяет требованиям, но какое у этого принтера имя? В диалоговом окне печати принтер можно выбирать из списка сотен странных имен типа Pikachu, Poliwag, Cloyster, Jynx, Staryu, которые когда-то выбрал системный администратор. Как выбрать правильный принтер? Давайте создадим решение, где пользователь может ввести такие требования, как расположение, двусторонняя печать и цвет для поиска принтера. Такая дополнительная информация о принтере также хранится в активном каталоге.
С помощью среды .NET можно легко получить доступ и манипулировать данными в службе каталога с помощью классов из пространства имен System.DirectoryServices.
Отметим, что для примеров в этой главе требуется Windows 2000 Server с установленным и сконфигурированным активным каталогом (Active Directory). После небольшой адаптации вы можете использовать классы пространства имен System.DirectoryServices, применяющиеся для службы каталогов Novell и Windows NT4.
В этой главе мы рассмотрим:
□ Архитектуру активного каталога.
□ Чтение и изменение данных в активном каталоге.
□ Поиск объектов в активном каталоге.
Архитектура активного каталога
Здесь мы рассмотрим, как работает активный каталог, для чего он используется и какие данные можно в нем хранить.
Свойства
Свойства активного каталога представлены в следующем списке:
□ Данные в активном каталоге группируются иерархически. Объекты могут храниться внутри других объектов-контейнеров. Вместо того чтобы входить в один большой список, пользователи могут группироваться внутри организационных единиц. Организационная единица включает в себя другие организационные единицы, и таким образом можно построить дерево.
□ Активный каталог использует репликацию мультимастера. В противоположность доменам Windows NT 4, где контроллер первичного домена был мастером, при использовании активного каталога все серверы являются мастерами. Если первичный контроллер домена в домене Windows NT 4 выключен, ни один пользователь не может сменить пароль; системный администратор обновляет список пользователей только в том случае, когда первичный контроллер домена включен и работает. При использовании активного каталога обновление можно делать на любом сервере. Эта модель более масштабируема, так как обновления могут происходить на различных серверах одновременно. Недостатком такой модели является большая сложность репликации. Вопросы репликации мы рассмотрим позже.
□ Топология репликации является гибкой, чтобы поддерживать репликации на медленных соединениях в WAN. Как часто должны реплицироваться данные, конфигурируется администраторами доменов.
□ Активный каталог поддерживает открытые стандарты. LDAP (Lightweight Directory Access Protocol — легковесный протокол доступа к каталогу), является одним из стандартов, который может использоваться для доступа к данным в активном каталоге. LDAP является стандартом Интернета, который может использоваться для доступа ко множеству различных служб каталога. Так как LDAP также является интерфейсом программирования, то определен LDAP API, который можно применять для доступа к активному каталогу с помощью языка C. Предпочтительный интерфейс программирования компании Microsoft для служб каталога — это ADSI (Active Directory Service Interface — интерфейс служб активного каталога). Его конечно, нельзя назвать открытым стандартом. В противоположность LDAP API с помощью ADSI можно получить доступ ко всем свойствам активного каталога. Другим стандартом, который используется в активном каталоге, является Kerberos. Kerberos используется для аутентификации. Служба Kerberos в Windows 2000 может также применяться для аутентификации клиентов Unix. Это не работает в обратную сторону; серверы Unix Kerberos не могут аутентифицировать клиентов Windows 2000, так как компания Microsoft расширила протокол Kerberos для своего собственного использования.
□ При использовании активного каталога мы имеем детально структурированную систему безопасности. Каждый объект, хранящийся в активном каталоге, имеет связанный список управления доступом, определяющий, кто и какие действия может производить с объектом.
Объекты в каталоге являются строго типизированными. Это означает, что тип объектов точно определен, к объекту нельзя добавить ни одного не специфицированного атрибута. В схеме (Schema) определены типы объектов, а также части объектов (атрибуты). Атрибуты могут быть обязательными или необязательными.
Концепции активного каталога
Прежде чем программировать для активного каталога, необходимо познакомиться с некоторыми концепциями. Существует много новых терминов, которые надо знать при разговоре об активном каталоге.
Объекты
В активном каталоге хранятся объекты. Объект — это что-то конкретное, например пользователь, принтер или общий сетевой ресурс. Объекты имеют обязательные и необязательные атрибуты, которые описывают объект. Примерами атрибутов объекта user (пользователь) являются фамилия, имя, адрес e-mail, телефонный номер и т. д.
На следующем рисунке показаны: контейнерный объект Wrox Press, несколько объектов пользователей, контакт, принтер и объект группы пользователей:
Схема
Каждый объект является экземпляром класса в схеме (schema). Схема хранится среди объектов активного каталога. Мы должны различать classSchema и attributeSchema. В classSchema определяется тип объекта, а также данные о том, какие обязательные и необязательные атрибуты имеет объект. attributeSchema определяет, на что похож атрибут, и какой допустим для него синтаксис.
Можно пользоваться собственными типами и атрибутами и добавить их к схеме. Помните, что новый тип схемы вам не удастся убрать из активного каталога. Можно пометить его как неактивный, чтобы новые объекты больше нельзя было создавать, но могут существовать объекты этого типа, поэтому невозможно удалить классы или атрибуты, которые определены в схеме. Windows 2000 Administrator не имеет достаточных полномочий для создания новых записей схемы, здесь нужен Windows 2000 Domain Enterprise Administrator.