Partager via


Emprunt d'identité et informations d'identification pour les connexions

Dans l’intégration du CLR (Common Language Runtime) SQL Server, l’utilisation de l’authentification Windows est complexe, mais elle est plus sécurisée que l’utilisation de l’authentification SQL Server. Lorsque vous utilisez l'authentification Windows, gardez à l'esprit les points suivants.

Par défaut, un processus SQL Server qui se connecte à Windows acquiert le contexte de sécurité du compte de service Windows SQL Server. Mais il est possible de mapper une fonction CLR à une identité proxy, afin que ses connexions sortantes aient un contexte de sécurité différent de celui du compte de service Windows.

Dans certains cas, vous souhaiterez peut-être emprunter l’identité de l’appelant à l’aide de la SqlContext.WindowsIdentity propriété au lieu de l’exécuter en tant que compte de service. L’instance WindowsIdentity représente l’identité du client qui a appelé le code appelant et n’est disponible que lorsque le client a utilisé l’authentification Windows. Une fois que vous avez obtenu l’instance WindowsIdentity , vous pouvez appeler Impersonate pour modifier le jeton de sécurité du thread, puis ouvrir ADO.NET connexions pour le compte du client.

Après avoir appelé SQLContext.WindowsIdentity.Impersonate, vous ne pouvez pas accéder aux données locales et vous ne pouvez pas accéder aux données système. Pour accéder à nouveau aux données, vous devez appeler WindowsImpersonationContext.Undo.

L’exemple suivant montre comment emprunter l’identité de l’appelant à l’aide de la SqlContext.WindowsIdentity propriété.

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;  
}  

Remarque

Pour plus d’informations sur les modifications de comportement dans l’emprunt d’identité, consultez Modifications cassants des fonctionnalités du moteur de base de données dans SQL Server 2014.

En outre, si vous avez obtenu l’instance d’identité Microsoft Windows, par défaut, vous ne pouvez pas propager cette instance à un autre ordinateur ; L’infrastructure de sécurité Windows restreint cela par défaut. Toutefois, un mécanisme appelé « délégation » permet la propagation d’identités Windows sur plusieurs ordinateurs approuvés. Vous pouvez en savoir plus sur la délégation dans l’article TechNet , « Transition de protocole Kerberos et délégation contrainte ».

Voir aussi

SqlContext, objet