Estoy intentando add an assembly a una base de datos en SQL2008 usando un asymmetric key.Creación de clave asimétrica a través de la red
Estamos añadiendo el conjunto con una cadena hexadecimal (añadiendo asambleas a través de los servidores sólo consultas SQL)
USE [master]
GO
IF NOT EXISTS (SELECT * from sys.asymmetric_keys where name = 'ManagedAsymmetricKey')
BEGIN
CREATE ASYMMETRIC KEY ManagedAsymmetricKey FROM FILE = 'C:\Managed.dll'
CREATE LOGIN CLRLogin FROM ASYMMETRIC KEY ManagedAsymmetricKey
GRANT UNSAFE ASSEMBLY TO CLRLogin
END
GO
USE [$dbName]
GO
CREATE ASSEMBLY [Managed]
AUTHORIZATION [dbo]
FROM 0x4D5A....
WITH PERMISSION_SET = UNSAFE
GO
Esto funcionará en una instancia local sin embargo través de la red que recibimos; The certificate, asymmetric key, or private key file does not exist or has invalid format.
Puedo estar asumiendo erróneamente que debería estar agregando la clave primero, ¿debería agregar el ensamblaje y luego hacer algo en la línea de CREATE ASYMMETRIC KEY ManagedAsymmetricKey FROM ASSEMBLY [workingDB].[dbo].[Managed]
?
Para el montaje temporal, no es necesario establecer '' PERMISSION_SET' a UNSAFE', debido a que no es necesario para ejecutar código del conjunto para crear la clave. Eso también significa que no tiene que establecer 'TRUSTWORTHY' en ningún lado. Además de eso, ¡gracias por el ingenioso hack! –
Pongo inseguro porque el ensamblado en la pregunta no es seguro. si tiene un ensamblaje seguro, esto no es necesario. –
No estoy al 100% en esto, pero no creo que los ensamblajes sean intrínsecamente (in) seguros. Mi ensamblaje contiene código que solo se ejecuta con permisos 'UNSAFE', pero SQL Server no se queja cuando creo el ensamblado con 'PERMISSION_SET = SAFE'. –