Integrazione di Common Language Runtime (CLR)

Si applica a: SQL Server Istanza gestita di SQL di Azure

SQL Server e Istanza gestita di SQL di Azure consentono di implementare alcune delle funzionalità con i linguaggi .NET usando l'integrazione CLR (Common Language Runtime) nativa come moduli lato server di SQL Server (procedure, funzioni e trigger). CLR fornisce codice gestito con servizi quali l'integrazione tra linguaggi diversi, la sicurezza da accesso di codice, la gestione della durata degli oggetti e il supporto per il debug e il profiling.

Per gli utenti e gli sviluppatori di applicazioni di SQL Server, l'integrazione con CLR consente di scrivere stored procedure, trigger, tipi definiti dall'utente, funzioni definite dall'utente (scalari e con valori di tabella) e funzioni di aggregazione definite dall'utente usando qualsiasi linguaggio .NET Framework, tra cui Visual Basic .NET e Visual C#. SQL Server include .NET Framework versione 4 preinstallata.

Questo video di 6 minuti illustra come usare CLR in Istanza gestita di SQL di Azure:

La sicurezza dell'accesso al 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 UNSAFE come se fossero contrassegnati EXTERNAL_ACCESS. L'opzione clr strict security può essere disabilitata per la compatibilità con le versioni precedenti, ma non è consigliata.

È consigliabile firmare tutti gli assembly tramite un certificato o una chiave asimmetrica, con un account di accesso corrispondente a cui è stata concessa UNSAFE ASSEMBLY l'autorizzazione nel master database. Gli amministratori di SQL Server possono anche aggiungere assembly a un elenco di assembly, considerato attendibile dal motore di database. Per altre, vedere sys.sp_add_trusted_assembly.

Quando usare i moduli CLR

L'integrazione con CLR consente di implementare funzionalità complesse disponibili in .NET Framework, ad esempio espressioni regolari, codice per l'accesso a risorse esterne (server, servizi Web, database), crittografia personalizzata e così via. Alcuni dei vantaggi dell'integrazione CLR lato server sono:

  • Un modello di programmazione migliore. I linguaggi .NET Framework sono molto più avanzati rispetto a Transact-SQL, offrendo costrutti e funzionalità in precedenza non disponibili per gli sviluppatori di SQL Server. Gli sviluppatori possono anche usare la potenza della libreria .NET Framework, che offre un ampio set di classi che possono essere usate per risolvere in modo rapido ed efficiente i problemi di programmazione.

  • Maggiore sicurezza e sicurezza. Il codice gestito è in esecuzione in un ambiente CLR, ospitato dal motore di database. SQL Server usa questa opzione per offrire un'alternativa più sicura e sicura alle stored procedure estese disponibili nelle versioni precedenti di SQL Server.

  • Possibilità di definire tipi di dati e funzioni di aggregazione. I tipi definiti dall'utente e le aggregazioni definite dall'utente sono due nuovi oggetti di database gestiti che espandono le funzionalità di archiviazione e query di SQL Server.

  • Sviluppo semplificato tramite un ambiente standardizzato. Lo sviluppo di database è integrato nelle versioni future dell'ambiente di sviluppo .NET di Microsoft Visual Studio. Gli sviluppatori utilizzano per lo sviluppo e il debug degli script e degli oggetti di database gli stessi strumenti impiegati per scrivere componenti e servizi .NET Framework di livello intermedio o di livello client.

  • Potenziale per migliorare le prestazioni e la scalabilità. In molte situazioni, i modelli di compilazione ed esecuzione del linguaggio .NET Framework consentono di ottenere prestazioni migliori rispetto a Transact-SQL.

Le estensioni del linguaggio di SQL Server forniscono un ambiente di esecuzione alternativo per i runtime vicini al motore di database. Per una discussione sulle differenze tra il CLR SQL e le estensioni del linguaggio SQL, vedere Confronto tra le estensioni del linguaggio di SQL Server e il CLR SQL.

Nella tabella seguente sono elencati gli articoli di questa sezione.

Articolo Descrizione
Panoramica dell'integrazione con CLR Descrive i tipi di oggetti che possono essere compilati usando l'integrazione con CLR. Esamina anche i requisiti per la compilazione di oggetti di database usando l'integrazione CON CLR.
Integrazione con CLR - Novità Vengono descritte le nuove caratteristiche di questa versione.
Architettura di integrazione CLR - Ambiente ospitato in CLR Vengono illustrati gli obiettivi di progettazione dell'integrazione con CLR.
Abilitazione dell'integrazione con CLR Viene illustrato come abilitare l'integrazione con CLR.