Udostępnij za pomocą


Transparent Data Encryption (TDE)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Funkcja Transparent Data Encryption (TDE) szyfruje pliki danych sql Server, Azure SQL Database i Azure Synapse Analytics. To szyfrowanie jest nazywane szyfrowaniem danych magazynowanych.

Aby zabezpieczyć bazę danych użytkownika, możesz podjąć środki ostrożności, takie jak:

  • Projektowanie bezpiecznego systemu.
  • Szyfrowanie poufnych zasobów.
  • Tworzenie zapory wokół serwerów baz danych.

Jednak złośliwa strona, która kradnie nośniki fizyczne, takie jak dyski lub taśmy kopii zapasowej, może przywrócić lub dołączyć bazę danych i przeglądać jej dane.

Jednym z rozwiązań jest szyfrowanie poufnych danych w bazie danych i używanie certyfikatu do ochrony kluczy szyfrujących dane. To rozwiązanie uniemożliwia wszystkim osobom bez kluczy korzystanie z danych. Należy jednak zaplanować ten rodzaj ochrony z wyprzedzeniem.

Funkcja TDE wykonuje szyfrowanie we/wy w czasie rzeczywistym i odszyfrowywanie danych i plików dziennika. Szyfrowanie używa klucza szyfrowania bazy danych (DEK). Rekord rozruchowy bazy danych przechowuje klucz dostępności podczas odzyskiwania. Klucz szyfrowania danych jest kluczem symetrycznym i jest zabezpieczony przez certyfikat, który przechowuje bazy danych serwera master lub za pomocą klucza asymetrycznego chronionego przez moduł EKM.

Funkcja TDE chroni dane magazynowane, czyli pliki danych i dzienników. Umożliwia ona przestrzeganie wielu przepisów, przepisów i wytycznych ustanowionych w różnych branżach. Dzięki temu deweloperzy oprogramowania mogą szyfrować dane przy użyciu algorytmów szyfrowania AES i 3DES bez konieczności zmieniania istniejących aplikacji.

Uwaga / Notatka

Funkcja TDE nie jest dostępna dla systemowych baz danych. Nie można go użyć do szyfrowania master, modellub msdb. tempdb funkcja jest automatycznie szyfrowana, gdy funkcja TDE włączona przez bazę danych użytkownika, ale nie może być szyfrowana bezpośrednio.

Funkcja TDE nie zapewnia szyfrowania między kanałami komunikacyjnymi. Aby uzyskać więcej informacji na temat szyfrowania danych między kanałami komunikacyjnymi, zobacz Szyfrowanie połączeń z programem SQL Server przez zaimportowanie certyfikatu.

Powiązane tematy:

Informacje o funkcji TDE

Szyfrowanie pliku bazy danych odbywa się na poziomie strony. Strony w zaszyfrowanej bazie danych są szyfrowane przed zapisem na dysku i są odszyfrowywane podczas odczytu do pamięci. Funkcja TDE nie zwiększa rozmiaru zaszyfrowanej bazy danych.

Informacje dotyczące usługi SQL Database

W przypadku używania funkcji TDE z usługą Azure SQL Database usługa SQL Database automatycznie tworzy certyfikat na poziomie serwera przechowywany w master bazie danych. Aby przenieść bazę danych TDE w usłudze SQL Database, nie musisz odszyfrowywać bazy danych dla operacji przenoszenia. Aby uzyskać więcej informacji na temat używania funkcji TDE z usługą SQL Database, zobacz Transparent Data Encryption with Azure SQL Database (Przezroczyste szyfrowanie danych w usłudze Azure SQL Database).

Informacje dotyczące programu SQL Server

Po zabezpieczeniu bazy danych można ją przywrócić przy użyciu odpowiedniego certyfikatu. Aby uzyskać więcej informacji na temat certyfikatów, zobacz Certyfikaty programu SQL Server i klucze asymetryczne.

Po włączeniu funkcji TDE natychmiast wykonaj kopię zapasową certyfikatu i skojarzonego z nim klucza prywatnego. Jeśli certyfikat stanie się niedostępny lub jeśli przywracasz lub dołączasz bazę danych na innym serwerze, potrzebujesz kopii zapasowych certyfikatu i klucza prywatnego. W przeciwnym razie nie można otworzyć bazy danych. Należy również utworzyć kopię zapasową certyfikatów przechowywanych w zawartej systemowej bazie danych .

