Share via


Suplantación y seguridad de la integración CLR

Cuando el código administrado obtiene acceso a recursos externos, SQL Server no suplanta automáticamente el contexto de ejecución actual en el que se ejecuta la rutina. El código de los ensamblados UNSAFE y EXTERNAL_ACCESS puede suplantar explícitamente el contexto de ejecución actual.

[!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.

El proveedor de acceso a datos en proceso proporciona una interfaz de programación de aplicaciones, SqlContext.WindowsIdentity, que puede usarse para recuperar el token asociado al contexto de seguridad actual. El código administrado de los ensamblados UNSAFE y EXTERNAL_ACCESS puede usar este método para recuperar el contexto y usar el método WindowsIdentity.Impersonate de .NET Framework para suplantar ese contexto. Se aplican las siguientes restricciones a la suplantación explícita del código de usuario:

  • No se permite el acceso a datos en proceso cuando el código administrado se encuentra en un estado suplantado. El código puede deshacer la suplantación y llamar al acceso a datos en proceso. Tenga en cuenta que esto requiere el almacenamiento del valor devuelto (un objeto WindowsImpersonationContext) por el método Impersonate original y una llamada al método Undo en este contexto WindowsImpersonationContext.

    Esta restricción significa que, cuando se produce el acceso a datos en proceso, siempre se produce en el contexto de seguridad actual en vigor para la sesión. No puede modificarse mediante la suplantación explícita dentro del código administrado.

  • En el caso del código administrado que se ejecuta de forma asincrónica (por ejemplo, a través de ensamblados UNSAFE que crean subprocesos y ejecutan código de forma asincrónica), no se permite nunca el acceso a datos en proceso. Esto es cierto haya o no haya suplantación.

Cuando el código se ejecuta en un contexto suplantado distinto de SQL Server, no puede realizar llamadas de acceso a datos en proceso; debe deshacer el contexto de suplantación para poder realizar llamadas de acceso a datos en proceso. Cuando el acceso a datos en proceso se realiza desde el código administrado, el contexto de ejecución original del punto de entrada Transact-SQL en el código administrado siempre se utiliza para la autorización.

Los ensamblados EXTERNAL_ACCESS y UNSAFE obtienen acceso a los recursos del sistema operativo con la cuenta de servicio SQL Server, a menos que suplanten voluntariamente el contexto de seguridad actual tal y como se ha descrito anteriormente. Debido a ello, los autores de ensamblados EXTERNAL_ACCESS requieren un mayor nivel de confianza que los autores de ensamblados SAFE, que se especifica mediante el permiso de nivel de inicio de sesión EXTERNAL ACCESS. Sólo debe concederse el permiso EXTERNAL ACCESS a los inicios de sesión en los que se confíe para ejecutar código con la cuenta del servicio SQL Server.