Compartir a través de


Suplantación y credenciales para conexiones

En la integración de Common Language Runtime (CLR) de SQL Server, el uso de la autenticación de Windows es complejo, pero es más seguro que usar la autenticación de SQL 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 de proxy, de modo que sus conexiones salientes tengan un contexto de seguridad diferente al de la cuenta de servicio de Windows.

En algunos casos, es posible que quiera suplantar al autor de la llamada mediante la SqlContext.WindowsIdentity propiedad en lugar de ejecutarse como la 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 obtener la WindowsIdentity instancia, puede llamar Impersonate a para cambiar el token de seguridad del subproceso y, a continuación, abrir ADO.NET conexiones en nombre del cliente.

Después de llamar a SQLContext.WindowsIdentity.Impersonate, no puede acceder a los datos locales y no puede acceder a los datos del sistema. Para acceder a los datos de nuevo, debe llamar a WindowsImpersonationContext.Undo.

En el ejemplo siguiente se muestra cómo suplantar al autor de la llamada mediante la SqlContext.WindowsIdentity propiedad .

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:

Para obtener información sobre los cambios de comportamiento en la suplantación, vea Cambios importantes en las características del motor de base de datos en SQL Server 2014.

Además, si obtuvo la instancia de identidad de Microsoft Windows, de forma predeterminada no puede propagar esa instancia a otro equipo; La infraestructura de seguridad de Windows restringe esto de forma predeterminada. Sin embargo, hay un mecanismo denominado "delegación" que permite la propagación de identidades de Windows en varios equipos de confianza. Puede obtener más información sobre la delegación en el artículo de TechNet, "Transición del protocolo Kerberos y delegación restringida".

Véase también

Objeto SqlContext