DLL третьої сторони в CLR SQL Server


14

Мені потрібно використовувати DLL сторонньої сторони в тригерному коді c # в CLR SQL Server

Але коли я намагаюся додати посилання, він просто показує деякі DLL з SQL Server.

Як я можу додати свій сторонній dll до SQL Server?


2
Таким же чином, як ви додаєте будь-які збірки SQL CLR ?

Відповіді:


14

Ви можете додавати посилання лише на ті збори, які були зареєстровані на сервері Sql. Якщо вони не зареєстровані, вони не відображатимуться у діалоговому вікні Додати посилання.

Для реєстрації DLL вам потрібно виконати декілька кроків. По-перше, вам потрібно буде налаштувати свою базу даних:

ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;

Після цього сервер Sql увімкнено CLR. Далі вам потрібно зареєструвати свою збірку:

CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE

Якщо цей останній скрипт працює правильно, збірка тепер зареєстрована і з’явиться в діалоговому вікні «Додати посилання».

Що вам потрібно враховувати, це безпека програми для вашої конфігурації CLR сервера Sql:

  1. Віддайте перевагу зареєструвати збірку як SAFEтільки у виняткових випадках, якщо ви їх використовуєте EXTERNAL_ACCESSабо UNSAFE.
  2. Не сподівайтесь, що зможете зробити все, що можете, на повному довірчому CLR (тобто, не на CLR, розміщеному Sql Server) - SQLCLR - це пісочне виконання.
  3. Не намагайтеся завантажувати збірки динамічно, як Assembly.Load()це цілеспрямовано обмежено.
  4. Можливо, вам потрібно буде забезпечити підпис третьої сторони відкритим ключем, якщо ви плануєте використовувати UNSAFE.
  5. Виконання коду запускається в контексті ідентичності служби, на якій працює сервер Sql (я думаю!)
  6. Доступ до бази даних, зроблений з розміщеної збірки (наприклад, через context connection = true;), працює в контексті підключеного користувача, тому вам потрібно переконатися, що ви знаєте, який доступ має бібліотека до ваших даних.

вище 4 ви пишете, що вам належить підписати збірку. Я отримав цю частину, і я міг це зробити за допомогою самопідписаних інструкцій тут: geekswithblogs.net/ktegels/archive/2006/02/16/… Але як встановити сертифікат, коли у вас немає приватного ключа, тобто коли Асамблея була створена та підписана довіреною третьою стороною? Наскільки я можу сказати у посиланні вище, для створення сертифіката потрібен приватний ключ. Це, здається, робить це неможливим?
JorgeSandoval

2
Також - маркування db як надійного ризиковано (і не потрібно для встановлення "Безпечної" збірки). Надійний - це один із способів підписати збірки для зовнішніх / небезпечних дозволів, але не рекомендується, оскільки будь-якій встановленій збірці CLR буде довіряти ...
JorgeSandoval,

5

Я припускаю, що ви запитуєте про альтернативи встановлення збірок SQL CLR від Visual Studio.

Наявність коду у Visual Studio не потрібно.

Розгортання об’єктів бази даних CLR в MSDN детально описує параметри, включаючи оператори SQL та сценарії розгортання.


1

Я використовую дуже велику сторонній DLL, який займає веб-сторінку і перетворює її в PDF.

PDF зберігається на загальному файлі, а база даних оновлюється відповідно до місця розташування та типу.

Це триетапний процес:

  1. Створіть консольний додаток, який використовує сторонній DLL для створення PDF-файлу та приймає URL-адресу та FilePath як параметри та повертає розмір та кількість PDF-сторінок.

  2. Створіть процедуру зберігання CLR, яка потім викликає консольний додаток на сервері

  3. Я обертаю це все в єдину збережену процедуру, яка викликає додаток CLR для створення PDF-файлу, а потім записую метадані про нього в базу даних.

Я усвідомлюю, що це не ідеально, і ні в якому разі не слід робити щось таке божевільне всередині тригера!

Я згадую це лише для інших із запитаннями про використання сторонніх DLL у своїх CLR.

Я сподіваюсь, що, віджимаючи консоль cmd.exe для запуску сторонньої DLL, замість того, щоб запускати все в програмі, якщо вона вийде з ладу, це не вплине так сильно на SQL Server. На це я сподіваюся.

Прокоментуйте, будь ласка, чи це дійсно поганий підхід і чому.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.