Sdílet prostřednictvím


Přehled integrace CLR

platí pro:SQL Serverazure SQL Managed Instance

Clr (Common Language Runtime) je jádrem rozhraní .NET Framework a poskytuje spouštěcí prostředí pro veškerý kód rozhraní .NET Framework. Kód, který se spouští v modulu CLR, se označuje jako spravovaný kód. CLR poskytuje různé funkce a služby potřebné ke spouštění programů, včetně kompilace za běhu (JIT), přidělování a správy paměti, vynucení zabezpečení typů, zpracování výjimek, správa vláken a zabezpečení. Další informace najdete v tématu průvodce vývojem rozhraní .NET Framework.

Poznámka

Další informace o používání nového rozhraní .NET s jazykovými rozšířeními SQL Serveru naleznete v tématu Volání modulu runtime .NET v rozšířeních jazyka SQL Server.

Pomocí modulu CLR hostovaného v SQL Serveru (označované jako integrace CLR) můžete vytvářet uložené procedury, triggery, uživatelem definované funkce, uživatelem definované typy a agregace definované uživatelem ve spravovaném kódu. Vzhledem k tomu, že se spravovaný kód před spuštěním zkompiluje do nativního kódu, můžete v některých scénářích dosáhnout výrazného zvýšení výkonu.

Zabezpečení přístupu kódu

V SQL Serveru 2016 (13.x) a starších verzích zabránila sestavením v provádění určitých operací zabezpečení přístupu kódu (CAS).

CLR používá v rozhraní .NET Framework zabezpečení přístupu kódu (CAS), který se už nepodporuje jako hranice zabezpečení. Sestavení CLR vytvořené s PERMISSION_SET = SAFE může mít přístup k externím systémovým prostředkům, volání nespravovaného kódu a získání oprávnění správce systému. V SQL Serveru 2017 (14.x) a novějších verzích sp_configure možnost striktní zabezpečení, vylepšuje zabezpečení sestavení CLR. clr strict security je ve výchozím nastavení povolen a považuje SAFE a EXTERNAL_ACCESS sestavení, jako by byly označeny UNSAFE. Možnost clr strict security může být zakázaná kvůli zpětné kompatibilitě, ale nedoporučuje se.

Doporučujeme podepsat všechna sestavení certifikátem nebo asymetrickým klíčem s odpovídajícím přihlášením, které bylo uděleno UNSAFE ASSEMBLY oprávnění v databázi master. Správci SQL Serveru mohou také přidat sestavení do seznamu sestavení, kterým má databázový stroj důvěřovat. Další informace naleznete v tématu sys.sp_add_trusted_assembly.

Výhody integrace CLR

Transact-SQL je určená pro přímý přístup k datům a manipulaci s nimi v databázi. I když Transact-SQL exceluje při přístupu k datům a správě, nejedná se o plnohodnotný programovací jazyk. Například Transact-SQL nepodporuje pole, kolekce, pro každou smyčku, posun bitů nebo třídy. Některé z těchto konstruktorů je možné simulovat v jazyce Transact-SQL, ale spravovaný kód má integrovanou podporu těchto konstruktorů. V závislosti na scénáři můžou tyto funkce poskytnout přesvědčivý důvod k implementaci určitých databázových funkcí ve spravovaném kódu.

Visual Basic a C# nabízejí objektově orientované funkce, jako jsou zapouzdření, dědičnost a polymorfismus. Související kód je teď možné snadno uspořádat do tříd a oborů názvů. Když pracujete s velkým množstvím kódu serveru, umožňují vám tyto funkce snadněji uspořádat a udržovat kód.

Spravovaný kód je vhodnější než Transact-SQL pro výpočty a složitou logiku provádění a nabízí rozsáhlou podporu pro mnoho složitých úloh, včetně zpracování řetězců a regulárních výrazů. Díky funkcím, které najdete v rozhraní .NET Framework, máte přístup k tisícům předem připravených tříd a rutin. K těmto třídám lze snadno přistupovat z jakékoli uložené procedury, triggeru nebo uživatelem definované funkce. Knihovna základních tříd (BCL) obsahuje třídy, které poskytují funkce pro manipulaci s řetězci, pokročilé matematické operace, přístup k souborům, kryptografii a další.

Poznámka

I když je mnoho z těchto tříd k dispozici pro použití v kódu CLR v SQL Serveru, ty, které nejsou vhodné pro použití na straně serveru (například třídy oken), nejsou k dispozici. Další informace naleznete v tématu Podporované knihovny rozhraní .NET Framework.

Jednou z výhod spravovaného kódu je bezpečnost typů nebo záruka, že kód přistupuje k typům pouze dobře definovanými, povolenými způsoby. Před spuštěním spravovaného kódu modul CLR ověří, že je kód bezpečný. Kód se například zkontroluje, aby se zajistilo, že není načtena žádná paměť, která nebyla dříve zapsána. CLR může také pomoct zajistit, aby kód nezpůsoboval nespravovanou paměť.

Integrace CLR nabízí potenciál pro zvýšení výkonu. Informace najdete v tématu Výkon architektury integrace CLR.

Volba mezi Transact-SQL a spravovaným kódem

Při psaní uložených procedur, triggerů a uživatelem definovaných funkcí se musíte rozhodnout, jestli chcete použít tradiční jazyk Transact-SQL, nebo jazyk rozhraní .NET Framework, jako je Visual Basic nebo C#. Použijte Transact-SQL, když kód většinou provádí přístup k datům s minimální nebo žádnou procedurální logikou. Spravovaný kód použijte pro funkce a procedury náročné na procesor, které obsahují složitou logiku, nebo pokud chcete použít seznam BCL rozhraní .NET Framework.

Volba mezi spuštěním na serveru a spuštěním v klientovi

Dalším faktorem v rozhodování o tom, jestli použít Transact-SQL nebo spravovaný kód, je místo, kde se má váš kód nacházet, serverový počítač nebo klientský počítač. Na serveru je možné spustit Transact-SQL i spravovaný kód. Tím se kód a data umístí do blízkosti a umožní vám využít výpočetní výkon serveru. Na druhou stranu můžete chtít zabránit umístění úloh náročných na procesor na databázový server. Většinaklientských počítačů je dnes výkonná a můžete chtít využít tento výpočetní výkon tím, že do klienta umístíte co nejvíce kódu. Spravovaný kód může běžet na klientském počítači, zatímco Transact-SQL nemůže.

Volba mezi rozšířenými uloženými procedurami a spravovaným kódem

Rozšířené uložené procedury je možné sestavit tak, aby fungovaly s Transact-SQL uloženými procedurami. Rozšířené uložené procedury však mohou ohrozit integritu procesu SQL Serveru, zatímco spravovaný kód, který je ověřený jako typově bezpečný, nemůže. Správa paměti, plánování vláken a vláken a synchronizačních služeb jsou hlouběji integrovány mezi spravovaným kódem CLR a SQL Serverem. S integrací CLR máte bezpečnější způsob než rozšířené uložené procedury k zápisu uložených procedur, které potřebujete k provádění úloh, které nejsou v transact-SQL možné. Další informace o integraci CLR a rozšířených uložených procedurách naleznete v tématu Výkon architektury integrace CLR.