Zachowaj certyfikat szyfrowania, nawet jeśli wyłączono funkcję TDE w bazie danych. Chociaż baza danych nie jest zaszyfrowana, części dziennika transakcji mogą pozostać chronione. Może być również potrzebny certyfikat dla niektórych operacji, dopóki nie wykonasz pełnej kopii zapasowej bazy danych.

Nadal można użyć certyfikatu, który przekracza datę wygaśnięcia, aby zaszyfrować i odszyfrować dane za pomocą funkcji TDE.

Hierarchia szyfrowania

Interfejs API ochrony danych systemu Windows (DPAPI) znajduje się w katalogu głównym drzewa szyfrowania, zabezpiecza hierarchię kluczy na poziomie komputera i służy do ochrony klucza głównego usługi (SMK) dla wystąpienia serwera bazy danych. Klucz SMK chroni klucz główny bazy danych (DMK), który jest przechowywany na poziomie bazy danych użytkownika i chroni certyfikaty i klucze asymetryczne. Te klucze z kolei chronią klucze symetryczne, które chronią dane. Funkcja TDE używa podobnej hierarchii do certyfikatu. W przypadku korzystania z funkcji TDE klucz DMK i certyfikat muszą być przechowywane w master bazie danych. Nowy klucz używany tylko dla funkcji TDE i określany jako klucz szyfrowania bazy danych (DEK) jest tworzony i przechowywany w bazie danych użytkownika.

Poniższa ilustracja przedstawia architekturę szyfrowania TDE. W przypadku używania funkcji TDE w usłudze SQL Database można konfigurować tylko elementy na poziomie bazy danych (klucz i ALTER DATABASE fragmenty szyfrowania bazy danych).

Diagram przedstawiający architekturę przezroczystego szyfrowania danych.

Włączanie funkcji TDE

Aby użyć funkcji TDE, wykonaj następujące kroki.

Dotyczy: SQL Server.

  1. Utwórz klucz główny.
  2. Utwórz lub uzyskaj certyfikat chroniony przez klucz główny.
  3. Utwórz klucz szyfrowania bazy danych i chroń go przy użyciu certyfikatu.
  4. Ustaw bazę danych na użycie szyfrowania.

W poniższym przykładzie pokazano szyfrowanie i odszyfrowywanie AdventureWorks2025 bazy danych przy użyciu certyfikatu o nazwie MyServerCert zainstalowanego na serwerze.

USE master;
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD= '<password>';
GO

CREATE CERTIFICATE MyServerCert
    WITH SUBJECT = 'My DEK Certificate';
GO

USE AdventureWorks2022;
GO

CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256
    ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO

ALTER DATABASE AdventureWorks2022
    SET ENCRYPTION ON;
GO

Operacje szyfrowania i odszyfrowywania są zaplanowane w wątkach w tle przez program SQL Server. Aby wyświetlić stan tych operacji, użyj widoków wykazu i dynamicznych widoków zarządzania w tabeli, która zostanie wyświetlona w dalszej części tego artykułu.

Ostrzeżenie

Pliki kopii zapasowych baz danych z włączoną funkcją TDE są również szyfrowane za pomocą klucza szyfrowania danych. W związku z tym po przywróceniu tych kopii zapasowych certyfikat chroniący klucz szyfrowania danych musi być dostępny. W związku z tym oprócz tworzenia kopii zapasowej bazy danych upewnij się, że kopie zapasowe certyfikatów serwera są obsługiwane. Utrata danych powoduje, że certyfikaty nie są już dostępne.

Aby uzyskać więcej informacji, zobacz Certyfikaty programu SQL Server i klucze asymetryczne.

Polecenia i funkcje

Aby akceptować certyfikaty TDE, użyj klucza głównego bazy danych, aby je zaszyfrować. Jeśli szyfrujesz je tylko przy użyciu hasła, instrukcje odrzucają je jako szyfrujące.

Ważne

Jeśli certyfikaty są chronione po użyciu funkcji TDE, baza danych stanie się niedostępna po ponownym uruchomieniu.

