Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Applies to:SQL Server
Azure SQL Managed Instance
Quando si compila una stored procedure gestita o un altro oggetto di database gestito, SQL Server esegue determinati controlli di codice che devono essere considerati. Questi controlli vengono eseguiti sull'assembly del codice gestito quando vengono registrati 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 potrebbero esserci percorsi di codice che potrebbero non essere mai effettivamente raggiunti in fase di esecuzione.
These code checks provide flexibility for registering third-party assemblies especially, so that an assembly isn't blocked where there's unsafe code designed to run in a client environment, but would never be executed in the hosted common language runtime (CLR). I requisiti che il codice gestito deve soddisfare dipendono dal fatto che l'assembly sia registrato come SAFE, EXTERNAL_ACCESSo UNSAFE.
SAFE è il livello di sicurezza più rigoroso.
Oltre alle restrizioni inserite negli assembly del codice gestito, vengono concesse anche delle autorizzazioni di sicurezza da accesso di codice. CLR supporta un modello di sicurezza per il codice gestito denominato CAS (Code Access Security). 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 Sicurezza dell'accesso al codice di integrazione CLR.
If the publisher policy is set, CREATE ASSEMBLY fails.
La sicurezza dall’accesso di codice non è più supportata
CLR usa la Sicurezza dall'accesso di codice (CAS, Code Access Security) in .NET Framework, non più supportata come limite di sicurezza. Un assembly CLR creato con PERMISSION_SET = SAFE potrebbe essere in grado di accedere alle risorse di sistema esterne, chiamare codice non gestito e acquisire privilegi sysadmin. In SQL Server 2017 (14.x) e versioni successive, l'opzione sp_configure clr strict security migliora la sicurezza degli assembly CLR.
clr strict security è abilitata per impostazione predefinita e considera gli assembly CLR SAFE e EXTERNAL_ACCESS come se fossero contrassegnati UNSAFE. È possibile disabilitare l'opzione clr strict security per la compatibilità con le versioni precedenti, ma questa operazione è sconsigliata.
Si consiglia di firmare tutti gli assembly con un certificato o una chiave asimmetrica tramite un account di accesso corrispondente che disponga dell'autorizzazione UNSAFE ASSEMBLY nel database master. Gli amministratori di SQL Server possono anche aggiungere assembly a un elenco di assembly che il motore di database dovrebbe considerare attendibile. For more information, see sys.sp_add_trusted_assembly.
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 ha esito negativo e viene visualizzato 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 sta usando
CREATE ASSEMBLY FROM <location>e tutti gli assembly a cui si fa riferimento e le relative dipendenze sono disponibili in<location>.Si sta usando
CREATE ASSEMBLY FROM <bytes ...>e tutti i riferimenti vengono specificati tramite byte separati da spazi.
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 CIL (Common Intermediate Language) e i metadati associati soddisfino i requisiti di sicurezza dei tipi, viene fornito con .NET Framework SDK.La sincronizzazione, ad esempio con la
SynchronizationAttributeclasse , non viene usata.I metodi finalizzatori non vengono usati.
Gli attributi personalizzati seguenti non sono consentiti negli assembly EXTERNAL_ACCESS:
System.ContextStaticAttributeSystem.MTAThreadAttributeSystem.Runtime.CompilerServices.MethodImplAttributeSystem.Runtime.CompilerServices.CompilationRelaxationsAttributeSystem.Runtime.Remoting.Contexts.ContextAttributeSystem.Runtime.Remoting.Contexts.SynchronizationAttributeSystem.Runtime.InteropServices.DllImportAttributeSystem.Security.Permissions.CodeAccessSecurityAttributeSystem.Security.SuppressUnmanagedCodeSecurityAttributeSystem.Security.UnverifiableCodeAttributeSystem.STAThreadAttributeSystem.ThreadStaticAttribute
SAFE
- Tutte le condizioni dell'assembly
EXTERNAL_ACCESSvengono controllate.
Runtime checks
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 è autorizzato a essere eseguito e viene generata un'eccezione.
UNSAFE
Non è possibile caricare un assembly in modo esplicito chiamando il System.Reflection.Assembly.Load() metodo da una matrice di byte o usando Reflection.Emit in modo implicito lo spazio dei nomi.
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.
SelfAffectingProcessMgmtSelfAffectingThreadingSynchronizationSharedStateExternalProcessMgmtExternalThreadingSecurityInfrastructureMayLeakOnAbortUI
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.
SAFE
Tutte le condizioni di EXTERNAL_ACCESS vengono controllate.
Related content
- librerie .NET Framework supportate
- Sicurezza dell'accesso al codice di integrazione CLR
- attributi di protezione host e di programmazione dell'integrazione CON CLR
- Creare un di assembly