Begränsningar för CLR-integreringsprogrammeringsmodell
gäller för:SQL Server
Azure SQL Managed Instance
När du skapar en hanterad lagrad procedur eller ett annat hanterat databasobjekt utför SQL Server vissa kodkontroller som måste beaktas. Dessa kontroller utförs på den hanterade kodsammansättningen när den först registreras i databasen, med hjälp av CREATE ASSEMBLY
-instruktionen och även vid körning. Den hanterade koden kontrolleras också vid körning eftersom det i en sammansättning kan finnas kodsökvägar som kanske aldrig nås vid körning.
De här kodkontrollerna ger flexibilitet för att registrera sammansättningar från tredje part, särskilt så att en sammansättning inte blockeras där det finns osäker kod som är utformad för att köras i en klientmiljö, men aldrig skulle köras i den värdbaserade COMMON Language Runtime (CLR). Kraven som den hanterade koden måste uppfylla beror på om sammansättningen är registrerad som SAFE
, EXTERNAL_ACCESS
eller UNSAFE
.
SAFE
är den strängaste säkerhetsnivån.
Förutom begränsningar för de hanterade kodsammansättningarna finns det även kodsäkerhetsbehörigheter som beviljas. CLR stöder en säkerhetsmodell som kallas kodåtkomstsäkerhet (CAS) för hanterad kod. I den här modellen beviljas behörigheter till sammansättningar baserat på kodens identitet.
SAFE
, EXTERNAL_ACCESS
och UNSAFE
sammansättningar har olika CAS-behörigheter. Mer information finns i CLR-integreringskodåtkomstsäkerhet.
Om utgivarprincip har angetts misslyckas CREATE ASSEMBLY
.
SKAPA SAMMANSÄTTNINGskontroller
När CREATE ASSEMBLY
-instruktionen körs utförs följande kontroller för varje säkerhetsnivå. Om en kontroll misslyckas misslyckas CREATE ASSEMBLY
med ett felmeddelande.
Global (alla säkerhetsnivåer)
Alla refererade sammansättningar måste uppfylla ett eller flera av följande kriterier:
Sammansättningen är redan registrerad i databasen.
Sammansättningen är en av de sammansättningar som stöds. Mer information finns i .NET Framework-bibliotek som stöds.
Du använder
CREATE ASSEMBLY FROM <location>
och alla refererade sammansättningar och deras beroenden är tillgängliga i<location>
.Du använder
CREATE ASSEMBLY FROM <bytes ...>
och alla referenser anges via blankstegsavgränsade byte.
EXTERNAL_ACCESS
Alla EXTERNAL_ACCESS
sammansättningar måste uppfylla följande kriterier:
Statiska fält används inte för att lagra information. Skrivskyddade statiska fält tillåts.
PEVerify-testet har godkänts. PEVerify-verktyget (
peverify.exe
), som kontrollerar att den gemensamma mellanliggande språkkoden (CIL) och tillhörande metadata uppfyller typsäkerhetskraven, tillhandahålls med .NET Framework SDK.Synkronisering, till exempel med klassen
SynchronizationAttribute
, används inte.Finalizer-metoder används inte.
Följande anpassade attribut tillåts inte i EXTERNAL_ACCESS
sammansättningar:
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
SÄKER
- Alla
EXTERNAL_ACCESS
sammansättningsvillkor kontrolleras.
Körningskontroller
Vid körning kontrolleras kodsammansättningen för följande villkor. Om något av dessa villkor hittas tillåts inte den hanterade koden att köras och ett undantag genereras.
OSÄKER
Du kan inte läsa in en sammansättning, antingen explicit genom att anropa metoden System.Reflection.Assembly.Load()
från en bytematris eller implicit med hjälp av Reflection.Emit
namnrymd.
EXTERNAL_ACCESS
Alla UNSAFE
villkor kontrolleras.
Alla typer och metoder som har kommenterats med följande värden för värdskyddsattribut (HPA) i listan över sammansättningar som stöds tillåts inte.
SelfAffectingProcessMgmt
SelfAffectingThreading
Synchronization
SharedState
ExternalProcessMgmt
ExternalThreading
SecurityInfrastructure
MayLeakOnAbort
UI
Mer information om HPA:er och en lista över otillåtna typer och medlemmar i de sammansättningar som stöds finns i Värdskyddsattribut och CLR-integreringsprogrammering.
SÄKER
Alla EXTERNAL_ACCESS
villkor kontrolleras.