Poniższa tabela zawiera linki i wyjaśnienia poleceń i funkcji TDE:

Polecenie lub funkcja Przeznaczenie
TWORZENIE KLUCZA SZYFROWANIA BAZY DANYCH Tworzy klucz, który szyfruje bazę danych
ALTER DATABASE ENCRYPTION KEY Zmienia klucz, który szyfruje bazę danych
UPUŚĆ KLUCZ SZYFROWANIA BAZY DANYCH Usuwa klucz, który szyfruje bazę danych
OPCJE ALTER DATABASE SET Objaśnienie opcji używanej ALTER DATABASE do włączania funkcji TDE

Widoki wykazu i dynamiczne widoki zarządzania

W poniższej tabeli przedstawiono widoki wykazu TDE i dynamiczne widoki zarządzania (DMV).

Widok wykazu lub dynamiczny widok zarządzania Przeznaczenie
sys.databases Widok wykazu wyświetlający informacje o bazie danych
sys.certificates Widok wykazu przedstawiający certyfikaty w bazie danych
sys.dm_database_encryption_keys Dynamiczny widok zarządzania, który zawiera informacje o kluczach szyfrowania bazy danych i stanie szyfrowania

Permissions

Każda funkcja I polecenie TDE ma indywidualne wymagania dotyczące uprawnień zgodnie z opisem w tabelach przedstawionych wcześniej.

Wyświetlanie metadanych związanych z funkcją TDE wymaga VIEW DEFINITION uprawnienia do certyfikatu.

Rozważania

Podczas gdy trwa skanowanie ponownego szyfrowania dla operacji szyfrowania bazy danych, operacje konserwacji bazy danych są wyłączone. Aby wykonać operacje konserwacji, możesz użyć ustawienia trybu pojedynczego użytkownika dla bazy danych. Aby uzyskać więcej informacji, zobacz Ustawianie bazy danych na tryb pojedynczego użytkownika.

Użyj dynamicznego sys.dm_database_encryption_keys widoku zarządzania, aby znaleźć stan szyfrowania bazy danych. Aby uzyskać więcej informacji, zobacz sekcję Widoki wykazu i dynamiczne widoki zarządzania we wcześniejszej części tego artykułu.

W przypadku funkcji TDE wszystkie pliki i grupy plików w bazie danych są szyfrowane. Jeśli jakakolwiek grupa plików w bazie danych zostanie oznaczona READ ONLY, operacja szyfrowania bazy danych zakończy się niepowodzeniem.

Jeśli używasz bazy danych w dublowaniu bazy danych lub wysyłaniu dzienników, obie bazy danych są szyfrowane. Transakcje dziennika są szyfrowane podczas ich wysyłania.

Ważne

Indeksy pełnotekstowe są szyfrowane, gdy baza danych jest ustawiona na potrzeby szyfrowania. Takie indeksy utworzone w programie SQL Server 2005 (9.x) i starszych wersjach są importowane do bazy danych przez program SQL Server 2008 (10.0.x) i nowsze wersje oraz są szyfrowane przez funkcję TDE.

Wskazówka

Aby monitorować zmiany stanu TDE bazy danych, użyj inspekcji programu SQL Server lub inspekcji usługi Azure SQL Database. W przypadku programu SQL Server funkcja TDE jest śledzona w grupie akcji inspekcji , którą można znaleźć w DATABASE_OBJECT_CHANGE_GROUP).

Ograniczenia

Następujące operacje są niedozwolone podczas początkowego szyfrowania bazy danych, zmiany klucza lub odszyfrowywania bazy danych:

  • Usuwanie pliku z grupy plików w bazie danych
  • Usuwanie bazy danych
  • Przełączanie bazy danych w tryb offline
  • Odłączanie bazy danych
  • Przenoszenie bazy danych lub grupy plików do READ ONLY stanu

