Операционная система

 

 

Microsoft® Active Directory Service Interfaces (ADSI):
Открытые интерфейсы для работы со службами каталогов и управления ими

Техническое описание

Аннотация

В данном документе описаны предложения компании Microsoft по интеграции различных служб каталогов с помощью хорошо проработанного открытого набора интерфейсов — Microsoft® Active Directory Service Interfaces. Наличие стандартной модели администрирования и программирования служб каталогов для Windows®-платформ будет способствовать использованию служб каталогов в коммерческих и фирменных приложениях.

 


© 1999 Microsoft Corporation. Все права защищены.

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

Настоящий документ предназначен только для информационных целей. MICROSOFT НЕ ДАЕТ В ЭТОМ ДОКУМЕНТЕ НИКАКИХ ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ

Microsoft, Active Desktop, BackOffice, the BackOffice logo, MSN, Windows и Windows NT являются зарегистрированными товарными знаками или товарными знаками корпорации Microsoft на территории США и/или других стран.

Другие упоминаемые в документе названия продуктов и компаний могут представлять собой товарные знаки соответствующих владельцев.

Microsoft Corporation • One Microsoft Way • Redmond, WA 98052-6399 • USA

0399


Оглавление
Техническое описание........................................................ 1

Оглавление................................................................................ 1

Введение..................................................................................... 1

Что Вы должны знать                                                                         1

Службы каталогов сегодня.............................................. 2

Интерфейсы к службе каталогов Active directory (ADSI)  4

Пользователи ADSI                                                                            4

Архитектура ADSI..................................................................... 6

ADSI-объекты                                                                                     6

ADSI-провайдер                                                                                 6

Управление логической схемой                                                         7

Управление схемой ADSI-объектов                                                7

Кэширование                                                                                      9

Имена                                                                                               10

Навигация                                                                                         11

Поиск                                                                                               11

Безопасность                                                                                   12

Расширения                                                                                      13

Стандартные объекты ADSI............................................. 14

Стандартные объекты-контейнеры                                                   14

Стандартные конечные объекты                                                       14

Модель программирования ADSI................................... 15

Интерфейс OLE Automation Interface (IDispatch)                               16

Использование ADSI............................................................ 17

Создание списка пользователей                                                      17

Добавление пользователей в группы                                           17

Запуск и остановка служб                                                            17

использование ADSI для управления логической схемой           19

Заключение............................................................................. 20

Дополнительная информация                                                          20


Введение
Одной из основных задач, возникающих в крупной распределенной компьютерной сети, является поиск и идентификация ресурсов, то есть пользователей, групп, серверов печати, документов. Служба каталогов — это часть распределенной компьютерной среды, которая и предоставляет такие возможности. Служба каталогов чем-то похожа на телефонный справочник: по имени человека или названию ресурса она выдает всю необходимую информацию для доступа к этому человеку или ресурсу. При этом для работы с каким-либо устройством в сети вам не нужна дополнительная информация, специфическая для этого устройства.

В большинстве организаций уже используются различные службы каталогов. Сетевые операционные системы, программы электронной почты, ПО для групповой работы имеют собственные каталоги. Если в организации существует несколько служб каталогов, возникает ряд проблем, связанных с удобством эксплуатации, согласованностью данных, стоимостью разработки, стоимостью поддержки и т. д.

Продукт Active Directory Service Interfaces предоставляет единый, согласованный, открытый набор интерфейсов для работы с различными службами каталогов, управления ими и предназначен для решения этих вопросов.

Что Вы должны знать

Предполагается, что люди, читающие настоящий документ, обладают знаниями в области OLE, компонентной модели Component Object Model и служб каталогов. Примеры кода даются в Microsoft Visual Basic®.

Службы каталогов сегодня


Обычно в пределах одной организации используются различные службы каталогов, многие из которых выполняют управляющие функции. Это могут быть каталоги сетевых ресурсов, например Active Directory, Banyan StreetTalk, Directory Service в составе Microsoft Windows®, Novell Directory Services, или служба каталогов на основе LDAP, или службы различных приложений, таких как Lotus Notes, cc:Mail или Microsoft Mail. Несмотря на то, что предпочтительнее иметь одну службу каталогов для всей организации, ни один продукт из имеющихся сегодня на рынке не удовлетворяет таким широким требованиям.

