Rappresentazione e sicurezza per l'integrazione con CLR
Quando il codice gestito accede a risorse esterne, SQL Server non rappresenta automaticamente il contesto di esecuzione corrente in cui viene eseguita la routine. Il contesto di esecuzione corrente può essere rappresentato in modo esplicito dal codice degli assembly EXTERNAL_ACCESS
e UNSAFE
.
Nota
Per informazioni sulle modifiche del comportamento nella rappresentazione, vedere Modifiche di rilievo apportate alle funzionalità del motore di database in SQL Server 2014.
Il provider di accesso ai dati in-process fornisce un'API, SqlContext.WindowsIdentity
, che può essere utilizzata per recuperare il token associato al contesto di sicurezza corrente. Il codice gestito degli assembly EXTERNAL_ACCESS
e UNSAFE
può utilizzare questo metodo per recuperare il contesto e servirsi del metodo .NET Framework WindowsIdentity.Impersonate
per rappresentarlo. Di seguito sono indicate le restrizioni che si applicano quando il codice utente esegue una rappresentazione in modo esplicito:
L'accesso ai dati in-process non è consentito quando il codice gestito si trova in uno stato rappresentato. Il codice può annullare la rappresentazione, quindi chiamare l'accesso ai dati in-process. Si noti che questa operazione richiede l'archiviazione del valore restituito (un oggetto
WindowsImpersonationContext
) del metodoImpersonate
originale e la chiamata al metodoUndo
su questo oggettoWindowsImpersonationContext
.Come conseguenza di questa restrizione, durante l'accesso ai dati in-process, questo si verifica sempre nel contesto di sicurezza corrente attivo per la sessione e non può essere modificato dalla rappresentazione esplicita all'interno del codice gestito.
Per il codice gestito che viene eseguito in modo asincrono (ad esempio tramite gli assembly
UNSAFE
che creano thread ed eseguono il codice in modo asincrono), l'accesso ai dati in-process non è mai consentito. Ciò accade indipendentemente dalla rappresentazione.
Se il codice è in esecuzione in un contesto rappresentato diverso da SQL Server, non sarà in grado di effettuare chiamate di accesso ai dati in-process prima di aver annullato il contesto di rappresentazione. Se l'accesso ai dati in-process viene eseguito dal codice gestito, per l'autorizzazione verrà sempre utilizzato il contesto di esecuzione originale del punto di ingresso di Transact-SQL nel codice gestito.
Sia gli assembly che EXTERNAL_ACCESS
UNSAFE
gli assembly accedono alle risorse del sistema operativo con l'account del servizio SQL Server, a meno che non rappresentano volontariamente il contesto di sicurezza corrente come descritto in precedenza. Per questo motivo, gli autori degli assembly EXTERNAL_ACCESS
richiedono un livello di attendibilità superiore rispetto a quello degli assembly SAFE
, specificato dall'autorizzazione a livello di accesso EXTERNAL ACCESS
. È necessario concedere l'autorizzazione EXTERNAL ACCESS
solo agli account di accesso attendibili per l'esecuzione del codice nell'account del servizio SQL Server.
Vedere anche
Sicurezza per l'integrazione con CLR
Rappresentazione e credenziali per le connessioni