Następujące operacje są niedozwolone podczas instrukcji CREATE DATABASE ENCRYPTION KEY, ALTER DATABASE ENCRYPTION KEY, DROP DATABASE ENCRYPTION KEYi ALTER DATABASE...SET ENCRYPTION :

  • Usuwanie pliku z grupy plików w bazie danych
  • Usuwanie bazy danych
  • Przełączanie bazy danych w tryb offline
  • Odłączanie bazy danych
  • Przenoszenie bazy danych lub grupy plików do READ ONLY stanu
  • ALTER DATABASE Używanie polecenia
  • Uruchamianie kopii zapasowej bazy danych lub pliku bazy danych
  • Uruchamianie przywracania bazy danych lub pliku bazy danych
  • Tworzenie migawki

Następujące operacje lub warunki uniemożliwiają CREATE DATABASE ENCRYPTION KEYinstrukcje , ALTER DATABASE ENCRYPTION KEY, DROP DATABASE ENCRYPTION KEYi ALTER DATABASE...SET ENCRYPTION :

  • Baza danych jest tylko do odczytu lub zawiera grupy plików tylko do odczytu.
  • Polecenie ALTER DATABASE jest uruchomione.
  • Trwa tworzenie kopii zapasowej danych.
  • Baza danych jest w stanie offline lub przywracania.
  • Trwa tworzenie migawki.
  • Zadania konserwacji bazy danych są uruchomione.

Po utworzeniu plików bazy danych natychmiastowe inicjowanie plików jest niedostępne po włączeniu funkcji TDE.

Aby zaszyfrować klucz szyfrowania kluczy za pomocą klucza asymetrycznego, klucz asymetryczny musi znajdować się u dostawcy rozszerzonego zarządzania kluczami.

Skanowanie TDE

Aby włączyć funkcję TDE w bazie danych, program SQL Server musi przeprowadzić skanowanie szyfrowania. Skanowanie odczytuje każdą stronę z plików danych do puli, a następnie zapisuje zaszyfrowane strony z powrotem na dysku.

Aby zapewnić większą kontrolę nad skanowaniem szyfrowania, program SQL Server 2019 (15.x) wprowadza skanowanie TDE, które ma składnię wstrzymania i wznowienia. Skanowanie można wstrzymać, gdy obciążenie w systemie jest duże lub w godzinach krytycznych dla działania firmy, a następnie wznowić skanowanie później.

Użyj następującej składni, aby wstrzymać skanowanie szyfrowania TDE:

ALTER DATABASE <db_name> SET ENCRYPTION SUSPEND;

Podobnie użyj następującej składni, aby wznowić skanowanie szyfrowania TDE:

ALTER DATABASE <db_name> SET ENCRYPTION RESUME;

Kolumna encryption_scan_state została dodana do dynamicznego sys.dm_database_encryption_keys widoku zarządzania. Przedstawia bieżący stan skanowania szyfrowania. Istnieje również nowa kolumna o nazwie encryption_scan_modify_date, która zawiera datę i godzinę ostatniej zmiany stanu skanowania szyfrowania.

Jeśli wystąpienie programu SQL Server zostanie uruchomione ponownie podczas skanowania szyfrowania zostanie wstrzymane, podczas uruchamiania zostanie zarejestrowany komunikat. Komunikat wskazuje, że istniejące skanowanie zostało wstrzymane.

Ważne

Funkcja wstrzymania i wznawiania skanowania TDE nie jest obecnie dostępna w usługach Azure SQL Database, Azure SQL Managed Instance i Azure Synapse Analytics.

Dzienniki TDE i transakcji

Funkcja TDE chroni pliki danych i pliki dziennika magazynowane. Szyfrowanie całej bazy danych po włączeniu funkcji TDE w niezaszyfrowanej bazie danych jest operacją z możliwością rozszyfrowania danych, a czas potrzebny na to zależy od zasobów systemowych, na których jest uruchomiona ta baza danych. Widok DMV sys.dm_database_encryption_keys może służyć do określania stanu szyfrowania bazy danych.

Po włączeniu funkcji TDE aparat bazy danych wymusza utworzenie nowego dziennika transakcji, który będzie szyfrowany za pomocą klucza szyfrowania bazy danych. Każdy dziennik wygenerowany przez poprzednie transakcje lub bieżące długotrwałe transakcje przeplatane między zmianą stanu TDE nie są szyfrowane.