Рисунок 1. Многообразие служб каталогов

Наличие в организации нескольких служб каталогов создает ряд сложных проблем для пользователей, администраторов и разработчиков. Конечные пользователи сталкиваются с необходимостью иметь несколько имен и паролей и работать с различными интерфейсами разных служб каталогов. Для администраторов возрастает сложность управления многочисленными каталогами. И те, и другие хотят, чтобы разработчики приложений пользовались существующей службой каталогов, однако разработчики сталкиваются с дилеммой — какой из служб пользоваться? Каждая служба имеет свои прикладные интерфейсы. Им приходится либо писать программы под конкретную службу каталогов, либо обеспечивать поддержку нескольких версий программ, в результате чего разработчики редко прибегают к использованию существующих служб каталогов.

Компания Microsoft разработала продукт, призванный решить эти проблемы — набор интерфейсов к службе каталогов Active Directory Service Interfaces (ADSI). Это программные интерфейсы в стандарте  COM, позволяющие клиентам и изготовителям ПО создавать приложения, которые могут работать с различными службами каталогов (регистрироваться в них, получать к ним доступ и управлять ими) при помощи единого набора хорошо определенных интерфейсов.

Одним из наиболее известных открытых программных интерфейсов является Open Data Base Connectivity (ODBC). ODBC предоставляет открытые интерфейсы для доступа к реляционным базам данных, что позволяет разработчикам создавать приложения и утилиты, работающие с любыми базами данных, которые поддерживают ODBC. Благодаря популярности ODBC, любая более или менее крупная реляционная СУБД поддерживает этот стандарт. ASDI является аналогом ODBC для служб каталогов.

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

Рисунок 2. Открытое решение

В настоящем документе описаны концепция, характеристики, возможности и архитектура ADSI, а также даются примеры использования ADSI.

Интерфейсы к службе каталогов Active directory (ADSI)
 


ADSI изолирует от пользователя особенности различных служб каталогов и предоставляет единый набор интерфейсов для управления сетевыми ресурсами. Объекты, имеющиеся в различных пространствах  имен ( name spaces) являются стандартными объектами ADSI. Так, службы каталогов различных сетевых операционных систем являются типичными пространствами имен для ADSI. Администраторы и разработчики могут пользоваться сервисами ADSI для учета ресурсов и управления ими в службе каталогов вне зависимости от того, в какой сетевой среде находится тот или иной ресурс.

ADSI облегчает выполнение общих задач по администрированию, таких как добавление новых пользователей, управление принтерами и поиск ресурсов в распределенной компьютерной среде.

Разработчикам ADSI облегчает задачу подключения приложений к центральной службе каталогов. Администраторы и разработчики имеют дело с единым набором интерфейсов — независимо от типа установленной службы каталогов.

ADSI является одним из компонентов набора интерфейсов Open Directory Service Interfaces (ODSI) в составе архитектуры Windows® Open Services Architecture (WOSA).

Пользователи ADSI

Сетевые администраторы могут применять ADSI для автоматизации стандартных задач, в числе которых добавление новых пользователей и групп, управление принтерами, задание условий доступа к сетевым ресурсам.

Изготовители ПО и разработчики приложений в компаниях при помощи ADSI могут встроить в продукты и приложения функции взаимодействия с центральной службой каталогов. Услуги (services) могут регистрироваться в службе каталогов, клиенты  могут при помощи службы каталогов находить зарегистрированные услуги; кроме того, и услуги, и клиенты могут при помощи службы каталогов находить интересующие их объекты и работать с ними. Поскольку ADSI не зависит от используемой службы каталогов, программные продукты и приложения, взаимодействующие со службами каталогов, могут успешно работать в различных сетевых средах.


Преимущества ADSI

 

 

 

 

 

 

 

 

 

Характеристика

Возможности

Открытость

Любая служба каталогов может включать в себя интерфейс ADSI; пользователи могут выбирать любую службу каталогов без ущерба для управляемости.

Отсутствие зависимости от службы каталогов

