Habilitando el acceso externo a un SQLCLR assembly
La implementación de funciones CLR en SQL Server 2005 (un tipo de SQL Server CLR Routines) como un método de un clase .NET Framework es una las novedades de hoy en día. Bien, una vez implementada dicha función, el assembly que lo contiene debe cargarse en el SQL Server, y posteriormente crear, en SQL Server 2005, la función que mapeara o tendrá acceso externo a nuestra función creada en .NET.
En fin, en esta trance, estoy seguro que en cualquier momento de cargar o registrar el assembly que contiene la función CLR en el SQL server 2005, podeis encontrarte con un posible error, que si no te anticipas, te pega un puro!.
Antes de hablar más, intentemos registrar un función SQLCLR de la siguiente manera:
USE Nombre_Base_De_Datos
GO
CREATE ASSEMBLY TableUDF
FROM 'C:\Documents and Settings\Administrador\Mis documentos\Visual Studio 2005\Projects\TableUDF\TableUDF\bin\Debug\TableUDF.dll'
WITH PERMISSION_SET=EXTERNAL_ACCESS
Bien, se supone que al ejecutar el T-SQL anterior, la dll debe quedar registrada dentro de SQL Server 2005, en otras palabras, SQL Server 2005 debe reconocer el asembly donde está embebida dicha función. Pero es aquí donde puede darse un error como esta:
Mens. 10327, Nivel 14, Estado 1, Línea 2
Error de CREATE ASSEMBLY para el ensamblado 'TableUDF' porque el ensamblado 'TableUDF' no tiene autorización para PERMISSION_SET = EXTERNAL_ACCESS. El ensamblado está autorizado cuando se produce una de las siguientes situaciónes: el propietario de la base de datos tiene permiso de EXTERNAL ACCESS ASSEMBLY y la base de datos tiene definida la propiedad de base de datos TRUSTWORTHY, o el ensamblado está firmado con un certificado o una clave asimétrica que tiene un inicio de sesión correspondiente con permiso de EXTERNAL ACCESS ASSEMBLY.
Esto es porque el contexto (o propietario) de la base de datos (en la que se intenta registrar) no tiene la autorización de acceso externo (EXTERNAL_ACCESS), y la manera de solucionarlo es la siguiente:
ALTER DATABASE Nombre_Base_De_Datos
SET TRUSTWORTHY ON
Hasta este punto dicho error debio haber sido solucionado!. Ahora sí será posible registrar dicho assembly SQLCLR sin ningún problema.