2012-01-30 10 views
6

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]?

Respuesta

2

El FROM FILE = es siempre desde la perspectiva de SQL Server. Debería haber copiado el certificado en una unidad local en el servidor de la base de datos.

5

Se pueden utilizar los siguientes pasos para conseguir que funcione:

  • ejecutar su estado de ensamblaje de crear con PERMISSION_SET SAFE (incluso si el conjunto necesita SEGURO para la ejecución)
  • crear la clave asimétrica del conjunto
  • dejar su montaje
  • crear un inicio de sesión de la clave asimétrica
  • conceder los derechos de acceso inseguros montaje

    CREATE ASSEMBLY [Managed] 
    AUTHORIZATION [dbo] 
    FROM 0x4D5A.... 
    WITH PERMISSION_SET = SAFE 
    
    CREATE ASYMMETRIC KEY ManagedAsymmetricKey FROM ASSEMBLY [Managed] 
    
    DROP ASSEMBLY [Managed] 
    
    CREATE LOGIN CLRLogin FROM ASYMMETRIC KEY ManagedAsymmetricKey 
    
    GRANT UNSAFE ASSEMBLY TO CLRLogin 
    
+1

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! –

+0

Pongo inseguro porque el ensamblado en la pregunta no es seguro. si tiene un ensamblaje seguro, esto no es necesario. –

+0

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'. –

Cuestiones relacionadas