Приложения, выполняющие функции администрирования, не привязаны к службе каталогов этого же производителя и могут работать с несколькими службами каталогов. Уменьшается время разработки и стоимость поддержки.

Поддержка Java

Объекты ADSI предоставляют Java-программам и апплетам быстрый доступ к службе каталогов через компонентную объектную модель Java COM.

Безопасность

ADSI поддерживает программные модели аутентификации и авторизации.

Простая модель программирования

Приложения, работающие со службами каталогов (в том числе административные), можно разрабатывать не вникая в API конкретной службы каталогов.

Сервер автоматизации OLE

При разработке приложений для служб каталогов может применяться любой контроллер автоматизации OLE (Visual Basic, Perl, Rexx, C/C++ и т. д.). Администраторы и разработчики могут пользоваться уже известными им средствами. Производительность возрастает, время разработки и затраты на поддержку уменьшаются.

Функциональная полнота

Изготовители ПО и подготовленные пользователи могут разрабатывать серьезные программы при помощи тех же моделей ADSI, что используются для простых командных сценариев, предназначенных для администрирования.

Расширяемость

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

 

Архитектура ADSI
Объектная структура ADSI состоит из объектов ADSI и зависимых объектов. Клиентское ПО работает с объектами при помощи интерфейсов. Провайдеры сервисов ADSI должны реализовать и объекты ADSI, и их интерфейсы.

ADSI-объекты

ADSI-объекты представляют собой COM-объекты и соответствуют собственным объектам службы каталогов. Все манипуляции с ADSI-объектом осуществляются при помощи одного или нескольких COM-интерфейсов.

ADSI-объекты делятся на две группы: конечные объекты (leaf objects) и контейнеры (container objects) службы каталогов. Контейнер может включать в себя другие ADSI-объекты. Конечный объект других ADSI-объектов содержать не может.

Логическая структура свойств и методов отражена в разделении объектов на главный (host) и один или несколько зависимых. Такое деление может не совпадать со структурой базовой службы каталогов. Отношения между главным и зависимым объектами не следует путать с отношениями между контейнером и содержимым: первый тип отношений характерен для ADSI, а второй — для базовой службы каталогов.

ADSI-провайдер

ADSI-провайдер содержит совокупность ADSI-объектов и зависимых объектов для конкретного пространства имен. На рис. 3 показано, что клиентские приложения взаимодействуют только с интерфейсами к объектам, и не нуждаются в сведениях о его программной реализации.

Рисунок 3. Архитектура ADSI-провайдера

Управление логической схемой

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

Расширения объектов управляются ADSI-объектами, входящими в группу Schema Management (управление логической схемой). Данные объекты используются для:

·         просмотра определений объектов;

·         расширения определений объектов.

Управление схемой ADSI-объектов

Объекты управления схемой используются для просмотра и изменения логической схемы (schema) пространства имен. В число этих объектов входят:

·         объект-контейнер схемы (schema container object), содержащий данную схему.

·         объект-контейнер класса (сlass container object), определяющий класс объектов.

·         объект свойства (property object), описывающий свойство.

·         объект синтаксиса (syntax object), описывающий синтаксис, который может быть использован в определении свойства.

Эти объекты отличаются от объектов службы каталогов (таких как User component) тем, что не подразделяются на функциональные группы.

Объект-контейнер схемы

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

Рисунок 4. Контейнер схемы

На рисунке 4 показана типичная структура. Вместе с тем ADSI не ограничивает положение контейнеров схемы только этим уровнем дерева. Сложные каталоги допускают существование нескольких схем. В этом случае контейнеры схем могут располагаться и в других частях дерева. Как показано на рисунке 5, в одном ADSI-контейнере может быть только один контейнер схемы.

Рисунок 5. Иерархия схемы

Сам по себе контейнер схемы представляет собой дерево, содержащее определения класса, набора функций, свойств и синтаксиса. Чтобы расширить схему, в контейнере можно создавать новые классы и наборы функций.

Наборы функций определяются отдельно от классов, поэтому их можно использовать в определениях различных классов.

Объект-контейнер класса

