TRUSTWORTHY
свойство на база данни (когато е зададено на ON
) по същество декларира на SQL Server, че кодът, съдържащ се в тази база данни и изпълняващ се в имитиран контекст, трябва да може да достигне извън тази база данни, като същевременно поддържа този имитиран контекст на сигурност. Освен това позволява всички SQLCLR сборки в тази база данни да бъдат зададени на EXTERNAL_ACCESS
и UNSAFE
, независимо дали този код достига или не извън сървъра (външен смисъл:достъп до мрежата, достъп до файловата система, достъп до регистъра, достъп до средата и т.н.).
Това е доста общо средство за разрешаване на това, тъй като обхваща целия код в базата данни. Използването на сертификати и/или асиметрични ключове за подписване на модули – процедури и/или сборки – позволява по-детайлен контрол върху това кой код какви разрешения има.
Задаване на база данни на TRUSTWORTHY
също така позволява на всеки процес, стартиращ в тази база данни, да достигне до ниво сървър и/или през други бази данни. Обикновено процесът е ограничен/карантиниран до базата данни, където е започнал. Ако базата данни е собственост на „sa“ Вход, тогава всеки процес, иницииран в тази база данни и работещ като „dbo“, ще има ефективно „sa“ привилегии (леле!).
Вместо да се опитвам да описвам тук, с количеството подробности, необходими за пълно съобщаване на спецификата относно представянето под самоличност, разширяването на споменатото представяне, модулите за подписване и т.н., препоръчвам да разгледате следните ресурси по тази тема:
- МОЛЯ, моля , моля, спрете да използвате имитиране, НАДЕЖДНО и кръстосано свързване на собственост между DB
- Указания за използване на настройката за база данни TRUSTWORTHY в SQL Server
- Разширяване на имитирането на база данни чрез използване на EXECUTE AS
Това е много информативен документ, който обхваща повечето аспекти на тази тема и също така е споменат в свързаната страница по-горе. - Стълбище към SQLCLR ниво 4:Сигурност (ВЪНШНИ и НЕСИГУРНИ сборки)
Това е статия, която написах като част от поредица за SQLCLR, която има примери, които илюстрират разликите между метода TRUSTWORTHY и метода за вход, базиран на Signed Assembly; Необходима е безплатна регистрация.
Трябва да избягвате да настройвате вашата база данни на 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
команда.