Condividi tramite


Restrizioni del modello di programmazione dell'integrazione CLR

Quando si compila una stored procedure gestita o un altro oggetto di database gestito, vengono eseguiti alcuni controlli del codice da SQL Server nell'assembly del codice gestito quando viene registrato per la prima volta nel database, usando l'istruzione CREATE ASSEMBLY e anche in fase di esecuzione. Il codice gestito viene controllato anche in fase di esecuzione perché in un assembly possono essere presenti percorsi di codice che potrebbero non essere mai effettivamente raggiunti in fase di esecuzione. Ciò offre flessibilità per la registrazione di assembly di terze parti, in particolare, in modo che un assembly non venga bloccato in cui è presente codice "non sicuro" progettato per l'esecuzione in un ambiente client, ma non verrà mai eseguito in CLR ospitato. I requisiti che il codice gestito deve soddisfare dipendono dal fatto che l'assembly sia registrato come SAFE, EXTERNAL_ACCESSo UNSAFE, SAFE sia il più rigoroso e che siano elencati di seguito.

Oltre alle restrizioni inserite negli assembly del codice gestito, vengono concesse anche delle autorizzazioni di sicurezza da accesso di codice. Common Language Runtime (CLR) supporta un modello di sicurezza denominato cas (Code Access Security) per il codice gestito. che prevede che le autorizzazioni vengano concesse agli assembly in base all'identità del codice. Gli assembly SAFE, EXTERNAL_ACCESS e UNSAFE presentano autorizzazioni di protezione dall'accesso di codice diverse. Per altre informazioni, vedere ClR Integration Code Access Security.

Controlli CREATE ASSEMBLY

Quando l'istruzione CREATE ASSEMBLY viene eseguita, vengono eseguiti i controlli seguenti per ogni livello di sicurezza. Se un controllo ha esito negativo, CREATE ASSEMBLY avrà esito negativo con un messaggio di errore.

Globale (qualsiasi livello di sicurezza)

Tutti gli assembly a cui si fa riferimento devono soddisfare uno o più dei criteri seguenti:

  • L'assembly è già registrato nel database.

  • L'assembly è uno degli assembly supportati. Per altre informazioni, vedere Librerie .NET Framework supportate.

  • Si usa CREATE ASSEMBLY FROM<il percorso> e tutti gli assembly a cui si fa riferimento e le relative dipendenze sono disponibili nel <percorso>.

  • Si usano CREATE ASSEMBLY FROM<byte ...> e tutti i riferimenti vengono specificati tramite byte separati da spazio.

EXTERNAL_ACCESS

Tutti gli assembly EXTERNAL_ACCESS devono soddisfare i criteri seguenti:

  • I campi statici non vengono usati per archiviare le informazioni. Sono consentiti campi statici di sola lettura.

  • Viene superato il test PEVerify. Lo strumento PEVerify (peverify.exe), che verifica che il codice MSIL e i metadati associati soddisfino i requisiti di sicurezza dei tipi, viene fornito con .NET Framework SDK.

  • La sincronizzazione, ad esempio con la SynchronizationAttribute classe , non viene usata.

  • I metodi finalizzatori non vengono utilizzati.

Gli attributi personalizzati seguenti non sono consentiti negli assembly EXTERNAL_ACCESS:

  • 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

CASSAFORTE

  • Tutte le condizioni dell'assembly EXTERNAL_ACCESS vengono controllate.

Controlli di runtime

In fase di esecuzione l'assembly del codice viene esaminato per verificare la presenza delle condizioni riportate di seguito. Se viene trovata una di queste condizioni, il codice gestito non potrà essere eseguito e verrà generata un'eccezione.

PERICOLOSO

Il caricamento di un assembly in modo esplicito chiamando il System.Reflection.Assembly.Load() metodo da una matrice di byte o in modo implicito tramite l'uso dello spazio dei Reflection.Emit nomi non è consentito.

EXTERNAL_ACCESS

Tutte le condizioni di UNSAFE vengono controllate.

Tutti i tipi e i metodi annotati con i valori dell'attributo di protezione host riportati di seguito dell'elenco supportato di assembly non sono consentiti.

  • SelfAffectingProcessMgmt

  • SelfAffectingThreading

  • Sincronizzazione

  • SharedState

  • ExternalProcessMgmt

  • ExternalThreading

  • SecurityInfrastructure

  • MayLeakOnAbort

  • INTERFACCIA UTENTE

Per altre informazioni su HPA e un elenco di tipi e membri non consentiti negli assembly supportati, vedere Attributi di protezione host e programmazione di integrazione CLR.

CASSAFORTE

Tutte le condizioni di EXTERNAL_ACCESS vengono controllate.

Vedere anche

Librerie .NET Framework supportate
Sicurezza dell'accesso al codice di integrazione CLR
Attributi di protezione host e programmazione di integrazione CLR
Creazione di un assembly