Как зарегистрировать сборку C# CLR на сервере SQL без использования Security Hacks? - PullRequest
2 голосов
/ 17 марта 2020

Когда я пытаюсь зарегистрировать подписанную сборку C# на SQL Сервере через обозреватель объектов в SSMS, щелкнув правой кнопкой мыши узел «Сборки» и выбрав «Новая сборка», затем моя подписанная DLL-библиотека через «Обзор» , Я получаю следующую ошибку:

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

Даже при том, что я попытался подписать сборку как с помощью файла PFX, созданного с помощью свойств проекта, так и с помощью SNK, сгенерированного sn.exe файл (связанный путем взлома узла AssemblyOriginatorKeyFile файла проекта), оба результата приводят к тому, что DLL по-прежнему не имеет «Строгое имя» сервером SQL в диалоговом окне «Новая сборка»:

New Assembly Dialog

Я пробовал это с обоими сгенерированными Visual-Studio-2019 проектами библиотеки классов в обоих. NET 4.8 и. NET 4.0 и Visual-Studio -2010-сгенерированный SQL Проект базы данных CLR все к одному и тому же концу.

Я понимаю, что сообщение об ошибке предлагает взлом безопасности, чтобы обойти проблему (которую я также пытался безрезультатно), но я пытаясь избежать этого, так как сервер базы данных публикуется c -facing. Как мне исправить это правильно?

1 Ответ

1 голос
/ 17 марта 2020

Если предположить, что DLL действительно подписана, то вы, вероятно, пропускаете второй шаг предпочтительного метода, отмеченного в первой части сообщения об ошибке, а именно:

, который имеет соответствующий логин с Разрешение UNSAFE ASSEMBLY.

Эта часть имеет решающее значение для правильной работы. До для загрузки сборки на SQL Сервер необходимо выполнить следующее:

  1. создать ключ асимметрии c в базе данных [master] из DLL
  2. создать логин из этой асимметрии c ключ
  3. предоставить новому логину разрешение UNSAFE ASSEMBLY на уровне экземпляра

Затем вы может загружать любую сборку в любую базу данных, если она подписана тем же файлом строгого имени-ключа / pfx (может быть несколько, если в вашем решении несколько проектов).

Even хотя я пытался подписать сборку обоими через ..., оба результата приводят к тому, что DLL по-прежнему не имеет "Строгое имя" сервером SQL в диалоговом окне "Новая сборка":

Правильно. Это связано либо с плохим дизайном пользовательского интерфейса, либо с ошибкой. При создании новой сборки поля «Дополнительные свойства:» не отражают значения файла, указанного в поле «Путь к сборке:». Скорее всего, это просто диалоговое окно «Сборка» для всего, что связано со сборкой, и оно прекрасно работает для сборок, которые уже загружены на SQL Сервер, но не для того, что вы пытаетесь загрузить. Если было задумано заглянуть в файл, чтобы указать текущие значения всего, что найдено по пути, указанному в поле «Путь к сборке:», то это ошибка (но я подозреваю, что это первое). Я сообщил об этом в Microsoft здесь:

SSMS: «Дополнительные свойства» в диалоговом окне «Новая сборка» вводят в заблуждение, поскольку не описывают импортируемую DLL


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...