Firmas invitadas
 

Integración del CLR en SQL Server 2005 (Primera Parte)

Publicado el 20/Dic/2006
Actualizado el 20/Dic/2006

Autor: Misael Monterroca
http://neo-mx.com/blogs/neo-mx/
 

Como es sabido, con la integración del CLR dentro de SQL Server se habilitó la posibilidad de crear diferentes tipos de objetos (Procedimientos almacenados, Funciones etc.) de una manera "sencilla"...

 

 

Dedicatoria

Hace un mes recibí un correo de mi amigo Guille, en donde me comentaba su preparación para el decimo aniversario de su sitio web y es para mí un gusto, hacer un artículo a manera de regalo de cumpleaños. Pero por supuesto, eso no quita del verdadero regalo y el día que regreses a México nuevamente ir por unas cervezas (si, Bohemia de nuevo!)  Guille Felicidades!

 

Algo de teoría

 

Seguridad

Como es sabido, con la integración del CLR dentro de SQL Server se habilitó la posibilidad de crear diferentes tipos de objetos (Procedimientos almacenados, Funciones etc.) de una manera "sencilla", con esto, pasamos de realizar únicamente consultas y operaciones “básicas” (TransactSQL ) sobre datos,  hasta la posibilidad de poder, por ejemplo, conectarnos a un servicio Web, realizar la creación de archivos, manejo de hilos etc.

 

Sin embargo, como parte de la iniciativa de seguridad de Microsoft "The Trustworthy Computing Security Development Lifecycle" en donde se especifica que todo el software debe ser: Seguro por diseño, Seguro por definición y  Seguro en distribución implica, por ejemplo, que solo las características necesarias estén disponibles de manera predeterminada, en el caso del CRL al no ser una característica necesaria para la utilización del motor de base de datos se encuentra deshabilitada por defecto y conlleva a cumplir con la especificación de "Seguro por definición" en donde se menciona lo siguiente:

 

Seguro por definición: en el mundo real, el software no es nunca totalmente seguro, por lo que los diseñadores deben asumir que habrá errores de seguridad. Para minimizar los daños que se producirán cuando los atacantes descubran estos errores, el estado predeterminado del software debe elegir las opciones más seguras. Por ejemplo, el software debe ejecutarse con los mínimos privilegios necesarios y los servicios y las características que no sean necesarios de manera habitual deben deshabilitarse de manera predeterminada o establecer que sólo unos pocos usuarios puedan tener acceso a ellos.

 

Tomado de <http://www.microsoft.com/spanish/msdn/articulos/archivo/030505/voices/sdl.mspx>

 

SQL Server aplica en general todas las iniciativas generales de las 3D's, es por ello que para poder crear un ensamblado dentro del SQL Server tenemos que realizar algunos pasos adicionales para habilitar las características que no están habilitadas por defecto.

 

Niveles de permisos en SqlServer 

Al estar sirviendo SQL Server como una Aplicación Host  del CLR puede limitar las políticas establecidas de manera predeterminada en el Code Access Security (CAS), el CAS es el mecanismo mediante el cual .Net determina los permisos que pueden ser otorgados a un ensamblado basándose en la identidad del mismo, es decir, si una aplicación es parte de la zona de Internet (como puede ser el caso de un SmartClient) los permisos que les serán otorgados dependerán de los  establecidos para esa zona y que de manera predeterminada no incluyen acceso a recursos "Internos" de la computadora como por ejemplo, utilización de la red, creación de archivos etc.

 

Una política similar aplica SQL Server e incluye a las siguientes zonas

 

Safe

Incluye únicamente permisos de acceso y operaciones dentro de la base de datos y no incluye acceso a operaciones que abarquen la utilización de algún recursos externo como pueden ser acceso al registro, creación de archivos, acceso a la red etc. Es la zona más restringida y la que se aplica de manera predeterminada cuando se crea un ensamblado dentro de Sql Server.

 

External

Al habilitar este grupo de permisos permite la utilización de operaciones que requiera acceso externo al host de SQL Server como, acceso a la red, acceso a archivos etc.

 

Unrestricted

Es similar a la zona anterior, sin embargo, además de permitir acceso a recursos externo también habilita la posibilidad de ejecutar código no administrado de .Net.

 

 

 

Al momento de crear un ensamblado dentro de SQL Server, se le otorgaran los permisos mínimos (SAFE) a menos que, por supuesto, especifiquemos lo contrario.

 

En la segunda parte veremos cómo habilitar de una manera correcta la integración del CLR

 



Ir al índice principal de el Guille