Dela via


Begränsningar för CLR-integreringsprogrammeringsmodell

gäller för:SQL ServerAzure 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_ACCESSeller 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_ACCESSoch 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.