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.
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 codice in EXTERNAL_ACCESS e UNSAFE gli assembly possono rappresentare in modo esplicito il contesto di esecuzione corrente.
Annotazioni
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'interfaccia di programmazione dell'applicazione, SqlContext.WindowsIdentity, che può essere usata per recuperare il token associato al contesto di sicurezza corrente. Il codice gestito in EXTERNAL_ACCESS e UNSAFE gli assembly possono usare questo metodo per recuperare il contesto e usare il metodo .NET Framework WindowsIdentity.Impersonate per rappresentare tale contesto. Le restrizioni seguenti si applicano quando il codice utente rappresenta 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 e quindi chiamare l'accesso ai dati in-process. Si noti che è necessario archiviare il valore restituito (un
WindowsImpersonationContextoggetto) del metodo originaleImpersonatee chiamare ilUndometodo in questoWindowsImpersonationContextoggetto .Questa restrizione significa che quando si verifica l'accesso ai dati in-process, si trova sempre nel contesto del contesto di sicurezza corrente in vigore per la sessione. Non può essere modificato dalla rappresentazione esplicita all'interno del codice gestito.
Per il codice gestito eseguito in modo asincrono (ad esempio, tramite
UNSAFEassembly che creano thread ed eseguono codice in modo asincrono), l'accesso ai dati in-process non è mai consentito. Questo vale se c'è o meno la rappresentazione.
Quando il codice è in esecuzione in un contesto rappresentato diverso da SQL Server, non può eseguire chiamate di accesso ai dati in-process; deve annullare il contesto di rappresentazione prima di effettuare chiamate di accesso ai dati in-process. Quando l'accesso ai dati in-process viene eseguito dal codice gestito, il contesto di esecuzione originale del Transact-SQL punto di ingresso nel codice gestito viene sempre usato per l'autorizzazione.
Sia gli assembly che EXTERNAL_ACCESSUNSAFE gli assembly accedono alle risorse del sistema operativo con l'account del servizio SQL Server, a meno che non impersonino volontariamente il contesto di sicurezza corrente come descritto in precedenza. Per questo motivo, gli autori di EXTERNAL_ACCESS assembly richiedono un livello di attendibilità superiore a quello degli assembly, specificato dall'autorizzazione EXTERNAL ACCESS a livello di account di SAFE accesso. All'account del servizio SQL Server devono essere concessi solo gli account di accesso attendibili per l'esecuzione del EXTERNAL ACCESS codice.
Vedere anche
Sicurezza per l'integrazione con CLR
Rappresentazione e credenziali per le connessioni