Integración CLR: información general

Se aplica a:SQL ServerAzure SQL Managed Instance

Common Language Runtime (CLR) es el núcleo de Microsoft .NET Framework y proporciona el entorno de ejecución de todo el código de .NET Framework. Se hace referencia al código que se ejecuta en CLR como código administrado. CLR proporciona varias funciones y servicios necesarios para la ejecución de programas, que incluyen la compilación Just-In-Time (JIT), la asignación y administración de memoria, el forzado de la seguridad de tipos, el control de excepciones, la administración de subprocesos y la seguridad. Para obtener información, vea .NET Framework SDK.

Con CLR hospedado en Microsoft SQL Server (denominado integración CLR), puede crear procedimientos almacenados, desencadenadores, funciones definidas por el usuario, tipos definidos por el usuario y agregados definidos por el usuario en código administrado. Dado que el código administrado se compila a código nativo antes de la ejecución, puede lograr un aumento importante del rendimiento en algunas situaciones.

El código administrado utiliza Seguridad de acceso del código (CAS) para evitar que los ensamblados realicen ciertas operaciones. SQL Server usa CAS para ayudar a proteger el código administrado e impedir que el sistema operativo o el servidor de bases de datos se pongan en peligro.

Ventajas de la integración CLR

Transact-SQL está diseñado específicamente para el acceso directo a los datos y la manipulación de la base de datos. Aunque Transact-SQL aventaja en el acceso y administración de datos, no es un lenguaje de programación completo. Por ejemplo, Transact-SQL no admite matrices, colecciones, bucles for-each, desplazamiento bit a bit o clases. Aunque algunas de estas construcciones se pueden simular en Transact-SQL, el código administrado ha integrado la compatibilidad con estas construcciones. Dependiendo de la situación, estas características pueden proporcionar una razón de peso para implementar cierta funcionalidad de base de datos en el código administrado.

Microsoft Visual Basic .NET y Microsoft Visual C# proporcionan capacidades orientadas a objetos como la encapsulación, la herencia y el polimorfismo. El código relacionado se puede organizar ahora con facilidad en las clases y espacios de nombres. Cuando trabaje con grandes cantidades de código del servidor, esto le permitirá organizar y mantener más fácilmente el código.

El código administrado es más adecuado que Transact-SQL para los cálculos y la lógica de ejecución complicada y presenta una amplia compatibilidad para muchas tareas complejas, incluidas la administración de cadenas y las expresiones regulares. Con la funcionalidad incluida en la biblioteca de .NET Framework, tiene acceso a miles de clases y rutinas previamente integradas. Se puede tener acceso a éstas con facilidad desde cualquier procedimiento almacenado, desencadenador o función definida por el usuario. La Biblioteca de clases base (BCL) incluye las clases que proporcionan la funcionalidad para la manipulación de cadenas de caracteres, operaciones matemáticas avanzadas, el acceso a archivos, criptografía, etc.

Nota

Mientras muchas de estas clases están disponibles para su uso desde el código CLR en SQL Server, las que no son adecuadas para su uso en el servidor (por ejemplo, las clases de selección de ventana), no están disponibles. Para obtener más información, vea Bibliotecas de .NET Framework admitidas.

Uno de las ventajas del código administrado es la seguridad de tipos o la garantía de que el código tiene acceso a los tipos solo de maneras bien definidas y permitidas. Antes de que se ejecute el código administrado, CLR comprueba que el código es seguro. Por ejemplo, se comprueba el código para asegurarse de que no se lea ninguna memoria que no se haya escrito previamente. CLR puede ayudar también a asegurarse de que el código no manipula la memoria no administrada.

La integración CLR proporciona el potencial para el rendimiento mejorado. Para obtener información, consulte Rendimiento de la integración clR.

Advertencia

CLR usa la seguridad de acceso del código (CAS) de .NET Framework, que ya no se admite como un límite de seguridad. Un ensamblado CLR creado con la opción PERMISSION_SET = SAFE puede tener acceso a los recursos externos del sistema, llamar a código no administrado y adquirir privilegios sysadmin. A partir de SQL Server 2017 (14.x), se incluye una opción de sp_configure denominada clr strict security para mejorar la seguridad de los ensamblados CLR. La opción clr strict security está habilitada de forma predeterminada y trata los ensamblados SAFE y EXTERNAL_ACCESS como si estuvieran marcados con UNSAFE. La opción clr strict security se puede deshabilitar para permitir la compatibilidad con versiones anteriores, pero no se recomienda hacerlo. Microsoft recomienda que todos los ensamblados estén firmados con un certificado o clave asimétrica con el correspondiente inicio de sesión que tenga concedido el permiso UNSAFE ASSEMBLY en la base de datos maestra. Para obtener más información, vea CLR strict security.

Elegir entre Transact-SQL y el código administrado

Al escribir procedimientos almacenados, desencadenadores y funciones definidas por el usuario, una decisión que debe tomar es si va a utilizar el lenguaje Transact-SQL tradicional o un lenguaje .NET Framework como Visual Basic .NET o Visual C#. Use Transact-SQL si el código va a realizar principalmente un acceso a los datos con poca o ninguna lógica de procedimientos. Use el código administrado para las funciones con uso importante de CPU y procedimientos que presentan una lógica compleja o si desea utilizar la BCL de .NET Framework.

Elegir entre ejecución en el servidor y ejecución en el cliente

Otro factor a la hora de decidirse sobre si se debe utilizar Transact-SQL o el código administrado es la ubicación donde desea que resida el código, el equipo servidor o el equipo cliente. Transact-SQL y el código administrado se pueden ejecutar en el servidor. Esto sitúa el código y los datos juntos y le permite aprovechar la capacidad de procesamiento del servidor. Por otro lado, quizá prefiera evitar situar las tareas con un consumo de procesador elevado en el servidor de bases de datos. La mayoría de los equipos cliente actuales son muy eficaces y quizá prefiera aprovechar esta capacidad de procesamiento situando cuanto más código sea posible en el cliente. El código administrado se puede ejecutar en un equipo cliente, mientras que Transact-SQL no se puede.

Elegir entre los procedimientos almacenados extendidos y el código administrado

Se pueden crear procedimientos almacenados extendidos para llevar a cabo funcionalidades que no son posibles con los procedimientos almacenados de Transact-SQL. Los procedimientos almacenados extendidos pueden, sin embargo, poner en peligro la integridad del proceso de SQL Server, mientras que el código administrado, cuya seguridad de tipos se comprueba, no puede. Aún más, la administración de memoria, la programación de subprocesos y fibras y los servicios de sincronización se integran más plenamente entre el código administrado de CLR y SQL Server. Con la integración CLR, tiene una manera más segura que los procedimientos almacenados extendidos de escribir los procedimientos almacenados necesarios para realizar las tareas que no son posibles en Transact-SQL. Para obtener más información sobre la integración clR y los procedimientos almacenados extendidos, vea Performance of CLR Integration.

Consulte también

Instalar .NET Framework
Arquitectura de integración CLR
Acceso a datos de objetos de base de datos de CLR
Introducción a la integración CLR