Донецкий техникум промышленной автоматики

Публікація SQL Server в Active Directory

  1. Публікація бази даних SQL Server в AD
  2. Служба Service Publication
  3. Застосування даних SQL Server, що містяться в AD
  4. налаштування пошуку
  5. Локалізація та підключення до сервера SQL Server
  6. Що таке ADSI?
  7. додаткові ресурси

Помітивши вкладку 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).

Після реєстрації примірника 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).

Тепер, після того як 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).

Виникає питання, а наскільки безпечно публікувати дані про 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.

Концепція публікації служби (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, можна позбутися від необхідності зберігати статичні конфігураційні дані для кожного клієнта. У той же час адміністратор отримує додаткову можливість для перенастроювання розташування бази даних і скорочення часу простою при міграції баз даних між серверами.

Чед Міллер ( [email protected] ) - адміністратор бази даних в компанії 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
asp?url=/library/en-us/dnactdir/html/msdn_deavision.asp> 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
asp?url=/library/en-us/adschema/ad/win2k_c_ms_sql_sqlserver.asp> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adschema/ad/win2k_c_ms_sql_sqlserver.asp .

Microsoft (липень 2003). MS-SQL-SQLDatabase
asp?url=/library/en-us/adschema/ad/win2k_c_ms_sql_sqldatabase.asp> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adschema/ad/win2k_c_ms_sql_sqldatabase.asp .

Create ?
@ObjType = N?
Database ?
@ObjName =?
Northwind?
Виникає питання, а наскільки безпечно публікувати дані про SQL Server і базах даних в AD?
Database?
Як встановити, поточна база даних відноситься до виробничої версії або до версії розробки?
Asp?
Asp?