Omezení programovacího modelu integrace CLR
platí pro:SQL Serverazure SQL Managed Instance
Když sestavíte spravovanou uloženou proceduru nebo jiný spravovaný databázový objekt, SQL Server provede určité kontroly kódu, které je potřeba zvážit. Tyto kontroly se provádějí na sestavení spravovaného kódu při první registraci v databázi pomocí příkazu CREATE ASSEMBLY
a také za běhu. Spravovaný kód je také kontrolován za běhu, protože v sestavení můžou být cesty ke kódu, které se nikdy ve skutečnosti nedosáhly za běhu.
Tyto kontroly kódu poskytují flexibilitu při registraci sestavení třetích stran, takže sestavení není blokováno, pokud je nebezpečný kód navržený ke spuštění v klientském prostředí, ale nikdy by se nespustí v hostovaném modulu CLR (Common Language Runtime). Požadavky, které musí spravovaný kód splňovat, závisí na tom, zda je sestavení registrováno jako SAFE
, EXTERNAL_ACCESS
nebo UNSAFE
.
SAFE
je nejvyšší úroveň zabezpečení.
Kromě omezení, která se umisťují do sestavení spravovaného kódu, existují také oprávnění zabezpečení kódu, která jsou udělena. CLR podporuje model zabezpečení označovaný jako zabezpečení přístupu kódu (CAS) pro spravovaný kód. V tomto modelu jsou oprávnění udělena sestavením na základě identity kódu. sestavení SAFE
, EXTERNAL_ACCESS
a UNSAFE
mají různá oprávnění CAS. Další informace naleznete v tématu CLR integration Code Access Security.
Pokud je nastavená zásad vydavatele
KONTROLY SESTAVENÍ CREATE
Po spuštění příkazu CREATE ASSEMBLY
se pro každou úroveň zabezpečení provádějí následující kontroly. Pokud nějaká kontrola selže, CREATE ASSEMBLY
selže s chybovou zprávou.
Globální (jakákoli úroveň zabezpečení)
Všechna odkazovaná sestavení musí splňovat jedno nebo více následujících kritérií:
Sestavení je již zaregistrováno v databázi.
Sestavení je jedním z podporovaných sestavení. Další informace naleznete v tématu Podporované knihovny rozhraní .NET Framework.
Používáte
CREATE ASSEMBLY FROM <location>
a všechna odkazovaná sestavení a jejich závislosti jsou k dispozici v<location>
.Používáte
CREATE ASSEMBLY FROM <bytes ...>
a všechny odkazy jsou určené mezerami oddělenými bajty.
EXTERNAL_ACCESS
Všechna EXTERNAL_ACCESS
sestavení musí splňovat následující kritéria:
Statická pole se nepoužívají k ukládání informací. Statická pole jen pro čtení jsou povolená.
Test PEVerify je úspěšný. Nástroj PEVerify (
peverify.exe
), který kontroluje, zda kód CIL (Common Intermediate Language) a přidružená metadata splňují požadavky na bezpečnost typů, je k dispozici se sadou .NET Framework SDK.Synchronizace, například s
SynchronizationAttribute
třídou, se nepoužívá.Metody finalizátoru se nepoužívají.
Následující vlastní atributy jsou v sestaveních EXTERNAL_ACCESS
zakázány:
System.ContextStaticAttribute
System.MTAThreadAttribute
System.Runtime.CompilerServices.MethodImplAttribute
System.Runtime.CompilerServices.CompilationRelaxationsAttribute
System.Runtime.Remoting.Contexts.ContextAttribute
System.Runtime.Remoting.Contexts.SynchronizationAttribute
System.Runtime.InteropServices.DllImportAttribute
System.Security.Permissions.CodeAccessSecurityAttribute
System.Security.SuppressUnmanagedCodeSecurityAttribute
System.Security.UnverifiableCodeAttribute
System.STAThreadAttribute
System.ThreadStaticAttribute
TREZOR
- Jsou kontrolovány všechny
EXTERNAL_ACCESS
podmínky sestavení.
Kontroly za běhu
Za běhu je sestavení kódu kontrolováno pro následující podmínky. Pokud se najde některá z těchto podmínek, spravovaný kód se nesmí spustit a vyvolá se výjimka.
NEBEZPEČNÝ
Sestavení nelze načíst explicitně voláním metody System.Reflection.Assembly.Load()
z pole bajtů nebo implicitně pomocí Reflection.Emit
oboru názvů.
EXTERNAL_ACCESS
Zkontrolují se všechny UNSAFE
podmínky.
Všechny typy a metody anotované s následujícími hodnotami atributu ochrany hostitele (HPA) v podporovaném seznamu sestavení jsou zakázány.
SelfAffectingProcessMgmt
SelfAffectingThreading
Synchronization
SharedState
ExternalProcessMgmt
ExternalThreading
SecurityInfrastructure
MayLeakOnAbort
UI
Další informace o rozhraníCH HPA a seznamu zakázaných typů a členů v podporovaných sestaveních naleznete v tématu Atributy ochrany hostitele a programování integrace CLR.
TREZOR
Zkontrolují se všechny EXTERNAL_ACCESS
podmínky.
Související obsah
- podporované knihovny rozhraní .NET Framework
- zabezpečení přístupu kódu integrace CLR
- atributy ochrany hostitele a programování integrace CLR
- Vytvoření sestavení