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.

Published 18/2/2007 10:53 por Percy Reyes
Comparte este post:
http://geeks.ms/blogs/ozonicco/archive/2007/02/18/habilitando-el-acceso-externo-a-un-sqlclr-assembly.aspx

Comentarios

# re: Habilitando el acceso externo a un SQLCLR assembly

Gracias capo!!! me ha servido de mucho tu explicación!!.

Friday, January 11, 2008 7:30 PM por Mariano

# re: Habilitando el acceso externo a un SQLCLR assembly

Hola Mariano!,

Que bueno!, espero sirva a mucha mas personas...

Gracias por visitar este blog.

saludos,

Saturday, January 12, 2008 8:28 AM por Percy Reyes

# re: Habilitando el acceso externo a un SQLCLR assembly

Vi tu comentario enel momento justo en que lo necesitaba ... gracias

Friday, August 01, 2008 5:55 PM por Carlos heli