Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Applies to:SQL Server
Common Language Runtime (CLR) supporta un modello di sicurezza definito sicurezza dall'accesso di codice per il codice gestito che prevede che le autorizzazioni vengano concesse agli assembly in base all'identità del codice. Per altre informazioni, vedere Sicurezza dall'accesso al codice.
I criteri di sicurezza che determinano le autorizzazioni concesse agli assembly vengono definiti in tre punti diversi:
Machine policy: This policy is in effect for all managed code running in the machine on which SQL Server is installed.
User policy: This policy is in effect for managed code hosted by a process. Per SQL Server, i criteri utente sono specifici dell'account Di Windows in cui è in esecuzione il servizio SQL Server.
Host policy: This policy is set up by the host of the CLR (in this case, SQL Server) that is in effect for managed code running in that host.
Il meccanismo di sicurezza da accesso di codice supportato da CLR si basa sul presupposto che il runtime possa ospitare codice completamente o parzialmente attendibile. Le risorse protette dalla sicurezza dall'accesso al codice CLR vengono in genere incapsulate da interfacce di programmazione dell'applicazione gestite che richiedono l'autorizzazione corrispondente prima di consentire l'accesso alla risorsa. La richiesta di autorizzazione viene soddisfatta solo se tutti i chiamanti a livello di assembly nello stack di chiamate dispongono dell'autorizzazione corrispondente per la risorsa.
Il set di autorizzazioni di sicurezza di accesso al codice concesse al codice gestito durante l'esecuzione all'interno di SQL Server è l'intersezione del set di autorizzazioni concesse dai tre livelli di criteri precedenti. Anche se SQL Server concede un set di autorizzazioni a un assembly caricato in SQL Server, il set finale di autorizzazioni concesse al codice utente potrebbe essere ulteriormente limitato dai criteri a livello di utente e computer.
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.
Set di autorizzazioni a livello di criteri host di SQL Server
Il set di autorizzazioni di sicurezza per l'accesso al codice concesso agli assembly dal livello di criteri host di SQL Server è determinato dal set di autorizzazioni specificato durante la creazione dell'assembly. There are three permission sets: SAFE, EXTERNAL_ACCESS, and UNSAFE (specified using the PERMISSION_SET option of CREATE ASSEMBLY).
SQL Server fornisce un livello di criteri di sicurezza a livello di host a CLR durante l'hosting. Questo criterio è un livello di criteri aggiuntivo al di sotto dei due livelli di criteri sempre attivi. Questo criterio viene impostato per ogni dominio applicazione creato da SQL Server. Questo criterio non è destinato al dominio applicazione predefinito che sarebbe attivo quando SQL Server crea un'istanza di CLR.
I criteri a livello di host di SQL Server sono una combinazione di criteri fissi di SQL Server per gli assembly di sistema e i criteri specificati dall'utente per gli assembly utente.
I criteri fissi per gli assembly CLR e gli assembly di sistema di SQL Server concedono loro l'attendibilità totale.
La parte specificata dall'utente dei criteri host di SQL Server si basa sul proprietario dell'assembly che specifica uno dei tre bucket di autorizzazione per ogni assembly. Per altre informazioni sulle autorizzazioni di sicurezza seguenti, vedere .NET Framework SDK.
SAFE
È consentito solo il calcolo interno e l'accesso locale ai dati.
SAFE è il set di autorizzazioni più restrittivo. Il codice eseguito da un assembly con autorizzazioni SAFE non può accedere a risorse di sistema esterne, ad esempio file, rete, variabili di ambiente o registro.
SAFE assembly dispongono delle autorizzazioni e dei valori seguenti:
| Permission | Valori/Descrizione |
|---|---|
SecurityPermission |
Execution: autorizzazione per eseguire codice gestito. |
SqlClientPermission |
Context connection = true, context connection = yes: è possibile usare solo la connessione al contesto e la stringa di connessione può specificare solo il valore context connection=true o context connection=yes.AllowBlankPassword = false: le password vuote non sono consentite. |
EXTERNAL_ACCESS
EXTERNAL_ACCESS assembly hanno le stesse autorizzazioni degli assembly SAFE, con la possibilità aggiuntiva di accedere a risorse di sistema esterne, ad esempio file, reti, variabili di ambiente e registro.
EXTERNAL_ACCESS assembly hanno anche le autorizzazioni e i valori seguenti:
| Permission | Valori/Descrizione |
|---|---|
DistributedTransactionPermission |
Unrestricted: sono consentite transazioni distribuite. |
DNSPermission |
Unrestricted: autorizzazione per richiedere informazioni dai server dei nomi di dominio. |
EnvironmentPermission |
Unrestricted: è consentito l'accesso completo alle variabili di ambiente di sistema e utente. |
EventLogPermission |
Administer: sono consentite le azioni seguenti: creare un'origine evento, leggere i log esistenti, eliminare origini eventi o log, rispondere alle voci, cancellare un registro eventi, ascoltare gli eventi e accedere a una raccolta di tutti i log eventi. |
FileIOPermission |
Unrestricted: è consentito l'accesso completo a file e cartelle. |
KeyContainerPermission |
Unrestricted: è consentito l'accesso completo ai contenitori delle chiavi. |
NetworkInformationPermission |
Access: il ping è consentito. |
RegistryPermission |
Consente ai diritti di lettura di HKEY_CLASSES_ROOT, HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIGe HKEY_USERS. |
SecurityPermission |
Assertion: possibilità di asserire che tutti i chiamanti di questo codice dispongono dell'autorizzazione necessaria per l'operazione.ControlPrincipal: possibilità di modificare l'oggetto principale.Execution: autorizzazione per eseguire codice gestito.SerializationFormatter: possibilità di fornire servizi di serializzazione. |
SmtpPermission |
Access: sono consentite le connessioni in uscita alla porta host SMTP 25. |
SocketPermission |
Connect: sono consentite le connessioni in uscita (tutte le porte, tutti i protocolli) in un indirizzo di trasporto. |
SqlClientPermission |
Unrestricted: è consentito l'accesso completo all'origine dati. |
StorePermission |
Unrestricted: è consentito l'accesso completo agli archivi certificati X.509. |
WebPermission |
Connect: sono consentite le connessioni in uscita alle risorse Web. |
UNSAFE
UNSAFE consente agli assembly di accedere senza restrizioni alle risorse, sia all'interno che all'esterno di SQL Server. Il codice eseguito da un assembly UNSAFE può anche chiamare codice non gestito.
agli assembly UNSAFE vengono assegnati FullTrust.
Impostazioni di autorizzazione consigliate
SAFE è l'impostazione di autorizzazione consigliata per gli assembly che eseguono attività di calcolo e gestione dei dati senza accedere alle risorse all'esterno di SQL Server.
EXTERNAL_ACCESS è consigliabile per gli assembly che accedono alle risorse all'esterno di SQL Server.
EXTERNAL_ACCESS assembly per impostazione predefinita viene eseguito come account del servizio SQL Server. È possibile EXTERNAL_ACCESS codice rappresentare in modo esplicito il contesto di sicurezza dell'autenticazione di Windows del chiamante. Poiché l'impostazione predefinita consiste nell'eseguire come account del servizio SQL Server, l'autorizzazione per eseguire EXTERNAL_ACCESS deve essere assegnata solo agli account di accesso attendibili per l'esecuzione come account del servizio.
Dal punto di vista della sicurezza, gli assembly di EXTERNAL_ACCESS e UNSAFE sono identici. Tuttavia, gli assembly EXTERNAL_ACCESS offrono varie protezioni di affidabilità e affidabilità che non si trovano negli assembly UNSAFE.
Specificando UNSAFE è possibile che il codice nell'assembly esegua operazioni non valide sullo spazio di elaborazione di SQL Server e quindi possa compromettere l'affidabilità e la scalabilità di SQL Server. Per altre informazioni sulla creazione di assembly CLR in SQL Server, vedere Gestire assembly di integrazione CLR.
Important
SQL Server contiene assembly CLR usati dal motore di database per fornire determinate funzionalità. L'assembly Microsoft.SQLServer.Types incluso nell'installazione di SQL Server viene visualizzato nei metadati come assembly UNSAFE. Questo si verifica per motivi strutturali. Questi assembly sono considerati attendibili e sicuri per impostazione predefinita.
Accedere alle risorse esterne
Se un tipo definito dall'utente (UDT), una stored procedure o un altro tipo di assembly costrutto viene registrato con il set di autorizzazioni SAFE, il codice gestito in esecuzione nel costrutto non è in grado di accedere alle risorse esterne. Tuttavia, se vengono specificati i set di autorizzazioni EXTERNAL_ACCESS o UNSAFE e il codice gestito tenta di accedere a risorse esterne, SQL Server applica le regole seguenti:
| If | Then |
|---|---|
| Il contesto di esecuzione corrisponde a un account di accesso di SQL Server. | I tentativi di accesso a risorse esterne vengono negati e viene generata un'eccezione di sicurezza. |
| Il contesto di esecuzione corrisponde a un account di accesso di Windows e rappresenta il chiamante originale. | L'accesso alla risorsa esterna viene eseguito nel contesto di sicurezza dell'account del servizio SQL Server. |
| Il chiamante non è il chiamante originale. | L'accesso viene negato e viene generata un'eccezione di sicurezza. |
| Il contesto di esecuzione corrisponde a un account di accesso di Windows e il contesto di esecuzione è il chiamante originale e il chiamante viene rappresentato. | L'accesso usa il contesto di sicurezza del chiamante e non l'account del servizio. |
Riepilogo del set di autorizzazioni
Il grafico seguente riepiloga le restrizioni e le autorizzazioni concesse ai set di autorizzazioni SAFE, EXTERNAL_ACCESSe UNSAFE.
| Functionality | SAFE |
EXTERNAL_ACCESS |
UNSAFE |
|---|---|---|---|
| Autorizzazioni di sicurezza per l'accesso al codice | Execute only | Esecuzione più accesso a risorse esterne | Senza restrizioni (incluso P/Invoke) |
| Restrizioni del modello di programmazione | Yes | Yes | No restrictions |
| Verifiability requirement | Yes | Yes | No |
| Accesso ai dati locali | Yes | Yes | Yes |
| Possibilità di chiamare il codice nativo | No | No | Yes |
Related content
- di sicurezza dell'integrazione con CLR
- attributi di protezione host e di programmazione dell'integrazione CON CLR
- restrizioni del modello di programmazione di integrazione CLR
- architettura di integrazione CLR - Ambiente ospitato clr