programmazione per SQL Server e attributi di protezione host
Per poter caricare ed eseguire codice gestito in un host di SQL Server, è necessario soddisfare i requisiti dell'host sia per la sicurezza dall'accesso di codice che per la protezione delle risorse dell'host. I requisiti di sicurezza dall'accesso di codice sono specificati da uno di tre set di autorizzazioni di SQL Server: SAFE, EXTERNAL-ACCESS o UNSAFE. L'esecuzione del codice nell'ambito del set di autorizzazioni SAFE o EXTERNAL-ACCESS deve evitare alcuni tipi o membri con l'attributo HostProtectionAttribute applicato. HostProtectionAttribute non è un'autorizzazione di sicurezza, ma piuttosto una garanzia di affidabilità perché identifica specifici costrutti del codice, tipi o metodi, che l'host potrebbe non consentire. L'utilizzo di HostProtectionAttribute impone un modello di programmazione che consente di migliorare la stabilità dell'host.
Nota
La sicurezza dall'accesso al codice (CAS) è stata deprecata in tutte le versioni di .NET Framework e .NET. Le versioni recenti di .NET non rispettano le annotazioni CAS e generano errori se vengono usate API correlate alla CAS. Gli sviluppatori devono cercare mezzi alternativi per eseguire attività di sicurezza.
Attributi di protezione host
Gli attributi di protezione dell'host identificano i tipi o membri non idonei per il modello di programmazione dell'host e che rappresentano i seguenti livelli crescenti di minaccia per l'affidabilità:
Sono altrimenti innocui.
Possono determinare la destabilizzazione del codice utente gestito dal server.
Possono determinare la destabilizzazione del processo del server stesso.
SQL Server non consente l'uso di un tipo o membro con HostProtectionAttribute che specifica un valore HostProtectionResource uguale a SharedState, Synchronization, MayLeakOnAbort o ExternalProcessMgmt. In questo modo si impedisce agli assembly di chiamare membri che consentono la condivisione dello stato, eseguono sincronizzazioni, possono causare perdite di risorse al momento della terminazione o compromettono l'integrità del processo di SQL Server.
Tipi e membri non consentiti
La tabella seguente identifica i tipi e membri i cui valori HostProtectionResource non sono consentiti da SQL Server.
Set di autorizzazioni di SQL Server
SQL Server consente agli utenti di specificare i requisiti di affidabilità per il codice distribuito in un database. Al caricamento degli assembly nel database, l'autore dell'assembly può specificare uno di tre set di autorizzazioni per tale assembly: SAFE, EXTERNAL-ACCESS o UNSAFE.
Set di autorizzazioni | SAFE | EXTERNAL-ACCESS | UNSAFE |
---|---|---|---|
Sicurezza dall'accesso di codice | Sola esecuzione | Esecuzione più accesso a risorse esterne | Senza restrizioni |
Restrizioni del modello di programmazione | Sì | Sì | Nessuna restrizione |
Requisito di verificabilità | Sì | Sì | No |
Possibilità di chiamare il codice nativo | No | No | Sì |
Grazie alle restrizioni associate in termini di modello di programmazione consentito, SAFE rappresenta la modalità più affidabile e protetta. Il codice SAFE dispone di funzionalità di sicurezza e affidabilità elevata. Gli assembly SAFE dispongono di autorizzazioni sufficienti per l'esecuzione, l'elaborazione di calcoli e l'accesso al database locale. Gli assembly SAFE devono essere effettivamente indipendenti dai tipi e non possono chiamare codice non gestito.
Il livello EXTERNAL-ACCESS rappresenta un'opzione di sicurezza intermedia, consentendo al codice di accedere alle risorse esterne al database, ma comunque con l'affidabilità e la protezione del livello SAFE.
UNSAFE è un set di autorizzazioni per codice altamente attendibile, che può essere creato solo dagli amministratori di database. Questo codice attendibile non presenta alcuna restrizione di accesso di codice e può chiamare codice non gestito (nativo).
SQL Server usa il livello dei criteri di sicurezza dall'accesso di codice a livello dell'host per configurare criteri host che concedono uno dei tre set di autorizzazioni in base al set di autorizzazioni archiviato nei cataloghi di SQL Server. Il codice gestito in esecuzione all'interno del database ottiene sempre uno di questi set di autorizzazioni di accesso per il codice.
Restrizioni del modello di programmazione
Il modello di programmazione per il codice gestito in SQL Server richiede funzioni, procedure e tipi che non richiedono l'uso dello stato mantenuto tra più chiamate né la condivisione dello stato tra più sessioni utente. Come descritto in precedenza, la presenza dello stato condiviso può inoltre determinare eccezioni critiche che influiscono sulla scalabilità e l'affidabilità dell'applicazione.
Considerati questi aspetti, SQL Server non consente l'uso di variabili statiche e membri dati statici. Per gli assembly SAFE ed EXTERNAL-ACCESS, SQL Server esamina i metadati dell'assembly nella fase CREATE ASSEMBLY e la creazione di tali assembly ha esito negativo se viene rilevato l'uso di membri dati e variabili statici.