Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Рискове за сигурността при настройка на trustworthy =on в sql сървър 2012

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

Това е доста общо средство за разрешаване на това, тъй като обхваща целия код в базата данни. Използването на сертификати и/или асиметрични ключове за подписване на модули – процедури и/или сборки – позволява по-детайлен контрол върху това кой код какви разрешения има.

Задаване на база данни на TRUSTWORTHY също така позволява на всеки процес, стартиращ в тази база данни, да достигне до ниво сървър и/или през други бази данни. Обикновено процесът е ограничен/карантиниран до базата данни, където е започнал. Ако базата данни е собственост на „sa“ Вход, тогава всеки процес, иницииран в тази база данни и работещ като „dbo“, ще има ефективно „sa“ привилегии (леле!).

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

Трябва да избягвате да настройвате вашата база данни на 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 команда.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво причинява грешка Подзаявка върна повече от 1 стойност...?

  2. Използване на функция Previous() в данни, сортирани по обратна дата в SSRS?

  3. Как да извлечете или конвертирате времеви данни от низ в SQL Server

  4. SQL клиент за Mac OS X, който работи с MS SQL Server

  5. Актуализирайте същите данни от същата таблица