Создание асимметричного ключа по сети
Я пытаюсь добавить сборку в базу данных в SQL2008 с помощью асимметричного ключа.
Мы добавляем сборку с использованием шестнадцатеричной строки (добавление сборок на серверы только через 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 ответа
Вы можете использовать следующие шаги, чтобы заставить его работать:
- запустите оператор создания сборки с набором полномочий SAFE (даже если для выполнения сборки требуется UNSAFE)
- создать асимметричный ключ из сборки
- брось свою сборку
- создать логин из асимметричного ключа
предоставить логин небезопасные права на сборку
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
FROM FILE =
всегда с точки зрения SQL Server. Вам нужно будет скопировать сертификат на локальный диск на сервере базы данных.