Emprunt d’identité et informations d’identification pour les connexions
S'applique à :SQL Server
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 du compte de service Windows.
Dans certains cas, vous souhaiterez peut-être emprunter l’identité de l’appelant à l’aide de la propriété SqlContext.WindowsIdentity
au lieu d’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. Après avoir 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 C# suivant montre comment emprunter l’identité de l’appelant à l’aide de la propriété SqlContext.WindowsIdentity
.
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 apportées aux fonctionnalités du moteur de base de données dans SQL Server 2016.
En outre, si vous avez obtenu l’instance d’identité 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, il existe un mécanisme appelé délégation qui permet la propagation d’identités Windows sur plusieurs ordinateurs approuvés. Pour plus d’informations sur la délégation, consultez transition de protocole Kerberos et délégation contrainte.