Объект-контейнер класса используется для определения класса объектов, который можно создать в службе каталогов. Новые классы могут быть образованы от уже существующих классов при помощи модели ADSI.

Рисунок 6. Создание класса

На рисунке 6 показано, как при определении нового класса объект-контейнер класса соотносится с другими объектами класса, объектами свойств и синтаксиса. Объект класса указывает на объект свойств, которые указывают на синтаксис, поддерживаемый данным свойством.

Кэширование

Для простого кэширования свойств все ADSI-объекты  используют два метода — GetInfo и SetInfo. Все операции, связанные с получением и изменением свойств, происходят в кэше.

Вызывающая программа (caller) может получить значение свойства у объекта ADSI в любой момент после получения самого объекта. Вызывающему не нужно сначала вызывать GetInfo. Если данное свойство еще не запрашивалось, то за его получение и кэширование несет ответственность провайдер. При последующих запросах передается значение из кэша.

GetInfo вызывается для того, чтобы в явном виде обновить кэшированные свойства объекта из базовой службы каталогов. Программа гарантированно получает значения свойств на момент вызова GetInfo. Если метод GetInfo выполняется после того, как в кэш локального объекта были внесены изменения, однако до выполнения метода SetInfo, эти изменения пропадают. GetInfo позволяет клиентскому ПО передавать информацию о принадлежности свойств, с помощью которой провайдер может оптимизировать сетевой доступ.

SetInfo вызывают для записи объекта обратно в базовую службу каталогов. Пока не будет вызван метод SetInfo, в службе каталогов никакие изменения в свойства объекта не вносятся.

Имена

В пределах данного пространства имен объекты идентифицируются при помощи уникального имени. Так, например, файлы, хранящиеся на диске компьютера, располагаются в пространстве имен файловой системы. Уникальное имя файла зависит от того, где он хранится в пространстве имен файловой системы, например:

C:\Public\Documents\Adsi\Adsi_spec_v3.doc

Пространства имен службы каталогов также идентифицируют находящиеся в них объекты при помощи уникальных имен, которые, как правило, зависят от месторасположения объекта в службе каталогов. В Active Directory, к примеру, объект может иметь следующее имя:

CN=JSmith, OU=Sales, DC=ArcadiaBay, DC=Com

Разные службы каталогов для именования находящихся в них объектов используют различные формы. Это создает серьезные проблемы, особенно для разработчиков, так как им приходится учитывать особенности всех систем, в которых будет использоваться программа.

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

ADSI определяет правила именования, однозначно идентифицирующие ADSI-объект в гетерогенной среде. Такие имена называются строками AdsPath. AdsPath состоит из имени (moniker) провайдера (например, LDAP:, WinNT:) и уникального пути провайдера.


Примеры строк ADsPath:

WinNT://REDMOND/jsmith, user see previous comment re: “WinNT”
Идентифицирует jsmith как пользователя в домене Redmond

WinNT://REDMOND/comp1, computer
Идентифицирует компьютер comp1 в домене Redmond

WinNT://REDMOND/comp1/alice
Идентифицирует alice как локального пользователя на компьютере comp1.

LDAP://OU=Sales, DC=ArcadiaBay, DC=COM
Идентифицирует организационную единицу в домене Arcadia

LDAP://exch01/O=Microsoft
Идентифицирует объект обмена (exchange object) на сервере обмена (exchange server)

Навигация

ADSI предоставляет несложные способы выборки при помощи интерфейса IADsContainer. Кроме того, вызывающая программа может использовать этот интерфейс для фильтрования типов объектов.

Пример: Показ всех объектов в данной организационной единице

