SQL Server 2017 Management Studio: ошибка СОЗДАТЬ СБОРКУ - PullRequest
0 голосов
/ 15 января 2020

Я создал пользовательский тип в C#.

Когда я запускаю это:

EXEC sp_configure 'clr enabled', 1;  
RECONFIGURE;  
GO  

EXEC sp_configure 'show advanced option', '1'; 
RECONFIGURE;  
GO  

USE NameOfDatabase

CREATE ASSEMBLY Database1
FROM 'C:\Users\MyDoc\Desktop\Project\Database1\Database1\bin\Debug\Database1.dll'
WITH PERMISSION_SET = SAFE; 

CREATE TYPE [dbo].[TypeName] EXTERNAL NAME [Database1].[NameInC#];

Я получаю ошибку:

Msg 10343, Уровень 14, состояние 1, строка 10
CREATE или ALTER ASSEMBLY для сборки «Database1» с опцией SAFE или EXTERNAL_ACCESS завершились неудачно, поскольку для параметра «clr строгая безопасность» sp_configure установлено значение 1. Microsoft рекомендует подписать сборку с помощью сертификат или асимметричный ключ c, имеющий соответствующий логин с разрешением UNSAFE ASSEMBLY. Кроме того, вы можете доверять сборке, используя sp_add_trusted_assembly.

Как решить эту проблему?

1 Ответ

1 голос
/ 15 января 2020
  1. EXEC sp_configure 'show advanced option', '1';
    RECONFIGURE;
    

    Нет / не было причин для выполнения этой команды. Это на самом деле ничего не ранит, но и бесполезно.

  2. В сообщении об ошибке четко указаны два варианта решения этой проблемы. Пожалуйста, НЕ включите TRUSTWORTHY. Это более простой / более ленивый маршрут, но это риск для безопасности, который не нужно открывать, когда альтернатива не сложна в реализации. Для подробного изучения проблем, связанных с TRUSTWORTHY, см .:
    ПОЖАЛУЙСТА, пожалуйста, пожалуйста, прекратите использование олицетворения, TRUSTWORTHY и цепочки владения кросс-БД

  3. Дополнительную информацию о «строгой безопасности CLR» (которая была введена в SQL Server 2017) и о том, как правильно с ней обращаться, см. В моем ответе на следующий вопрос (здесь, на SO):

    CLR Strict Security на SQL Server 2017

    Основная концепция c заключается в следующем (это другой вариант, указанный в сообщении об ошибке):

    1. Подпишите сборку (используя ключ строгого имени, что соответствует асимметричному ключу c на сервере SQL, или сертификат, или оба). Если вы компилируете в Visual Studio, то «подписание» (в свойствах проекта) означает присвоение ему «строгого имени» (т.е. без использования сертификата)
    2. создайте соответствующий ключ publi c в SQL Сервер в базе данных [master] (ключ строгого имени == CREATE ASYMMETRIC KEY ...; сертификат == CREATE CERTIFICATE ...). Сейчас вы можете создать любой из них из файла DLL . Если этот код должен быть запущен в производство, лучше не полагаться на файл DLL, поскольку это является внешней зависимостью от сценария выпуска. Существует два подхода к полной автоматизации этого процесса, и эти параметры рассматриваются в следующих двух статьях:

    3. Создание логина из асимметричного c ключа или сертификата

    4. Предоставление авторизации на основе подписи UNSAFE ASSEMBLY разрешение
    5. Теперь вы можете создать сборку в любой базе данных , и нет необходимости включать TRUSTWORTHY
    6. Наконец, создайте объекты-оболочки T- SQL

Для получения дополнительной информации о для работы с SQLCLR, пожалуйста, посетите: SQLCLR Info

...