Sdílet prostřednictvím


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_ACCESSnebo 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_ACCESSa 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 , selže.

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.