Sicurezza da accesso di codice dell'integrazione con CLR
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 ulteriori informazioni, vedere la sezione relativa alla sicurezza da accesso di codice in .NET Framework SDK (Software Development Kit).
I criteri di sicurezza che determinano le autorizzazioni concesse agli assembly vengono definiti in tre punti diversi:
Criteri del computer: si tratta dei criteri applicati per tutto il codice gestito in esecuzione nel computer in cui è installato SQL Server.
Criteri utente: criteri attivi per il codice gestito ospitato da un processo. Per SQL Server servizio è in esecuzione.
Criterio host: questo è il criterio configurato dall'host di CLR (in questo caso, SQL Server) attivo per il codice gestito in esecuzione in tale 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 dell'accesso al codice CLR vengono in genere incluse nelle interfacce di programmazione dell'applicazione gestite che richiedono l'autorizzazione corrispondente prima di consentire l'accesso alla risorsa. La richiesta per l'autorizzazione viene soddisfatta solo se tutti i chiamanti (a livello di assembly) nello stack di chiamate dispongono dell'autorizzazione di risorsa corrispondente.
Il set di autorizzazioni di sicurezza di accesso al codice concesso al codice gestito durante l'esecuzione all'interno di SQL Server concede un set di autorizzazioni a un assembly caricato in SQL Server, il set finale di autorizzazioni concesse al codice utente può essere limitato ulteriormente dai criteri a livello di utente e computer.
Set di autorizzazioni a livello di criteri host di SQL Server
Il set di autorizzazioni di sicurezza di accesso al codice concesse agli assembly dal livello di criteri host SQL Server è determinato dal set di autorizzazioni specificato durante la creazione dell'assembly. Sono disponibili tre set di autorizzazioni: SAFE
EXTERNAL_ACCESS
e UNSAFE
(specificati usando l'opzione PERMISSION_SETdi CREATE ASSEMBLY (Transact-SQL)).
SQL Server. Questi criteri non sono utilizzati per il dominio applicazione predefinito attivo al momento della creazione di un'istanza di CLR.
Il SQL Server fixedpolicy per gli assembly di sistema e i criteri specificati dall'utente per gli assembly utente.
I criteri predefiniti per gli assembly di CLR e del sistema SQL Server concedono l'attendibilità totale.
La parte specificata dall'utente del criterio host SQL Server si basa sul proprietario dell'assembly che specifica uno dei tre bucket di autorizzazione per ogni assembly. Per ulteriori informazioni sulle autorizzazioni di sicurezza elencate in basso, 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 come file, la rete, variabili di ambiente o il Registro di sistema.
Gli assembly SAFE
dispongono delle autorizzazioni e dei valori seguenti:
Autorizzazione | Valori/Descrizione |
---|---|
SecurityPermission |
Execution: autorizzazione a eseguire il codice gestito. |
SqlClientPermission |
Context connection = true , context connection = yes : è possibile utilizzare solo la connessione di contesto e la stringa di connessione può specificare solo un valore "context connection=true" o "context connection=yes".AllowBlankPassword = false: Le password vuote non sono consentite. |
EXTERNAL_ACCESS
EXTERNAL_ACCESS gli assembly hanno le stesse autorizzazioni degli SAFE
assembly, con la possibilità aggiuntiva di accedere a risorse di sistema esterne, ad esempio file, reti, variabili di ambiente e registro.
Gli assembly EXTERNAL_ACCESS
dispongono anche delle autorizzazioni e dei valori seguenti:
Autorizzazione | Valori/Descrizione |
---|---|
DistributedTransactionPermission |
Unrestricted: Le transazioni distribuite sono consentite. |
DNSPermission |
Unrestricted: Autorizzazione per richiedere informazioni dai server dei nomi di dominio. |
EnvironmentPermission |
Unrestricted: l'accesso completo alle variabili di sistema e di ambiente dell'utente è consentito. |
EventLogPermission |
Administer: consente di eseguire diverse operazioni. Esse sono: creare un'origine eventi, leggere i log esistenti, eliminare i log o le origini eventi, rispondere alle immissioni, cancellare un log eventi, mettersi in attesa di eventi e accedere a una raccolta di tutti i log eventi. |
FileIOPermission |
Unrestricted: l'accesso completo a file e cartelle è consentito. |
KeyContainerPermission |
Unrestricted: l'accesso completo ai contenitori di chiavi è consentito. |
NetworkInformationPermission |
Access: l'esecuzione del ping è consentita. |
RegistryPermission |
Concede diritti di lettura a HKEY_CLASSES_ROOT , HKEY_LOCAL_MACHINE , HKEY_CURRENT_USER , HKEY_CURRENT_CONFIG e HKEY_USERS. |
SecurityPermission |
Assertion: capacità di asserire che tutti i chiamanti del codice dispongono dell'autorizzazione necessaria per l'operazione.ControlPrincipal: capacità di manipolare l'oggetto Principal.Execution: autorizzazione a eseguire il codice gestito.SerializationFormatter: capacità di fornire servizi di serializzazione. |
Smtppermission | Access: le connessioni in uscita alla porta 25 dell'host SMTP sono consentite. |
SocketPermission |
Connect: le connessioni in uscita (tutte le porte, tutti i protocolli) su un indirizzo di trasporto sono consentite. |
SqlClientPermission |
Unrestricted: l'accesso completo all'origine dati è consentito. |
StorePermission |
Unrestricted: l'accesso completo agli archivi certificati X.509 è consentito. |
WebPermission |
Connect: le connessioni in uscita a risorse Web sono consentite. |
UNSAFE
UNSAFE consente agli assembly di accedere senza restrizioni alle risorse, sia all'interno che all'esterno SQL Server. Il codice eseguito all'interno di un assembly UNSAFE
può chiamare anche il codice non gestito.
Agli assembly UNSAFE
viene concessa l'autorizzazione FullTrust
.
Importante
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
Per impostazione predefinita, gli assembly vengono eseguiti come account del servizio SQL Server, l'autorizzazione da eseguire EXTERNAL_ACCESS
deve essere concessa solo agli account di accesso attendibili per l'esecuzione come account del servizio. Dal punto di vista della sicurezza, gli assembly EXTERNAL_ACCESS
e UNSAFE
sono identici. Gli assembly EXTERNAL_ACCESS
offrono tuttavia una protezione e un'affidabilità maggiore rispetto agli assembly UNSAFE
. Se si UNSAFE
specifica , il codice nell'assembly può eseguire operazioni non valide sul SQL Server. Per altre informazioni sulla creazione di assembly CLR in SQL Server, vedere Gestione degli assembly di integrazione CLR.
Accesso a risorse esterne
Se un tipo definito dall'utente, una stored procedure o un altro tipo di assembly del 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 EXTERNAL_ACCESS
set di autorizzazioni o UNSAFE
e il codice gestito tenta di accedere alle risorse esterne, SQL Server applica le regole seguenti:
Se | Risultato |
---|---|
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 rappresenta il chiamante originale, mentre il chiamante è stato rappresentato. | L'accesso verrà effettuato nel contesto di sicurezza del chiamante e non in quello dell'account del servizio. |
Riepilogo dei set di autorizzazioni
Nel grafico seguente sono riepilogate le restrizioni e le autorizzazioni concesse ai set di autorizzazioni SAFE
, EXTERNAL_ACCESS
e UNSAFE
.
SAFE |
EXTERNAL_ACCESS |
UNSAFE |
|
Code Access Security Permissions |
Sola esecuzione | Esecuzione più accesso a risorse esterne | Senza restrizioni (incluso P/Invoke) |
Programming model restrictions |
Sì | Sì | Nessuna restrizione |
Verifiability requirement |
Sì | Sì | No |
Local data access |
Sì | Sì | Sì |
Ability to call native code |
No | No | Sì |
Vedere anche
Sicurezza per l'integrazione con CLR
Attributi di protezione host e programmazione dell'integrazione con CLR
Restrizioni relative al modello di programmazione dell'integrazione con CLR
Ambiente CLR