Dzienniki transakcji można monitorować przy użyciu sys.dm_db_log_info widoku DMV, który pokazuje również, czy plik dziennika jest zaszyfrowany, czy nie korzysta z kolumny dostępnej vlf_encryptor_thumbprint w usłudze Azure SQL, a także programu SQL Server 2019 (15.x) i nowszych wersji. Aby znaleźć stan szyfrowania pliku dziennika przy użyciu encryption_state kolumny w sys.dm_database_encryption_keys widoku, oto przykładowe zapytanie:

USE AdventureWorks2022;
GO

/* The value 3 represents an encrypted state
   on the database and transaction logs. */
SELECT *
FROM sys.dm_database_encryption_keys
WHERE encryption_state = 3;
GO

Aby uzyskać więcej informacji na temat architektury pliku dziennika programu SQL Server, zobacz Dziennik transakcji.

Przed zmianą klucza szyfrowania danych poprzedni klucz szyfrowania danych szyfruje wszystkie dane zapisane w dzienniku transakcji.

Jeśli dwukrotnie zmienisz klucz szyfrowania szyfrowania danych, musisz wykonać kopię zapasową dziennika, zanim będzie można ponownie zmienić klucz szyfrowania danych.

TDE i baza danych systemu tempdb

Systemowa tempdb baza danych jest szyfrowana, jeśli jakakolwiek inna baza danych w wystąpieniu programu SQL Server jest szyfrowana przy użyciu funkcji TDE. To szyfrowanie może mieć wpływ na wydajność nieszyfrowanych baz danych w tym samym wystąpieniu programu SQL Server. Aby uzyskać więcej informacji na temat systemowej tempdb bazy danych, zobacz baza danych tempdb.

TDE i replikacja

Replikacja nie replikuje automatycznie danych z bazy danych z włączoną funkcją TDE w postaci zaszyfrowanej. Oddzielnie włącz funkcję TDE, jeśli chcesz chronić bazy danych dystrybucji i subskrybentów.

Replikacja migawki może przechowywać dane w niezaszyfrowanych plikach pośrednich, takich jak pliki BCP. Początkowa dystrybucja danych na potrzeby replikacji transakcyjnej i scalania może również. Podczas takiej replikacji można włączyć szyfrowanie w celu ochrony kanału komunikacyjnego.

Aby uzyskać więcej informacji, zobacz Szyfrowanie połączeń z programem SQL Server przez zaimportowanie certyfikatu.

TDE i grupy dostępności

Zaszyfrowaną bazę danych można dodać do zawsze włączonej grupy dostępności.

Aby zaszyfrować bazy danych, które są częścią grupy dostępności, utwórz klucz główny i certyfikaty lub klucz asymetryczny (EKM) na wszystkich replikach pomocniczych przed utworzeniem klucza szyfrowania bazy danych w repliki podstawowej.

Jeśli certyfikat jest używany do ochrony klucza szyfrowania plików, należy utworzyć kopię zapasową certyfikatu utworzonego w repliki podstawowej, a następnie utworzyć certyfikat z pliku na wszystkich replikach pomocniczych przed utworzeniem klucza szyfrowania plików w repliki podstawowej.

Dane TDE i FILESTREAM

Dane FILESTREAM nie są szyfrowane, nawet jeśli włączono funkcję TDE.

TDE i kopie zapasowe

Certyfikaty są często używane w funkcji Transparent Data Encryption w celu ochrony klucza szyfrowania danych. Certyfikat należy utworzyć w master bazie danych. Pliki kopii zapasowych baz danych z włączoną funkcją TDE są również szyfrowane przy użyciu klucza szyfrowania danych. W związku z tym po przywróceniu z tych kopii zapasowych certyfikat chroniący klucz szyfrowania danych musi być dostępny. Oznacza to, że oprócz tworzenia kopii zapasowej bazy danych należy przechowywać kopie zapasowe certyfikatów serwera, aby zapobiec utracie danych. Utrata danych występuje, jeśli certyfikat nie jest już dostępny.

Usuwanie funkcji TDE

Usuń szyfrowanie z bazy danych przy użyciu instrukcji ALTER DATABASE .

ALTER DATABASE <db_name> SET ENCRYPTION OFF;

