Розгортання користувача типів інтеграції CLR

Існують принаймні три способи роботи з користувацькими типами в середовищі розробки Під час створення та тестування функціональних одиниць може використовуватися інтерфейс Visual Studio 2005, в якому виконуватимуться інструкції T-SQL DDL і запити, призначені для тестування користувача типів Як тільки новий тип буде готовий для використання іншими розробниками в таблицях і серверному програмному коді (наприклад, в таблицях і уявленнях Т-SQL або в процедурах, функціях, триггерах та консолідації CLR або Т-SQL), його збірка може бути розгорнута в локальній папці кожної клієнтської утиліти, в якій буде використана для розробки Коли користувача тип готовий до застосування в середовищі розробки, він може бути розгорнутий в глобальному кеші складання або в робочому просторі всіх клієнтських додатків, які будуть посилатися на новий тип

Здатність одночасно використовувати різні версії одного типу може бути благом, а може привести до марної трати зусиль Правильне планування і управління є критичним моментом тестування з допомогою відповідних клієнтських бібліотек У базі даних легше підтримувати порядок, ніж в клієнтському просторі Цілком імовірна ситуація, коли чотири розробника використовують для тестування Management Studio з встановленими посиланнями на чотири різні версії типу, в той час як в базі даних існує тільки одна версія Часом все, що потрібно для розвитку такого сценарію, – це скопіювати файл dll для даного типу в папку виконання додатків NET в різний час

Наприклад, за замовчуванням утиліта Management Studio шукатиме файли dll в каталозі:

c:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE

Приміщення файлу Dll в цей каталог забезпечить можливість установки посилань на даний користувача тип в запитах, які виконуються в середовищі утиліти Management Studio Некеровані підключення OLE DB, такі як утиліта SQLDMD, а також підключення ODBC, такі як утиліта osdl, розпізнають екземпляри користувальницького типу тільки як двійкові дані

У загальному випадку для використання користувальницького типу даних необхідна наявність дозволу SQL Server REFERENCES Якщо користувальницький тип використовується в процедурі, функції або триггере Т-SQL або інтеграції CLR в якості локальної змінної, також необхідна наявність дозволу EXECUTE

Строго іменовані збірки і глобальний кеш збірки

Додатки, які посилаються на конкретну збірку, будуть прагнути використовувати її, точно ідентифікуючи по імені, версії і підпису Якщо збірка не використовує суворе імя, додаток може не хвилюватися про її версії Це ускладнює процес розгортання збірок, оскільки велика вірогідність втрати поновлення в деяких місцях архітектури, орієнтованої на служби У результаті цього збірка, існуюча в базі даних, не буде приведено у відповідність із складками, на які посилаються служби вузлів Поки посилання з програми NET на загальнодоступну структуру та імя відповідають імені та структурі типу в базі даних, додаток може оперувати типом так, ніби воно має повні і точні знання про тип, що містяться в базі даних Це так схоже на пекло динамічних бібліотек Dll, який була покликана подолати Середа NET Framework 20

У той час як реверсна інженерія та дизасемблювання завжди несли з собою потенційний ризик у всіх мовах програмування і на всіх платформах, середа NET Framework пропонує надійну утиліту дизассемблирования коду MSIL На щастя, модель системи безпеки середовища NET Framework не припускає, що приховування коду від зовнішніх уявлень буде необхідної її складової Підпис та аутентифікація є ключовими компонентами захисту збірок NET Збірки можуть бути підписані сильно захищеним ключем, що запобігає можливість введення до неї компонентів, які можуть піддати ризику все додаток Такі збірки можуть посилатися тільки на ті збірки (крім, звісно, ​​простору імен System), які підписані тією ж парою ключів Підписи необхідні для всіх збірок, які розміщені в GAC

Компанія Microsoft рекомендує при спільному використанні деякої збірки кількома додатками на одному компютері поміщати ці збірки в GAC У цьому випадку набагато легше дати гарантію того, що збірка закрита в кеші від усіх, окрім адміністратора З кешу GAC також можна паралельно запустити кілька версій однієї і тієї ж збірки І навпаки, якщо хоча б одна збірка в додатку поміщена в GAC, то розгортання додатки ускладнюється необхідністю використання Windows Installer 20 або утиліти Global Assembly Cache Tool для переміщення збірки в кеш GAC всіх вузлів додатків, які будуть використовувати даний користувача тип Збірки, розгорнуті разом з додатком у теці програми, можуть бути переміщені в GAC з використанням заснованого на команді хсору просування і тактики відкачування До того ж, якщо збірки не розгорнуті в глобальному кеші GAC, розробнику доведеться самому дбати про те, які збірки належать його додатком При прийнятті рішення щодо того, де розгортати збирання: в глобальному кеші GAC або в теці програми, слід грунтовно вивчити вимоги організації до системи безпеки

Створення строго іменованих збірок NET

При роботі з користувача типами, які повинні бути розгорнуті в GAC, винятково важливо чітко розуміти порядок створення строго іменованих збірок Існують три аспекти суворого іменування: ідентифікатор збірки, відкритий і секретний ключі Секретний ключ ще іноді називають цифровим підписом Всі аспекти суворого іменування управляються з використанням Visual Studio 2005

