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.
La possibilità di caricare ed eseguire codice gestito in un host di SQL Server richiede soddisfare i requisiti dell'host sia per la sicurezza dell'accesso al codice che per la protezione delle risorse host. I requisiti di sicurezza dell'accesso al codice vengono specificati da uno dei tre set di autorizzazioni di SQL Server: SAFE, EXTERNAL-ACCESS o UNSAFE. Il codice in esecuzione all'interno dei set di autorizzazioni SAFE o EXTERNAL-ACCESS deve evitare determinati tipi o membri a cui è applicato l'attributo HostProtectionAttribute . Il HostProtectionAttribute non è un'autorizzazione di sicurezza, quanto piuttosto una garanzia di affidabilità, poiché identifica costrutti di codice specifici, come tipi o metodi, che l'host potrebbe vietare. L'uso del HostProtectionAttribute applica un modello di programmazione che consente di proteggere la stabilità dell'host.
Annotazioni
La sicurezza dall'accesso al codice è 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 a CAS. Gli sviluppatori devono cercare mezzi alternativi per eseguire attività di sicurezza.
Attributi di protezione host
Gli attributi di protezione host identificano i tipi o i membri che non rientrano nel modello di programmazione host e rappresentano i livelli crescenti di minaccia per l'affidabilità seguenti:
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 di un membro che ha un HostProtectionAttribute che specifica un HostProtectionResource valore di 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 i membri i cui HostProtectionResource valori 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. Quando gli assembly vengono caricati nel database, l'autore dell'assembly può specificare uno dei tre set di autorizzazioni per tale assembly: SAFE, EXTERNAL-ACCESS o UNSAFE.
Set di autorizzazioni | CASSAFORTE | EXTERNAL-ACCESS | PERICOLOSO |
---|---|---|---|
Sicurezza dell'accesso al codice | Sola esecuzione | Esecuzione più accesso a risorse esterne | Illimitato |
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 ha funzionalità di sicurezza e affidabilità elevate. 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.
EXTERNAL-ACCESS offre un'opzione di sicurezza intermedia, consentendo al codice di accedere alle risorse esterne al database, ma mantenendo l'affidabilità e la sicurezza di SAFE.
UNSAFE è un set di autorizzazioni per codice altamente attendibile, che può essere creato solo dagli amministratori di database. Questo codice attendibile non ha restrizioni di accesso al codice e può chiamare codice non gestito (nativo).
SQL Server usa il livello dei criteri di sicurezza per l'accesso al codice a livello di host per configurare un criterio host che concede 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 tra più chiamate o 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.
Considerate queste considerazioni, SQL Server non consente l'uso di variabili statiche e membri dati statici. Per gli assembly SAFE e EXTERNAL-ACCESS, SQL Server esamina i metadati dell'assembly in fase DI CREAZIONE ASSEMBLY e non riesce a creare tali assembly se rileva l'uso di membri dati statici e variabili.