Aby wyświetlić stan bazy danych, użyj sys.dm_database_encryption_keys dynamicznego widoku zarządzania.

Uwaga / Notatka

Chociaż proces szyfrowania jest w toku, ALTER DATABASE instrukcje nie są dozwolone w bazie danych. Dopóki proces szyfrowania nie zostanie zakończony, nie można rozpocząć odszyfrowywania bazy danych.

Poczekaj na zakończenie odszyfrowywania przed usunięciem klucza szyfrowania za pomocą funkcji DROP DATABASE ENCRYPTION KEY.

Ważne

Utwórz kopię zapasową klucza głównego i certyfikatu używanego na potrzeby funkcji TDE w bezpiecznej lokalizacji. Klucz główny i certyfikat są wymagane do przywrócenia kopii zapasowych wykonanych podczas szyfrowania bazy danych za pomocą funkcji TDE. Po usunięciu klucza szyfrowania danych utwórz kopię zapasową dziennika, a następnie utwórz nową pełną kopię zapasową odszyfrowanej bazy danych.

TDE i rozszerzenie puli

Podczas szyfrowania bazy danych przy użyciu funkcji TDE pliki związane z rozszerzeniem puli (BPE) nie są szyfrowane. W przypadku tych plików użyj narzędzi szyfrowania, takich jak BitLocker lub EFS na poziomie systemu plików.

TDE i In-Memory OLTP

Funkcję TDE można włączyć w bazie danych, która ma In-Memory obiektów OLTP. W programie SQL Server 2016 (13.x) i usłudze Azure SQL Database In-Memory rekordy dziennika OLTP i dane są szyfrowane, jeśli włączysz funkcję TDE. W programie SQL Server 2014 (12.x) rekordy dziennika OLTP In-Memory są szyfrowane w przypadku włączenia funkcji TDE, ale pliki w MEMORY_OPTIMIZED_DATA grupie plików są niezaszyfrowane.

Wskazówki dotyczące zarządzania certyfikatami używanymi w funkcji TDE

Należy utworzyć kopię zapasową certyfikatu i klucza głównego bazy danych, gdy baza danych jest włączona dla funkcji TDE i jest używana w wysyłaniu dzienników lub dublowaniu bazy danych. Należy również utworzyć kopię zapasową certyfikatów przechowywanych w zawartej systemowej bazie danych.

Certyfikat używany do ochrony klucza szyfrowania danych nigdy nie powinien zostać usunięty z master bazy danych. Dzięki temu zaszyfrowana baza danych stanie się niedostępna.

Komunikat podobny do poniższego (błąd 33091) jest zgłaszany po wykonaniu CREATE DATABASE ENCRYPTION KEY polecenia, jeśli certyfikat używany w poleceniu nie został już utworzony.

Ostrzeżenie

Nie utworzono kopii zapasowej certyfikatu używanego do szyfrowania klucza szyfrowania bazy danych. Należy natychmiast utworzyć kopię zapasową certyfikatu i klucza prywatnego skojarzonego z certyfikatem. Jeśli certyfikat kiedykolwiek stanie się niedostępny lub jeśli musisz przywrócić lub dołączyć bazę danych na innym serwerze, musisz mieć kopie zapasowe zarówno certyfikatu, jak i klucza prywatnego albo nie będzie można otworzyć bazy danych.

Poniższe zapytanie może służyć do identyfikowania certyfikatów używanych w funkcji TDE, których kopia zapasowa nie została utworzona od momentu jego utworzenia.

SELECT pvt_key_last_backup_date,
       Db_name(dek.database_id) AS encrypteddatabase,
       c.name AS Certificate_Name
FROM sys.certificates AS c
     INNER JOIN sys.dm_database_encryption_keys AS dek
         ON c.thumbprint = dek.encryptor_thumbprint;

Jeśli kolumna pvt_key_last_backup_date to NULL, baza danych odpowiadająca temu wierszowi została włączona dla funkcji TDE, ale certyfikat używany do ochrony klucza szyfrowania danych nie został objęty kopią zapasową. Aby uzyskać więcej informacji na temat tworzenia kopii zapasowej certyfikatu, zobacz BACKUP CERTIFICATE (CERTYFIKAT KOPII ZAPASOWEJ).