2012-01-30 3 views
6

Я пытаюсь загрузить add an assembly в базу данных в SQL2008 с помощью asymmetric key.создание асимметричного ключа по сети

Мы добавляем сборку с помощью шестнадцатеричной строки (добавление сборок серверов только через 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 

Это будет работать на локальном экземпляре, однако в сети мы получаем; The certificate, asymmetric key, or private key file does not exist or has invalid format.

Возможно, я ошибаюсь, что сначала должен добавить ключ, должен ли я добавлять сборку, а затем делать что-то по линиям CREATE ASYMMETRIC KEY ManagedAsymmetricKey FROM ASSEMBLY [workingDB].[dbo].[Managed]?

ответ

2

FROM FILE = всегда с точки зрения SQL Server. Скопировать сертификат на локальный диск на сервере базы данных.

5

Вы можете использовать следующие шаги, чтобы заставить его работать:

  • запустить создать заявление сборки с SAFE permission_set (даже если сборка нуждается в небезопасной для исполнения)
  • создать асимметричный ключ из сборки
  • падение сборка
  • создать логин с асимметричным ключом
  • предоставить регистрационные небезопасным права сборочные

    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

Для временного монтажа, вам не нужно устанавливать '' PERMISSION_SET' к UNSAFE', потому что вам не нужно выполнять код из сборки для создания ключа. Это также означает, что вам не нужно устанавливать 'TRUSTWORTHY' в любом месте. Кроме того, спасибо за умный взлом! –

+0

Я ставил небезопасно, потому что сборка в вопросе небезопасна. если у вас есть безопасная сборка, это действительно не нужно. –

+0

Я не на это 100%, но я не думаю, что сборки неотъемлемо (un) безопасны. Моя сборка содержит код, который работает только с разрешениями UNSAFE, но SQL Server не жалуется, когда я создаю сборку с помощью 'PERMISSION_SET = SAFE'. –

Смежные вопросы