Rappresentazione e credenziali per le connessioni

Si applica a:SQL Server

Nell'integrazione CLR (Common Language Runtime) di SQL Server l'uso dell'autenticazione di Windows è complessa, ma è più sicura dell'uso dell'autenticazione SQL Server. Utilizzando l'autenticazione di Windows, è necessario tenere conto di alcune considerazioni.

Per impostazione predefinita, un processo di SQL Server che si connette a Windows acquisisce il contesto di sicurezza dell'account di servizio Windows di SQL Server. È tuttavia possibile eseguire il mapping di una funzione CLR a un'identità del proxy, in modo che le connessioni in uscita dispongano di un contesto di sicurezza diverso da quello dell'account di servizio Windows.

In alcuni casi, è possibile rappresentare il chiamante usando la proprietà SqlContext.WindowsIdentity anziché eseguire come account del servizio. L'istanza di WindowsIdentity rappresenta l'identità del client che ha richiamato il codice chiamante ed è disponibile solo quando il client usa l'autenticazione di Windows. Dopo aver ottenuto l'istanza di WindowsIdentity , è possibile chiamare Impersonate per modificare il token di sicurezza del thread e quindi aprire ADO.NET connessioni per conto del client.

Dopo aver chiamato SQLContext.WindowsIdentity.Impersonate, non è possibile accedere ai dati locali e non accedere ai dati di sistema. Per accedere di nuovo ai dati, è necessario chiamare WindowsImpersonationContext.Undo.

Nell'esempio seguente viene illustrato come rappresentare il chiamante usando la proprietà SqlContext.WindowsIdentity .

Visual C#

WindowsIdentity clientId = null;  
WindowsImpersonationContext impersonatedUser = null;  
  
clientId = SqlContext.WindowsIdentity;  
  
// This outer try block is used to protect from   
// exception filter attacks which would prevent  
// the inner finally block from executing and   
// resetting the impersonation.  
try  
{  
   try  
   {  
      impersonatedUser = clientId.Impersonate();  
      if (impersonatedUser != null)  
         return GetFileDetails(directoryPath);  
         else return null;  
   }  
   finally  
   {  
      if (impersonatedUser != null)  
         impersonatedUser.Undo();  
   }  
}  
catch  
{  
   throw;  
}  

Nota

Per informazioni sulle modifiche al comportamento nella rappresentazione, vedere Modifiche di rilievo alle funzionalità del motore di database in SQL Server 2016.

Inoltre, se è stata ottenuta l'istanza di identità di Microsoft Windows, per impostazione predefinita non è possibile propagare l'istanza in un altro computer; L'infrastruttura di sicurezza di Windows limita quella per impostazione predefinita. Esiste tuttavia un meccanismo noto come "delega" che abilita la propagazione delle identità di Windows in più computer attendibili. Per altre informazioni sulla delega, vedere l'articolo TechNet "Transizione del protocollo Kerberos e delega vincolata".

Vedere anche

Oggetto SqlContext