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

S’applique à :SQL Server

Dans le SQL Server’intégration du Common Language Runtime (CLR), l’utilisation de l’authentification Windows est complexe, mais est plus sécurisée que 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é de 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 pouvez emprunter l’identité de l’appelant à l’aide de la propriété SqlContext.WindowsIdentity au lieu de l’exécuter en tant que compte de service. Le 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 le instance WindowsIdentity, vous pouvez appeler Impersonate pour modifier le jeton de sécurité du thread, puis ouvrir ADO.NET connexions au nom 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 propriété 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;  
}  

Notes

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

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

Voir aussi

Objet SqlContext