Ідентифікатор збірки можна побачити і змінити у вкладці Application вікна Project Designer (рис 291), яке відкривається за допомогою команди меню Projects <ім'я проекту> properties або аналогічної команди контекстного меню (відкривається клацанням правою кнопкою миші на імені проекту в Solution Explorer)

Пара ключів, необхідна для завершення формування суворого імені, може бути сгенерирована за допомогою утиліти Strong Name Tool (sn exe) Доступ до цієї утиліті відкритий у вікні командного рядка програми Visual Studio Ця утиліта має масу функцій Як і у всіх утилітах командного рядка, повну довідку по ній можна отримати, набравши в рядку запиту sn /.

На рис 292 показані команди створення пари відкритого і секретного ключів і розгортання ключа в папці рішення проекту

Рис 291 Ідентифікатор збірки У його формуванні бере участь інформація про назву і версії, а також регіональні налаштування (такі, як мова)

Puc 292 Створення пари відкритого і секретного ключів, використовуваних для створення суворого імені збірки

Даний приклад створений в 64-розрядної операційної системи, проте та ж процедура використовується і в 32-розрядних системах

Після розгортання ключа в папці проекту включити його в збірку можна у вікні Project Designer (рис 293)

Інформація про суворе імені складання буде включена в її маніфест Для додавання ключа е збірку можна використовувати спеціальну утиліту командного рядка Assembly Linker (al ехе) Ця утиліта виконує ту ж роботу, що і вкладка Signing вікна Project Designer, однак вона вимагає передачі в якості аргументу імені файлу dll збірки Вікно Project Designer, з точки зору користувача, є більш дружнім Робота з файлом Dll припускає, що користувач не може використовувати функцію Deploy програми Visual Studio в процесі розробки

Для визначення файлу ключа можна також використовувати і внутрішні атрибути збірки, наприклад:

&ltAssembly:AssemblyKeyFileAttribute(&quotSQLServerBible_keypairsnk&quot)&gt

Політика безпеки організації може зажадати використання і більш складною реалізації суворого імені Наприклад, може бути прийняте рішення не віддавати цифровий підпис (тобто секретний ключ) розробникам У такій ситуації розробка і тестування

користувальницького типу виконується в базі даних без суворого імені Коли користувача тип вже готовий до впровадження, начальник відділу безпеки або призначена ним особа додає ключ, після чого тип розгортається в інтегрованому середовищі Переваги такого підходу повязані із захистом інтелектуальної власності та запобіганням можливості впровадження шкідливого або неперевіреного коду у виробничу середовище

Рис 293 Додавання ключа в збірку у вікні Project Designer

Обслуговування користувача типів

Будьте готові до безпрецедентного рівня деталізації при внесенні змін до користувача типи, які вже проклали собі дорогу в виробничі системи Зміна визначення структури користувальницького типу вимагає його видалення і подальшого відтворення Збереження існуючих даних та забезпечення їх підтримки новою структурою також вимагають особливої ​​уваги і тестування Ідентифікація фрагментів програмного коду і вузлів, які слід оновити одночасно при внесенні змін до користувача типи, є прикладом кооперації і взаємодії, на відміну від процесів, що використовуються в традиційній середовищі проектування баз даних

Резюме

У цій главі було показано, наскільки разючі відмінності між користувача типами інтеграції CLR і вже давно знайомими псевдонімами типів даних У утиліті Management Studio вони навіть рознесені в окремі папки в поданні бази даних Старі користувача типи поки залишаються в арсеналі доступних засобів, однак їхні дні полічені У цій главі було продемонстровано, що для користувача типи NET пропонують набагато більш багатий, всеохоплюючий механізм інкапсуляції складних даних в стовпці і змінні бази даних

Безсумнівно, компанія Microsoft зустріне великий опір користувачів, коли в наступних версіях видалить старі користувача типи з SQL Server, незважаючи на те, що в Books Online існує попередження на цей рахунок Равновероятно, що опір користувачів завадить швидкому впровадженню типів інтеграції CLR Будь-яка нова технологія спочатку повинна бути асимільована Також існує потреба в зовсім іншому підході до контролю над змінами, у міру того, як мислення розробників буде зміщуватися в бік ізольованих архітектур, орієнтованих на служби Ізольовані системи та інтеграція CLR ускладнили традиційний цикл розробки додатків, і в ньому співтовариство користувачів SQL Server ще накопичило достатнього досвіду

У деякий момент зявляться зручні стратегії міграції та внесення змін У міру еволюції архітектори даних і розробники усвідомлюють значення малих обєктів в базах даних І – прийміть це як прогноз – Компанія Microsoft відповість на тиск користувачів і розширить можливості так, щоб розмір обєктів бази даних подолав фатальний барєр у 8 Кбайт Вам не здається, що колись ви це вже чули

Можливо, практичність і функціональність подвигнут більшість розробників розморозити потенціал для користувача типів інтеграції CLR в своїх додатках і почати невідворотне наступ на світ обєктно-реляційних баз даних

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*