Заметив вкладку Active Directory в свойствах SQL Server в Enterprise Manager, многие удивляются: какое отношение Active Directory (AD) имеет к SQL Server, какие преимущества можно получить при добавлении сведений об SQL Server и базах данных в AD? Сетевые службы, такие как службы файлов и печати, используют AD для публикации и хранения информации о сетевых ресурсах. AD содержит список учетных записей пользователей и каталог доступных сетевых ресурсов.
Поскольку AD рассматривает серверы SQL и базы данных SQL Server как сетевые ресурсы, их список в AD всегда можно получить. Начиная с SQL Server 2000 Microsoft ввела концепцию публикации (publishing) — в смысле листинга или внесения информации в реестр AD — как самого сервера SQL Server, так и размещенных на нем баз данных в AD в доменах Windows Server 2003 или Windows 2000.
Некоторые продукты Microsoft, например Microsoft Exchange 2000, настолько глубоко интегрированы с AD, что без Active Directory просто не смогут нормально функционировать. SQL Server не нуждается в AD (по крайней мере пока), и простое внесение SQL Server в AD никаких прямых выгод не сулит. Листинг баз данных SQL Server в AD полезен только в случае разработки приложений, которые получают преимущества при публикации баз данных в AD. Одно из преимуществ публикации ресурсов в AD заключается в наличии функции AD Service Publication. Функция Service Publication позволяет приложениям вносить в списки AD имя и местоположение служб, с которыми они работают, и клиент при необходимости может обращаться к службам соответствующего приложения. Service Publication и поисковые возможности AD позволяют администраторам гибко реконфигурировать серверы, не изменяя настроек клиента.
В данной статье рассказывается о том, как зарегистрировать экземпляр SQL Server и базу данных в AD. Кроме того, приводится описание практических примеров, в которых используется ADO, SQL и Active Directory Service Interface (ADSI) для опроса и обновления каталога AD. Дополнительную информацию об ADSI можно найти во врезке «Что такое ADSI?». В дальнейшем мы посмотрим, как выполняется публикация о базе данных SQL Server, чтобы клиенты могли динамически локализовать ее и подключаться к серверу SQL Server, основываясь только на имени базы данных.
Публикация базы данных SQL Server в AD
Можно опубликовать базу данных SQL Server в AD, используя либо Query Analyzer (с помощью системных хранимых процедур sp_ActiveDirectory_SCP и sp_ActiveDirectory_Obj), либо Enterprise Manager. Для добавления SQL Server из Query Analyzer нужно набрать:
EXEC sp_ActiveDirectory_SCP
Чтобы добавить SQL Server из Enterprise Manager, следует открыть Server Properties, выбрать вкладку Active Directory и щелкнуть Add (см. экран 1).
Экран 1. Добавление SQL Server в Active Directory из Enterprise Manager |
После регистрации экземпляра SQL Server в AD при помощи процедуры sp_ActiveDirectory_Obj можно добавить базы данных. Например, для добавления базы данных Northwind в AD нужно набрать:
EXEC sp_ActiveDirectory_Obj @Action = N?create?, @ObjType = N?database?, @ObjName = ?Northwind?
Чтобы добавить Northwind из Enterprise Manager, требуется открыть Northwind Properties, перейти на вкладку Options и установить флажок List this database in Active Directory в нижней части экрана (см. экран 2).
Экран 2. Добавление базы данных Northwind в Active Directory из Enterprise Manager |
Теперь, после того как SQL Server и база данных добавлены в AD, добавленные классы можно увидеть в AD с помощью редактора ADSI Edit (он включен в состав Windows 2000 Server). Чтобы открыть ADSI Edit, нужно запустить консоль MMC, выбрать Console, Add/Remove Snap-in и добавить оснастку ADSI Edit.
После регистрации ADSI Edit следует выбрать домен для подключения. Для этого используется контекстное меню ADSI и указывается имя сервера домена. Необходимо, чтобы сервер был доступен в контейнере COMPUTER. Новый объект mS-SQL-SQLServer будет отображаться ниже экземпляра Server AD Class. Если запущен экземпляр SQL Server по умолчанию, объект будет называться MSSQLSERVER.
Если раскрыть объект mS-SQL-SQLServer, появится дочерний объект — mS-SQL-SQLDatabase. Каждый из таких объектов или классов имеет свои атрибуты. Один из атрибутов mS-SQL-SQLDatabase — это mS-SQL-Name, который содержит имя базы данных. В данном случае это Northwind (см. экран 3).
Экран 3. Контейнеры SQL в Active Directory |
Возникает вопрос, а насколько безопасно публиковать данные об SQL Server и базах данных в AD? На самом деле публикация в AD — более безопасный метод работы с SQL Server, чем существующий подход, размещение SQL Server в сети и использование именованных каналов (Named Pipe) в качестве механизма связи между процессами. По умолчанию SQL Server заявляет о себе клиентам сети с помощью широковещательных сообщений, используя Named Pipe. Для иллюстрации сказанного попробуйте выдать команду osql -L для обнаружения всех компьютеров, на которых запущен SQL Server. Сообщения Named Pipe позволяют клиентам динамически находить SQL Server, однако невозможно назначить сообщениям разрешения на доступ — они попадут на любой компьютер, подключенный к сети.
Что касается AD, то можно назначить разрешения и ограничить круг лиц, которые имеют право просматривать объекты AD. Например, если на SQL Server хранятся платежные данные, следует назначить разрешения на чтение только для платежной группы. После опубликования SQL Server и баз данных в AD можно отключить сообщения по Named Pipe и назначить разрешения для объектов AD. О том, как отключить широковещательный обмен сообщениями по Named Pipe, рассказано в SQL Server 2000 Books Online-BOL-(Updated-SP3) в статье «Revealing SQL Server on a Network». Нужно иметь в виду, что в «спрятанном» таким образом сервере SQL происходит переключение на использование порта 2433 независимо от предыдущих настроек.
Служба Service Publication
Публикация служб позволяет приложениям клиента без труда отыскивать соответствующий сервер базы данных. Как показано на рис. 1, сначала SQL Server публикует в AD свое имя и местоположение, включая информацию об имени сервера и номере порта SQL Server. После этого приложение клиента устанавливает местонахождение SQL Server по имени базы данных. И наконец, приложение использует извлеченную информацию о местоположении сервера для подключения к SQL Server и начинает с ним работать. Когда сведения об SQL Server и его базах данных публикуются в AD, клиенты могут динамически локализовать серверы баз данных по имени базы. Если требуется переместить базу данных на другой сервер, достаточно будет только обновить AD.
Рисунок 1. Процесс публикации службы |
Концепция публикации службы (service publication) для систем управления базами данных существует в Oracle начиная с версии 8i, и базы данных Oracle можно публиковать в AD. В Oracle, если базы данных опубликованы в AD, можно просто указать системный идентификатор базы данных (database?s system identifier, SID) как Host String, и приложение само начнет поиск в AD для локализации сетевого адреса сервера и номера порта для выполнения подключения. Например, SQL*Plus может зарегистрироваться на сервере Oracle с помощью SID базы данных. Хотя в SQL Server Query Analyzer такая функциональность не предусмотрена, можно построить клиентское приложение, которое будет осуществлять поиск в AD на основе имени базы данных и находить нужный SQL Server для подключения точно так же, как это происходит при использовании Oracle.
Применение данных SQL Server, содержащихся в AD
Теперь, когда мы убедились, что SQL Server и база данных Northwind зарегистрированы в AD, перейдем к некоторым техническим приемам, используемым для извлечения из AD связанных с SQL Server данных и работы с ними. Хотя можно использовать исключительно ADSI, я предпочитаю при поиске в AD задействовать комбинацию ADO и диалекта ADSI SQL. Код на VBScript (см. листинг 1) с помощью провайдера ADO Active Directory извлекает из AD имена всех экземпляров SQL Server (для всех компьютеров, на которых работает SQL Server и чьи имена экземпляров зарегистрированы в AD).
Кроме того, можно опросить AD и извлечь список всех зарегистрированных баз данных, выбрав атрибут mS-SQL-Name (см. листинг 2). И снова используется провайдер ADO AD. Для получения полного списка атрибутов AD следует обратиться к документации Microsoft Developer Network (MSDN) для схемы Windows 2000 AD. В частности, стоит обратить внимание на классы mS-SQL-SQLServer и mS-SQL-SQLDatabase.
Использование диалекта ADSI SQL для опроса AD имеет несколько ограничений. Например, нельзя задействовать синтаксис SELECT *; в операторе SELECT необходимо явно указывать столбцы. Нельзя применять ADSI SQL для обновления AD; вместо этого следует использовать ADSI. Последнее ограничение также распространяется на ADSI для связанных серверов. Более подробную информацию можно найти в SQL Server 2000 BOL (Updated-SP3) в статье «OLE DB Provider for Microsoft Directory Services». И наконец, поскольку AD — это иерархическая структура, проще использовать функции ADSI для получения информации о родительских контейнерах, чем работать только с диалектом ADSI SQL.
Код на VBScript (см. листинг 3) использует ADO, ADSI SQL и функции ADSI при извлечении имени сервера, на котором находится искомая база данных. Сначала выдается запрос на получение ADsPath для контейнера mS-SQL-SQLDatabase, в котором хранится база данных Northwind. Затем значение ADsPath присваивается объекту ObjADSI. После этого используется свойство ADSI Parent для извлечения mS-SQL-SQLDatabase родительского контейнера MSSQLSERVER. После извлечения ADsPath для mS-SQL-SQLServer код снова использует свойство ADSI Parent для получения имени сервера или Common-Name, которое хранится как атрибут cn.
Поиск настроек
Предположим, что в какой-то специфической базе данных требуется зарегистрировать три конфигурации (скажем, производство, разработку и обеспечение качества). Например, у нас имеется версия production, версия development и версия QA (quality assurance) базы данных Northwind, и во всех трех случаях используется одно и то же имя базы данных. Как установить, текущая база данных относится к производственной версии или к версии разработки? Информацию об этом можно хранить в одном из атрибутов mS-SQL-SQLDatabase. Нужно иметь в виду, что не все атрибуты AD могут обновляться пользователем; некоторые атрибуты обновляются только с помощью Directory System Agent (системный процесс, обеспечивающий доступ в AD). Чтобы узнать, может ли пользователь обновить какой-то специфический атрибут, нужно просмотреть документацию на атрибут класса AD.
Встроенный атрибут Flags является обновляемым, поэтому можно задействовать его для хранения индикатора конфигурации. В приведенном примере я использую кодировку для представления разных конфигураций, где 1 — это производство, 2 — разработка и 3 — обеспечение качества. Программа (см. листинг 4) показывает, как установить атрибут Flags класса mS-SQL-SQLDatabase с помощью свойств ADSI Put и SetInfo. Сначала из AD извлекаются новые значения Flags. Затем можно зарегистрировать множество копий одной и той же базы данных для каждой конфигурации, различая их по значению атрибута Flags. Например, в моем случае для конфигурации development атрибут равен 2, для QA — 3.
Локализация и подключение к серверу SQL Server
Можно модифицировать код листинга 3 для поиска нужной конфигурации базы данных Northwind и динамического подключения к серверу SQL Server на основе только указанного имени базы данных в соответствующей конфигурации. Код листинга 5 использует запрос ADSI SQL для получения значения ADsPath базы данных Northwind, у которой атрибут Flags установлен равным 1 (конфигурация production). Затем с помощью свойства ADSI Parent извлекается класс mS-SQL-SQLDatabase родительского контейнера MSSQLSERVER. После получения ADsPath объекта mS-SQL-SQLServer извлекается номер порта работающего экземпляра SQL Server; затем свойство ADSI Parent используется для получения имени сервера или dNSHostname. На основе имени SQL Server и номера порта программа выполняет доверительное подключение к SQL Server.
Публикация служб — одна из наиболее мощных функций AD. Когда SQL Server публикуется в AD как служба, клиентское приложение может быть спроектировано с таким расчетом, чтобы динамически локализовать базы данных, используя Service Publication и поисковые возможности AD. Следовательно, вручную менять клиентские настройки не потребуется. В свою очередь, просто обновив расположение базы данных в AD, администратор DBA может без труда перемещать ее по серверам без каких-либо последствий для приложения клиента, которое динамически отслеживает местонахождение базы данных, используя информацию AD.
Публикуя SQL Server в AD и разрабатывая приложения, которые используют Service Publication, можно избавиться от необходимости хранить статические конфигурационные данные для каждого клиента. В то же время администратор получает дополнительную возможность для перенастройки расположения базы данных и сокращения времени простоя при миграции баз данных между серверами.
Чед Миллер (cmille19@tampabay.rr.com) — администратор базы данных в компании Raymond James & Associates во Флориде. Имеет сертификаты MCSE и MCDBA
Что такое ADSI?
Профессионалы в области программирования баз данных хорошо знакомы с ADO и SQL, но мало кто использует инструменты программирования Active Directory (AD). Active Directory Service Interface (ADSI), подобно ODBC, имеет открытый прикладной интерфейс программирования, API. Но используется ADSI не для работы с системой управления базами данных (database management system, DBMS), а для помощи в организации доступа и управления службами каталогов (например, Windows Directory Service, Novell Directory Service (NDS) и другими службами, работа которых основана на использовании протокола Lightweight Directory Access Protocol, LDAP). Хороший обзор синтаксиса ADSI и руководство для быстрого освоения языка сценариев ADSI можно найти в материалах «Active Directory Service Interfaces Scripting Tutorial» (см. врезку «Дополнительные ресурсы»).
Дополнительные ресурсы
Microsoft (октябрь 2000). Integrating Applications with Windows 2000 and Active Directory
http://www.microsoft.com/technet/prodtechnol/ windows2000serv/technologies/activedirectory/ evaluate/adappstr.mspx.
Microsoft (июль 1998). Lowering Total Cost of Ownership with Active Directory-Enabled Applications
http://msdn.microsoft.com/library/default.asp?url=/library/ en-us/dnactdir/html/msdn_deavision.asp.
Microsoft (август 2002). Active Directory Service Interfaces Scripting Tutorial
http://msdn.microsoft.com/library/en-us/adsi/adsi/adsi_scripting_tutorial.asp.
Microsoft (июль 2003). MS-SQL-SQLServer
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adschema/ad/win2k_c_ms_sql_sqlserver.asp.
Microsoft (июль 2003). MS-SQL-SQLDatabase
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adschema/ad/win2k_c_ms_sql_sqldatabase.asp.