Descripción de dos errores comunes que se pueden dar al intentar implementar procedimientos CLR (procedimientos desarrollados en código con Visual Studio .Net).
Error de SID de propietario
Error: The database owner SID recorded in the master database differs from the database owner SID recorded in database 'miBaseDeDatos'. You should correct this situation by resetting the owner of database 'miBaseDeDatos' using the ALTER AUTHORIZATION statement
Error: El SID del propietario de la base de datos registrado en la base de datos master no coincide con el SID del propietario de la base de datos registrado en la base de datos 'miBaseDeDatos'. Debería corregir la situación restableciendo el propietario de la base de datos 'miBaseDeDatos' con la instrucción ALTER AUTHORIZATION
Esto ocurre normalmente cuando la base de datos a sido separada y adjuntada alguna vez, y el usuario actual (el login con el que nos hemos autentificado) no es "propietaria" de la base de datos.
Esto se corrige restableciendo el propietario de la base de datos al usuario que utilizaremos, con la instrucción
ALTER AUTHORIZATION ON DATABASE::[miBaseDeDatos] TO {miLoginUsuario}
Nota: la cadena {miLoginUsuario} es el nombre del usuario con el que nos hemos autentificado (un caso común es que sea el usuario 'sa')
Error de autorización de ensamblado (assembly not authorized)
Error: CREATE ASSEMBLY for assembly '{miEnsamblado}' failed because assembly '{miEnsamblado}' is not authorized for PERMISSION_SET = UNSAFE. The assembly is authorized when either of the following is true: the database owner (propietarioBaseDeDatos) has UNSAFE ASSEMBLY permission and the database has the TRUSTWORTHY database property on; or the assembly is signed with a certificate or an asymmetric key that has a corresponding login with UNSAFE ASSEMBLY permission
Error de CREATE ASSEMBLY para el ensamblado 'miEnsamblado' porque el ensamblado 'miEnsamblado' no tiene autorización para PERMISSION_SET = UNSAFE. El ensamblado está autorizado cuando se produce una de las siguientes situaciones: el propietario de la base de datos (propietarioBaseDeDatos) tiene permiso de UNSAFE 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 UNSAFE ASSEMBLY. Si ha restaurado o adjuntado esta base de datos, asegúrese de que el propietario de la base de datos se asigne al inicio de sesión correcto en este servidor. Si no, use sp_changedbowner para solucionar el problema
Una solución rápida y poco segura es ejecutar:
ALTER DATABASE DATABASE::[miBaseDeDatos] SET TRUSTWORTHY ON
La opción menos rápida pero más segura es firmar el ensamblado CLR con un certificado:
1. Firmar la dll con un nombre fuerte yendo a la pestaña Firmar, en la ventana de propiedades del proyecto de Visual Studio. Se puede crear un nuevo archivo .pfx desde ahí.
2. Construir el ensamblado CLR con Permission Level: External o Unsafe. No implementar todavía.
3. Ir al SLQ Management Studio y ejecutar la siguiente consulta:
USE master
GO
CREATE ASYMMETRIC KEY AsymmetricKeyName FROM EXECUTABLE FILE = '{ruta al archivo .dll}'
CREATE LOGIN miLoginUsuario FROM ASYMMETRIC KEY AsymmetricKeyName
GRANT EXTERNAL ACCESS ASSEMBLY TO miLoginUsuario
GO


















