Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zagrożenia bezpieczeństwa związane z ustawieniem godny zaufania =włączony na serwerze sql 2012

TRUSTWORTHY właściwość bazy danych (gdy ustawiona na ON ) zasadniczo deklaruje SQL Server, że kod zawarty w tej bazie danych i wykonywany w kontekście personifikowanym powinien mieć możliwość wychodzenia poza tę bazę danych przy zachowaniu tego kontekstu bezpieczeństwa personifikowanego. Pozwala także na wszystko Zestawy SQLCLR w tej bazie danych mają być ustawione na EXTERNAL_ACCESS i UNSAFE , niezależnie od tego, czy kod dociera poza serwer (w znaczeniu zewnętrznym:dostęp do sieci, dostęp do systemu plików, dostęp do rejestru, dostęp do środowiska itp.).

Jest to dość ogólny sposób pozwalający na to, ponieważ obejmuje cały kod w bazie danych. Używanie certyfikatów i/lub kluczy asymetrycznych do podpisywania modułów — procesów i/lub zestawów — pozwala na bardziej szczegółową kontrolę nad tym, jaki kod ma jakie uprawnienia.

Ustawianie bazy danych na TRUSTWORTHY umożliwia również dowolnemu procesowi rozpoczynającemu się w tej Bazie Danych osiągnięcie poziomu Serwera i/lub w poprzek innych Baz Danych. Zwykle proces jest ograniczony/poddawany kwarantannie w Bazie Danych, w której się rozpoczął. Jeśli baza danych należy do loginu „sa”, każdy proces zainicjowany w tej bazie danych i działający jako „dbo” będzie miał faktycznie uprawnienia „sa” (Ups!).

Zamiast próbować opisywać tutaj ilość szczegółów wymaganych do pełnego przekazania szczegółów dotyczących podszywania się, rozszerzania tej podszywania się, podpisywania modułów itp., zalecam zapoznanie się z następującymi zasobami na ten temat:

Powinieneś unikać ustawiania bazy danych na TRUSTWORTHY tak dużo jak to możliwe. Jeśli naprawdę musisz mieć wywołania wielowątkowe / asynchroniczne ORAZ jeśli masz kod źródłowy i kompilujesz zestaw, to nie mogę wymyślić powodu, aby użyć SET TRUSTWORTHY ON opcja. Zamiast tego powinieneś podpisać zestaw hasłem i użyj następujących poleceń, aby skonfigurować preferowaną metodę zezwalania na EXTERNAL_ACCESS i UNSAFE zespoły:

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];

Gdy już to zrobisz, możesz przejść do bazy danych, w której Twój zespół został załadowany i uruchomić:

ALTER ASSEMBLY [MyAssembly] WITH PERMISSION_SET = UNSAFE;

Lub możesz dołączyć WITH PERMISSION_SET = UNSAFE na końcu CREATE ASSEMBLY polecenie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to jest typ danych SYSNAME w SQL Server?

  2. Nie można ukończyć odroczonego przygotowania, błąd podczas korzystania z lokalnej bazy danych jako serwera połączonego

  3. Nie można powiązać wieloczęściowego identyfikatora - SubQuery

  4. Problem TSQL Pivoting - szukanie lepszego podejścia

  5. SQL, czy mogę mieć warunkowo unikatowe ograniczenie w tabeli?