it-swarm-eu.dev

Dll třetí strany v SQL Server CLR

Potřebuji použít třetí stranu DLL v spouštěcím kódu c # v SQL Server CLR

Když se ale pokusím přidat odkaz, zobrazí se pouze některé DLL z SQL Serveru.

Jak mohu přidat třetí strana dll na SQL Server?

14
AVEbrahimi

Můžete přidat pouze odkazy na ty sestavy, které byly zaregistrovány na serveru Sql. Pokud nejsou zaregistrovány, nebudou se v dialogu Přidat odkazy zobrazovat.

Existuje řada kroků, které musíte udělat, abyste zaregistrovali knihovnu DLL, nejdřív budete muset znovu nakonfigurovat databázi:

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

Po dokončení je server Sql povolen CLR. Dále budete muset zaregistrovat své shromáždění:

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

Pokud tento poslední skript běží správně, je nyní shromáždění zaregistrováno a zobrazí se v dialogu Přidat odkazy.

Co však budete muset zvážit, je zabezpečení aplikace vaší konfigurace CLR serveru Sql:

  1. Raději zaregistrujte shromáždění jako SAFE, pouze za výjimečných okolností byste měli použít EXTERNAL_ACCESS Nebo UNSAFE.
  2. Neočekávejte, že budete moci dělat vše, co můžete, na plně důvěryhodném CLR (tj. Ne CLR hostovaný serverem Sql) - SQLCLR je runtime v karanténě.
  3. Nepokoušejte se načíst sestavy dynamicky, protože funkce Assembly.Load() je záměrně omezena.
  4. Možná budete muset zajistit, aby byla knihovna třetích stran podepsána veřejným klíčem, pokud plánujete použití UNSAFE.
  5. Spouštění kódu běží v kontextu identity služby, která provozuje Sql Server (myslím!)
  6. Přístup k databázi provedený z hostovaného shromáždění (např. Prostřednictvím context connection = true;) Běží v kontextu připojeného uživatele, takže se musíte ujistit, že víte, jaký přístup má knihovna k vašim datům.
15
Matthew Abbott

Předpokládám, že se ptáte na alternativy k instalaci sestav SQL CLR z Visual Studio.

Mít kód v aplikaci Visual Studio není nutné.

Nasazení databázových objektů CLR na MSDN podrobně popisuje možnosti, včetně příkazů SQL a skriptů implementace.

5
Oded

Používám velmi velkou třetí stranu DLL, která vezme webovou stránku a převede ji na PDF.

PDF je uložen do sdílené složky a databáze je aktualizována, pokud jde o umístění a typ.

Toto je tříkrokový proces:

  1. Vytvořte aplikaci konzoly, která používá DLL od třetí strany k vytvoření PDF a akceptuje URL a FilePath jako parametry a vrací PDF velikost a počet stránek.

  2. Vytvořte uloženou proceduru CLR, která potom volá aplikaci konzoly na serveru

  3. Zabalím to vše do jediné uložené procedury, která volá aplikaci CLR k vytvoření PDF a poté do ní zapíšu metadata.

Uvědomuji si, že to není dokonalé a v žádném případě byste neměli dělat něco tak šíleného ve spoušti!

Zmíním se zde pouze o ostatních s otázkami ohledně používání DLL třetích stran v jejich CLR.

Doufám, že vypnutím konzoly cmd.exe a spuštěním knihovny DLL třetích stran namísto spuštění všeho v procesu, pokud dojde k chybě, nebude to mít nepříznivý dopad na SQL Server. To je to, co doufám.

Pokud je to opravdu špatný přístup, uveďte prosím komentář.

1
MikeTeeVee