Требование tSQLt TRUSTWORTHY и CLR. Trustworthy ms sql


Требование tSQLt TRUSTWORTHY и CLR MS SQL Server

Следующие функции полностью реализованы как код CLR, и было бы особенно сложно (и, возможно, невозможно) обойтись без CLR:

  • CaptureOuput: полезно для записи и проверки вывода, напечатанного на консоли
  • SuppressOutput: используется внутренне, чтобы помочь очистить консоль от предупреждений, возникающих в результате переименования объектов (особенно в FakeTable)
  • ResultSetFilter: необходим для захвата определенного набора результатов, созданного из сохраненного proc, который создает несколько наборов результатов
  • AssertResultSetsHaveSameMetaData: используется для сравнения метаданных двух наборов результатов
  • NewConnection: позволяет выполнить произвольную команду SQL в новом соединении. Полезно для тестирования, когда определенные свойства соединения должны быть разными. (Если память служит мне правильно, это может быть единственной причиной для TRUSTWORTHY ON сегодня).

Кроме того, tSQLt использует CLR внутренне для получения отформатированного вывода для очень больших строк, например тех, которые могут быть получены путем сравнения двух таблиц; и для генерации новых имен объектов при переименовании объектов (например, для FakeTable или SpyProcedure).

Вполне возможно, что tSQLt может быть изменен для удаления этих функций и по-прежнему функционирует с его базовым набором функций (с некоторыми ограничениями, конечно). Однако, поскольку мы смотрим в будущее на то, что будет в будущих выпусках tSQLt, очень вероятно, что в CLR будет сделано больше.

Если вы хотите использовать tSQLt, у вас, вероятно, нет опции, но для включения SQL CLR.

Существует способ обойти требование о том, чтобы установить базу данных как TRUSTWORTHY ON, создав асимметричный ключ – см. http://msdn.microsoft.com/en-us/library/ms345106.aspx.

Если это неприемлемо, существуют другие инструменты тестирования модулей базы данных, которые не требуют создания объектов в базе данных – например, DbFit

sqlserver.bilee.com

sql-server - Риски безопасности для установки trustworthy = on в sql server 2012

Свойство TRUSTWORTHY базы данных (если установлено на ON) по существу объявляет SQL Server, что код, содержащийся в этой базе данных, и выполнение в олицетворенном контексте, должен быть разрешен для доступа за пределами этой базы данных при сохранении этого олицетворенный контекст безопасности. Он также позволяет установить для всех сборников SQLCLR в этой базе данных значение EXTERNAL_ACCESS и UNSAFE, независимо от того, достигнет ли этот код за пределами сервера (внешнее значение: доступ к сети, доступ к файловой системе, доступ к реестру, доступ к среде и т.д.).

Это довольно общее средство для этого, поскольку оно охватывает весь код в базе данных. Использование сертификатов и/или асимметричных ключей для подписи модулей - procs и/или сборок - позволяет более детально контролировать, какой код имеет какие разрешения.

Настройка базы данных на TRUSTWORTHY также позволяет любому процессу, начиная с этой базы данных, доходить до уровня сервера и/или переходить в другие базы данных. Обычно процесс ограничивается/помещается на карантин в базу данных, где он был запущен. Если база данных принадлежит "sa" Login, то любой процесс, инициированный в этой базе данных и работающий как "dbo", будет эффективно иметь привилегии "sa" (yikes!).

Вместо того, чтобы пытаться описать здесь, в объеме деталей, необходимых для полной информации о специфике олицетворения, расширения упомянутого олицетворения, подписи модулей и т.д., я рекомендую изучить следующие ресурсы по этой теме:

Вам следует избегать установки вашей базы данных на TRUSTWORTHY как можно больше. Если у вас действительно есть многопоточные/асинхронные вызовы И если у вас есть исходный код и компилируете сборку, то я не могу придумать причину использования опции SET TRUSTWORTHY ON. Вместо этого вы должны подписать сборку с паролем и использовать следующие команды, чтобы настроить предпочтительный метод предоставления EXTERNAL_ACCESS и UNSAFE сборок:

USE [master]; CREATE ASYMMETRIC KEY [ClrPermissionsKey] AUTHORIZATION [dbo] FROM EXECUTABLE FILE = 'C:\path\to\my\assembly.dll'; CREATE LOGIN [ClrPermissionsLogin] FROM ASYMMETRIC KEY [ClrPermissionsKey]; GRANT UNSAFE ASSEMBLY TO [ClrPermissionsLogin];

После этого вы можете перейти в базу данных, где ваша сборка была загружена и запущена:

ALTER ASSEMBLY [MyAssembly] WITH PERMISSION_SET = UNSAFE;

Или вы могли бы включить WITH PERMISSION_SET = UNSAFE в конце команды CREATE ASSEMBLY.

qaru.site

Свойство базы данных TRUSTWORTHY

 

Свойство TRUSTWORTHY используется для указания того, доверяет ли экземпляр SQL Server базе данных и ее содержимому. По умолчанию это свойство имеет значение OFF, но его можно установить в ON при помощи инструкции ALTER DATABASE. Например, ALTER DATABASE AdventureWorks2012 SET TRUSTWORTHY ON;.

 Примечание

Изменять это свойство могут только члены предопределенной роли сервера sysadmin.

Это свойство позволяет уменьшить уязвимость системы перед рядом угроз, связанных с присоединением базы данных, содержащей один из следующих объектов:

  • вредоносные сборки с параметром разрешения EXTERNAL_ACCESS или UNSAFE. Дополнительные сведения см. в статье CLR Integration Security.

  • вредоносные модули, выполняемые в контексте привилегированных пользователей. Дополнительные сведения см. в разделе Предложение EXECUTE AS (Transact-SQL).

В обеих ситуациях объектам нужны конкретные права доступа, что повышает уязвимость системы. Для защиты от атак при использовании таких объектов в контексте базы данных, уже присоединенной к экземпляру SQL Server, применяют соответствующие механизмы. Однако, если база данных переведена в режим работы «вне сети», пользователь, имеющий доступ к файлу базы данных, теоретически может присоединить ее к любому экземпляру SQL Server и добавить в нее вредоносное содержимое. Когда в SQL Serverотсоединяются и присоединяются базы данных, для файлов данных и журналов задаются определенные разрешения, ограничивающие доступ к файлам базы данных.

Так как база данных, присоединенная к экземпляру SQL Server, не может сразу стать доверенной, то ей не разрешается доступ к ресурсам вне ее области до тех пор, пока не будет явно отмечена как доверенная. Для успешного выполнения модулей, которые обращаются к ресурсам, внешним по отношению к базе данных, и сборок с параметром разрешения EXTERNAL_ACCESS или UNSAFE нужно, чтобы были удовлетворены кое-какие дополнительные требования.

Центр обеспечения безопасности для базы данных Azure SQL и SQL Server Database Engine

ALTER DATABASE (Transact-SQL)

technet.microsoft.com