Share via


Suplantación y credenciales para conexiones

En la integración de Common Language Runtime (CLR) en SQL Server, el uso de la autenticación de Windows es complejo, pero es más seguro que usar la autenticación de SOL Server. Al usar la autenticación de Windows, tenga presente las consideraciones siguientes.

De forma predeterminada, un proceso de SQL Server que se conecta a Windows adquiere el contexto de seguridad de la cuenta de servicio de Windows para SQL Server. Pero es posible asignar una función CLR a una identidad del proxy, para que sus conexiones salientes tengan un contexto de seguridad diferente que el de la cuenta del servicio de Windows.

En algunos casos, puede que desee suplantar al autor de las llamadas mediante la propiedad SqlContext.WindowsIdentity en lugar de ejecutarse como una cuenta de servicio. La instancia de WindowsIdentity representa la identidad del cliente que invocó el código de llamada y solo está disponible cuando el cliente usó la autenticación de Windows. Después de haber obtenido la instancia de WindowsIdentity, puede llamar a Impersonate para cambiar el token de seguridad del subproceso y, a continuación, abrir las conexiones de ADO.NET en nombre del cliente.

Después de llamar a SQLContext.WindowsIdentity.Impersonate, no puede obtener acceso a los datos locales ni a los datos del sistema. Para obtener acceso de nuevo a los datos, tiene que llamar a WindowsImpersonationContext.Undo.

En el ejemplo siguiente se muestra cómo suplantar al autor de las llamadas mediante la propiedad 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]

En SQL Server 2008, hay cambios de comportamiento en la suplantación. Para obtener más información, vea Cambios recientes en las características del Motor de base de datos de SQL Server 2008.

Además, si obtuvo la instancia de identidad en Microsoft Windows, no puede propagar esa instancia a otro equipo de forma predeterminada; la infraestructura de seguridad de Windows restringe esa acción de forma predeterminada. Sin embargo, hay un mecanismo denominado "delegación" que habilita la propagación de identidades de Windows a través de varios equipos de confianza. Puede obtener más información acerca de la delegación en el artículo de TechNet, "Kerberos Protocol Transition and Constrained Delegation".

Vea también

Conceptos