Set ou = GetObject(“LDAP://host1/OU=Sales, DC=ArcadiayBay,DC=COM”)

For each obj in ou
    Debug.Print  obj.Name
Next

 

Пример – Перечисление всех пользователей в домене ArcadiaBay:

Set dom = GetObject(“WinNT://ArcadiaBay”)
dom.Filter = Array(“user”)
For each usr in dom
   Debug.Print usr.Name
Next

Поиск

Поиск — это одна из наиболее частых задач в службах каталогов. В ADSI вы можете использовать либо интерфейсы OLE Distributed Query (DB), либо выполнить поиск при помощи интерфейсов ADSI. Для удобства эти интерфейсы позволяют указывать при поиске размер страницы, способ сортировки, уровень поиска, цель поиска и другие опции.

Поскольку ADSI также является провайдером OLE DB, использующим технологию Distributed Query (поставляется с Microsoft SQL Server™), вы можете объединить результаты, полученные от ADSI и другого провайдера OLE DB. Так, например, вы можете соединить данные о продажах из базы SQL Server, с контактной информацией о пользователях из Active Directory.


Пример: Использование ADO для составления запроса в Active Directory

Dim con As New Connection, rs As New Recordset

Dim Com As New Command

    

   

'Open a Connection object

con.Provider = "ADsDSOObject"

con.Open "Active Directory Provider"

   

 

‘Create a command object on this connection

Set Com.ActiveConnection = con

   

 

Com.CommandText = "select name from 'LDAP://DC=ArcadiayBay,DC=COM' where objectClass='*' ORDER BY NAME"

   

'-----------------------------------------

'Set the preferences for Search

'--------------------------------------

Com.Properties("Page Size") = 1000

Com.Properties("Timeout") = 30 'seconds

Com.Properties("searchscope") = ADS_SCOPE_SUBTREE

'--------------------------------------------

'Execute the query

'--------------------------------------------

Set rs = Com.Execute

       

   

'--------------------------------------

' Navigate the record set

'----------------------------------------

While Not rs.EOF

   Debug.Print rs.Fields(“Name”).Value

   rs.MoveNext

Wend

   

 

Безопасность

ADSI предоставляет клиенту возможности аутентификации и авторизации. Если ADSI используется для связи с Active Directory, аутентификация пользователя может быть выполнена с помощью протоколов Kerberos или NTLM (в зависимости от среды). ADSI также позволяет работать с Security Descriptor.

Пример: войти с именем JSmith

Dim dso As IADsOpenDSObject

Dim domain As IADsDomain

Set dso = GetObject("WinNT:")

Set domain = dso.OpenDSObject("WinNT://ArcadiaBay", "JSmith", "secret", ADS_SECURE_AUTHENTICATION)

 


Пример: добавление разрешения ACE к объекту

Dim Ace1 as new IADsAccessControlEntry

Dim Ace2 As new IADsAccessControlEntry

Dim Dacl as new IADsAccessControlList

' Add the ACEs to the Disretionary ACL

Dacl.AclRevision = 4 ‘DS ACL Revision

' Set up the first ACE

Ace1.AccessMask = -1 'Full Permission (Allowed)

Ace1.AceType = ADS_ACETYPE_ACCESS_ALLOWED

Ace1.AceFlags = ADS_ACEFLAG_INHERIT_ACE

Ace1.Trustee = "ACTIVED\Administrator"

' Add the ACEs to the Disretionary ACL

Dacl.AddAce Ace1

Dacl.AddAce Ace2

 

Расширения

Изготовители ПО и корпоративные разработчики могут расширять семантику объекта путем добавления интерфейсов к существующему набору ADSI. ADSI сочетает в себе модель COM Aggregation и технологию служб каталогов, что дает широкие возможности для расширения. Так, например, поставщик программ по созданию резервных копий может расширить объект компьютера какими-либо специфическими методами или свойствами. Располагая этими методами, администратор сможет написать сценарий, позволяющий создавать резервные копии всех компьютеров в группе.

Пример: создать резервные копии всех компьютеров в подразделении сбыта

Set ou = GetObject(“LDAP://OU=Sales, DC=ArcadiaBay, DC=COM”)

Ou.Filter = Array(“computer”)

For each comp in ou
        comp.BackUpNow() ‘ это дополнительный метод

Next

 

Стандартные объекты ADSI


В ADSI определены два типа объектов. Для просмотра и расширения схемы клиенты используют объекты управления схемой (Schema Management Objects). Объекты служб каталогов (Directory Objects) соответствуют объектам в пространствах имен и управляются провайдером ADSI. Объекты управления схемой были рассмотрены ранее, в разделе «Управление логической схемой».

ADSI определяет набор стандартных контейнеров и конечных (leaf) объектов, которые соответствуют наиболее широко распространенным объектам в сетевых каталогах. При помощи модели расширения схемы разработчики приложений и программ-провайдеров могут добавлять объекты по мере необходимости.

Стандартные объекты-контейнеры

·         Пространства имен

·         Страна

·         Местоположение

·         Организация

·         Организационная единица

·         Домен

·         Компьютер

Стандартные конечные объекты

·         Пользователь

·         Группа

·         Псевдоним

·         Служба

·         Очередь печати

·         Устройство печати

·         Задание печати

·         Файловая служба

·         Совместное использование файла

·         Сеанс работы

·         Ресурс

Модель программирования ADSI


ADSI-объекты соответствуют компонентной объектной модели (COM). Как правило, программисты работают с COM-объектами, вызывая одну из стандартных процедур OLE, чтобы получить указатель на интерфейс объекта IUnknown. После этого они могут вызвать QueryInterface, чтобы получить указатель на конкретный интересующий их интерфейс.

Все интерфейсы Active Directory Service Interfaces можно вызывать в рамках стандартной модели COM, используя традиционные языки, такие как C и C++. ADSI имеет функцию ADsGetObject, которая упрощает получение требуемого указателя интерфейса к объекту ADSI.

Пример: Создание пользователя (C/C++)

IADsContainer *pContainer;

IADs          *pNewObject;

IADs          *pNewObject;

IADsUser             *pUser;

 

//

// Bind to the known container.

//

ADsGetObject(TEXT"WinNT://MSFT",

IID_IADsContainer,

(void**)&pContainer);

 

//

// Create the new Active Directory Service Interfaces User object.

//

pContainer->Create(TEXT"User",

TEXT"Jane",

&pNewObject);

 

//

// Get the IADsUser interface from the user object.

//

pNewObject->QueryInterface(IID_IADsUser, &pUser);

 

//

// Set Jane’s password.

//

pUser->SetPassword(TEXT"Argus");

 

//

// Complete the operation to create the object.

//

pUser->SetInfo();

 

//

// Cleanup.

//

pContainer->Release();

pNewObject->Release();

pUser->Release();


Интерфейс OLE Automation Interface (IDispatch)

ADSI -объекты также являются серверами OLE Automation Server. Все интерфейсы Active Directory Service Interfaces могут быть вызваны через интерфейс IDispatch.

IDispatch является интерфейсом автоматизации OLE для контроллеров, которые не пользуются непосредственно интерфейсами COM. Доступ к объекту посредством IDispatch называется name-bound или late-bound access, поскольку соединение между клиентом и объектом OLE (сервером) происходит во время работы, а не в момент подключения программы-клиента.

Такие контроллеры автоматизации OLE, как Visual Basic, скрывают внутренние механизмы OLE и сами вызывают все необходимые методы в IDispatch, и программисты могут сосредоточиться на логике приложений, не отвлекаясь на операции более низкого уровня, связанные с OLE.

Пример: Создание объекта пользователя (Visual Basic)

Dim Container as IADsContainer

Dim NewUser as IADsUser

 

‘ Bind to the known container.

Set Container = GetObject("WinNT://MSFT")

 

‘ Create the new Active Directory Service Interfaces User.

Set NewUser = Container.Create("User", "Jane")

 

‘ Set Jane’s password.

NewUser.AccountRestrictions.SetPassword("Argus")

 

‘ Complete the operation to create the object in the directory.

NewUser.SetInfo

Использование ADSI


В следующих разделах рассказано, как использовать ADSI для администрирования.

Создание списка пользователей

Создание списков пользователей и их свойств — часто встречающаяся задача. В приведенном ниже примере сценарий, написанный на Visual Basic, извлекает информацию из пространства имен “WinNT” о всех пользователях в отделе производства корпорации ABX Compute Corporation. В данном примере имя и номер телефона каждого пользователя (в том виде, в каком они представлены в службе каталогов) передаются подпрограмме PrintUser.

Пример – Создание списка пользователей:

dim MyUserContainer as IADsContainer

dim MyUser as IADsUser

 

set MyUserContainer as GetObject(“WinNT://ABX”)

 

for each MyUser in MyUserContainer

      PrintUser MyUser.Name, MyUser.TelephoneNumber

next MyUser

 

Добавление пользователей в группы

Добавление пользователей в группы в целях обеспечения безопасности является обычной и трудоемкой задачей системных администраторов. Ниже пользователи из предыдущего примера добавляются в группу пользователей производственного отдела организации ABX (если они еще не занесены в эту группу).

Example: Adding users to groups

dim MyUserContainer as IADsContainer

dim MyUser as IADsUser

dim MyGroup as IADsGroup

dim Filter as Variant

 

Filter = Array(“user”);

 

set MyUserContainer = GetOBject(“WinNT://ABX”)

MyContainer.Filter = Filter  ‘ filter out all objects except users

set MyGroup = GetObject(“WinNT://ABX/Manufacturing_Users”)

 

for each MyUser in MyUserContainer

       if not MyGroup.IsMember(MyUser) then

              MyGroup.Add(MyUser)

       end if

next MyUser

 

Запуск и остановка служб

В данном примере Джону Смиту поручено управление службами компании, и он пишет небольшой сценарий, который останавливает все службы DHCP.


Пример 5: Запуск/остановка служб

Set dom = GetObject(“WinNT://ABX”)

Dom.Filter = Array(“Computer”)
For each comp in dom
   comp.Filter = Array(“Service”)

   For each svc in comp

     If ( svc.Name = Browser ) then
            svc.Stop
     End if
   Next

Next

 

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

использование ADSI для управления логической схемой


Полезной особенностью служб каталогов, использующих схемы, является то, что администраторы могут добавлять к объектам свойства. Так, например, администраторы организации ABX могут на основе стандартного ADSI-объекта User создать пользователя ABXuser, который будет содержать дополнительные полезные для компании ABX свойства.

Предположим, что компания ABX хочет добавить к объекту пользователя номер карточки (card key number) и называет новый тип объекта “ABXuser”. ADSI упрощает эту процедуру. Сначала в контейнере схемы создается новый класс, который помечается как производный от требуемого базового класса. Затем к новому классу добавляются новые свойства. Ниже приведен пример кода на Visual Basic, выполняющий подобное расширение.

Пример: расширение схемы

' get the Schema Path

set ds = getobject("LDAP://RootDSE")     ' and from that that the schema container

set sch = getobject("LDAP://"&ds.get("schemaNamingContext")) 

 

' create the new attribute object

set newatt = sch.create("attributeSchema","cn=CardKey")

' set the desired values  

newatt.put "attributeId","1.2.840.113556.1.4.7000.16" 

newatt.put "oMSyntax",20

newatt.put "attributeSyntax","2.5.5.4"  

newatt.put "isSingleValued",True

' write it back to the DS 

newatt.setinfo

 

'create a new class

set newcls = sch.create("classSchema","cn=ABXUser")    ' set the desired values

newcls.put "cn","myClass" 

newcls.put "governsId","1.2.840.113556.1.5.7000.12"

newcls.put "objectClassCategory",1 ' 1 = Structural Class

newcls.put "subClassOf","user"   

newcls.put "possSuperiors","organizationalUnit"

newcls.setinfo

 

 

' add the new attibute (CardKey) to this class

' Values for ::PutEx are defined in one of the IADS.H include file, found in the

newcls.putex ADS_PROPERTY_APPEND,"mayContain", Array("1.2.840.113556.1.4.7000.16") ‘It’s Card Key’s OID

 

' write it back to the DS 

newcls.setinfo

 

 

Заключение


Многие организации одновременно используют различные службы каталогов. Наличие нескольких служб каталогов в пределах одной организации создает серьезные проблемы для пользователей, администраторов и разработчиков.

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

ADSI и работающие с ними смежные компоненты представляют собой эффективное средство, упрощающее пользователям и администраторам работу со службами каталогов.

Дополнительная информация

Самую свежую информации об Active Directory Service Interfaces можно найти на сайте http://www.microsoft.com/ntserver или форуме Windows NT Server Forum в сети Microsoft Network (GO WORD: MSNTS). Отзывы и пожелания отправляйте по адресу adsi@microsoft.com.