Подписание небезопасных сборок асимметричным ключом

Я хотел бы развернуть свою собственную среду CLR, для которой потребуются небезопасные разрешения и установка базы данных как заслуживающей доверия.

Я нашел на interwebz, что сборки с внешним доступом можно подписывать асимметричным ключом, но не нашел способа подписать им небезопасные сборки.

Это возможно? Если да, то каковы будут шаги для этого?


person Evaldas Buinauskas    schedule 03.01.2017    source источник


Ответы (2)


Спасибо, что копнули немного глубже, чтобы избежать установки базы данных в TRUSTWORTHY ON, что, к сожалению, является слишком распространенной практикой.

Те же шаги предпринимаются для подписи сборок и создания асимметричного ключа в master из библиотеки DLL сборки, а затем создания входа на основе этого асимметричного ключа. Единственная разница заключается в том, чтобы затем предоставить этому входу на основе ключа разрешение UNSAFE ASSEMBLY вместо разрешения EXTERNAL ACCESS ASSEMBLY.

Вам никогда не нужны оба разрешения, поскольку разрешение UNSAFE ASSEMBLY позволяет устанавливать для сборок значение EXTERNAL ACCESS, хотя наличие обоих не помешает.

Для получения дополнительной информации, в целом, связанной с работой с SQLCLR, см. серию, которую я пишу на SQL Server Central (для чтения их содержания требуется бесплатная регистрация):

Путь к SQLCLR

Если вы используете Visual Studio/SSDT для развертывания/публикации проекта SQLCLR, см. «Stairway to SQLCLR уровня 7: разработка и безопасность» в этой серии Stairway, поскольку в ней показан метод автоматизации создания асимметричного ключа и входа на основе ключа, ни один из которых не может быть обработан с помощью обычных объектов SSDT. Другая, еще более простая техника будет показана в следующей (которая будет опубликована) статье.


ОБНОВЛЕНИЕ относительно SQL Server 2017

В SQL Server 2017 появилась новая функция безопасности («Строгая безопасность CLR», расширенный параметр), которая включена по умолчанию и требует, чтобы ВСЕ сборки, даже помеченные как SAFE, были подписаны либо асимметричным ключом (т. е. строгим именем), либо сертификатом. и иметь логин (на основе того, что использовалось для подписи сборки), который имеет разрешение UNSAFE ASSEMBLY. Подробнее о том, как это сделать, с Visual Studio/SST или без него, см. в следующих двух моих сообщениях:

Пожалуйста, избегайте новой «функции» Trusted Assemblies, так как у нее гораздо больше недостатков, чем преимуществ, не говоря уже о том, что она совершенно не нужна, учитывая, что существующая функциональность уже обрабатывала ситуацию, которую «Trusted Assemblies» должны были решить. Полную информацию об этом и демонстрацию правильного способа обработки существующих неподписанных сборок см. по адресу: SQLCLR и SQL Server 2017, часть 4: «Надежные сборки» — разочарование.

person Solomon Rutzky    schedule 03.01.2017

Для всех, кто хочет подписать и развернуть проект CLR с помощью Visual Studio.

  1. Откройте визуальную студию и перейдите в свойства проекта.

    • Change the 'Permission level' to EXTERNAL_ACCESS or UNSAFE depending on what you want.
    • Нажмите кнопку «Подписание», сгенерируйте новый ключ и подпишите проект, как показано на следующем рисунке.

введите здесь описание изображения

  1. Построить проект
  2. Откройте SQL Management Studio и запустите следующие сценарии, заменив заполнители.

    Перед выполнением следующего убедитесь, что у вас есть разрешение на доступ к базе данных MASTER и каталогу проекта CLR.

   USE master;
   GO

   -- Create asymmetric key
   CREATE ASYMMETRIC KEY [PROJECT_NAME]_Key 
   FROM EXECUTABLE FILE 
   = [CLR_PROJECT_DIRECTORY]\bin\Debug\[PROJECT_NAME].dll'

   -- Create a new login with the asymmetric key
   CREATE LOGIN [PROJECT_NAME]_Login 
   FROM ASYMMETRIC KEY [PROJECT_NAME]_Key

   -- Grant External access to login
   GRANT EXTERNAL ACCESS ASSEMBLY TO [PROJECT_NAME]_Login
   GO

   -- Uncomment the following for UNSAFE assembly
   -- GRANT UNSAFE ASSEMBLY TO [PROJECT_NAME]_Login

  1. Опубликуйте свой проект из Visual Studio. Готово :)

Сценарии взяты из Создание сборки

person Thomas Negash    schedule 16.06.2020
comment
вы мастер sql clr! - person elle0087; 08.07.2021