Użyj łącznika SQL Server z funkcjami szyfrowania SQL

Dotyczy:programu SQL Server

Typowe działania szyfrowania SQL Server, które wykorzystują asymetryczny klucz chroniony przez Azure Key Vault, dzielą się na następujące trzy obszary:

  • Przezroczyste szyfrowanie danych (TDE) przy użyciu asymetrycznego klucza z Azure Key Vault.
  • Szyfrowanie kopii zapasowych za pomocą asymetrycznego klucza z magazynu kluczy.
  • Szyfrowanie na poziomie kolumnowym za pomocą asymetrycznego klucza z magazynu kluczy.

Wykonaj kroki od 1 do 4 w ramach Set up Transparent Data Encryption with Azure Key Vault for SQL Server, zanim przejdziesz do kroków opisanych w tym artykule.

Notatka

Wersje 1.0.0.440 i wcześniejsze zostały zastąpione i nie są już wspierane w środowiskach produkcyjnych. Zaktualizuj do wersji 1.0.1.0 lub nowszej. Pobierz aktualną wersję z Centrum pobierania Microsoft i postępuj zgodnie z instrukcjami w sekcji „Upgrade of SQL Server Connector” w artykule SQL Server Connector maintenance and troubleshooting.

Notatka

microsoft Entra ID był wcześniej znany jako Azure Active Directory (Azure AD).

Przezroczyste szyfrowanie danych przy użyciu asymetrycznego klucza z Azure Key Vault

Po ukończeniu kroków 1-4 w ramach Set up Transparent Data Encryption with Azure Key Vault for SQL Server, użyj klucza Azure Key Vault, aby zaszyfrować klucz szyfrujący bazy danych za pomocą TDE. Aby uzyskać więcej informacji o rotacji kluczy za pomocą programu PowerShell, zobacz Obracanie ochrony Transparent Data Encryption (TDE) przy użyciu programu PowerShell.

Ważny

Nie usuwaj poprzednich wersji klucza po rotacji. Gdy następuje rotacja kluczy, część danych jest nadal szyfrowana poprzednimi kluczami, na przykład starsze kopie zapasowe baz danych, pliki logów kopii zapasowych oraz pliki logów transakcyjnych.

Musisz utworzyć dane uwierzytelniające i login oraz stworzyć klucz szyfrowania bazy danych, który szyfruje dane i logi w bazie. Szyfrowanie bazy danych wymaga CONTROL uprawnienia do tej bazy. Poniższa grafika pokazuje hierarchię klucza szyfrującego podczas korzystania z Azure Key Vault.

Diagram przedstawiający hierarchię klucza szyfrującego podczas korzystania z Azure Key Vault.

  1. Tworzenie poświadczeń programu SQL Server dla silnika bazy danych do użytku dla TDE

    Database Engine wykorzystuje dane uwierzytelniające aplikacji Microsoft Entra do dostępu do Key Vault podczas ładowania bazy danych. Aby ograniczyć uprawnienia do Key Vault, które przyznajesz, utwórz kolejne Client ID i Secret, zgodnie z opisem w kroku 1: Ustaw model uwierzytelniania dla Database Engine.

    Zmodyfikuj poniższy skrypt Transact-SQL w następujący sposób:

    • Edytuj argument IDENTITY (ContosoDevKeyVault), aby wskazać usługę Azure Key Vault.

    • Zastąp pierwszą część argumentu SECRET identyfikatorem klienta aplikacji Microsoft Entra z kroku 1: Ustaw model uwierzytelniania. W tym przykładzie identyfikator klienta jest EF5C8E094D2A4A769998D93440D8115D.

      Ważny

      Należy usunąć łączniki z identyfikatora klienta .

    • Uzupełnij drugą część argumentu SECRET wartością Client Secret z kroku 1. W tym przykładzie sekret klienta to ReplaceWithAADClientSecret.

    • Końcowy ciąg dla argumentu SECRET to długa sekwencja liter i cyfr, bez myślników.

    USE master;  
    CREATE CREDENTIAL Azure_EKM_TDE_cred   
        WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany   
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplaceWithAADClientSecret'   
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;  
    
  2. Utwórz login SQL Server dla silnika bazy danych dla TDE

    Utwórz identyfikator logowania programu SQL Server i dodaj do niego poświadczenia z kroku 1. W tym przykładzie Transact-SQL użyto tego samego klucza, który został zaimportowany wcześniej.

    USE master;  
    -- Create a SQL Server login associated with the asymmetric key   
    -- for the Database engine to use when it loads a database   
    -- encrypted by TDE.  
    CREATE LOGIN TDE_Login   
    FROM ASYMMETRIC KEY CONTOSO_KEY;  
    GO   
    
    -- Alter the TDE Login to add the credential for use by the   
    -- Database Engine to access the key vault  
    ALTER LOGIN TDE_Login   
    ADD CREDENTIAL Azure_EKM_TDE_cred ;  
    GO  
    
  3. Utwórz klucz szyfrowania bazy danych (DEK)

    DEK szyfruje Twoje dane i pliki logów w instancji bazy danych, a następnie jest szyfrowany asymetrycznym kluczem Azure Key Vault. Możesz stworzyć DEK, używając dowolnego algorytmu lub długości klucza, którą obsługuje SQL Server.

    USE ContosoDatabase;  
    GO  
    
    CREATE DATABASE ENCRYPTION KEY   
    WITH ALGORITHM = AES_256   
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;  
    GO  
    
  4. Włącz TDE

    -- Alter the database to enable transparent data encryption.  
    ALTER DATABASE ContosoDatabase   
    SET ENCRYPTION ON;  
    GO  
    

    Korzystając z Management Studio, sprawdź, czy TDE jest włączone, łącząc się z bazą danych za pomocą Eksplorator obiektów. Kliknij prawym przyciskiem myszy bazę danych, wskaż Zadania, a następnie wybierz Zarządzaj szyfrowaniem bazy danych.

    Zrzut ekranu przedstawiający Eksplorator obiektów z wybranymi zadaniami > Zarządzanie szyfrowaniem bazy danych. ekm-tde-object-explorer

    W oknie dialogowym Zarządzanie Szyfrowaniem Bazy Danych upewnij się, że TDE jest włączone i który klucz asymetryczny jest używany do szyfrowania klucza szyfrowania danych.

    Zrzut ekranu okna dialogowego Zarządzanie szyfrowaniem bazy danych z wybraną opcją Ustaw szyfrowanie bazy danych i żółtym banerem z informacją, że TDE jest teraz włączone.

    Alternatywnie można wykonać następujący skrypt Transact-SQL. Stan szyfrowania 3 wskazuje zaszyfrowaną bazę danych.

    USE MASTER  
    SELECT * FROM sys.asymmetric_keys  
    
    -- Check which databases are encrypted using TDE  
    SELECT d.name, dek.encryption_state   
    FROM sys.dm_database_encryption_keys AS dek  
    JOIN sys.databases AS d  
         ON dek.database_id = d.database_id;  
    

    Notatka

    Baza danych tempdb jest automatycznie szyfrowana za każdym razem, gdy każda baza danych włączy funkcję TDE.

Szyfrowanie kopii zapasowych za pomocą asymetrycznego klucza z magazynu kluczy

Zaszyfrowane kopie zapasowe są obsługiwane od programu SQL Server 2014 (12.x). Poniższy przykład tworzy i przywraca kopię zapasową zaszyfrowaną kluczem szyfrującym dane, który jest chroniony przez klucz asymetryczny w magazynie kluczy.

Database Engine wykorzystuje dane uwierzytelniające aplikacji Microsoft Entra do dostępu do magazynu kluczy podczas ładowania bazy. Aby ograniczyć uprawnienia do magazynu kluczy, które przyznajesz, utwórz kolejne ID klienta i sekret, zgodnie z opisem w kroku 1: Ustaw model uwierzytelniania dla Database Engine.

  1. Utwórz poświadczenie SQL Server używane przez aparat bazy danych do szyfrowania kopii zapasowych

    Zmodyfikuj poniższy skrypt Transact-SQL w następujący sposób:

    • Edytuj argument IDENTITY (ContosoDevKeyVault), aby wskazać usługę Azure Key Vault.

    • Zastąp pierwszą część argumentu SECRET identyfikatorem Identyfikator klienta aplikacji Microsoft Entra z kroku 1: Ustaw model uwierzytelniania. W tym przykładzie identyfikator klienta jest EF5C8E094D2A4A769998D93440D8115D.

      Ważny

      Należy usunąć łączniki z identyfikatora klienta .

    • Uzupełnij drugą część argumentu SECRET wartością Client Secret z kroku 1. W tym przykładzie sekret klienta to Replace-With-AAD-Client-Secret. Ostatni ciąg dla argumentu SECRET to długa sekwencja liter i cyfr, bez myślników.

      USE master;  
      
      CREATE CREDENTIAL Azure_EKM_Backup_cred   
          WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany   
          SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplace-With-AAD-Client-Secret'   
      FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;    
      
  2. Utwórz login SQL Server dla Database Engine do szyfrowania kopii zapasowych

    Utwórz login SQL Server do użycia przez silnik bazy danych na potrzeby zaszyfrowanych kopii zapasowych i dodaj do niego poświadczenie z kroku 1. W tym przykładzie Transact-SQL użyto tego samego klucza, który został zaimportowany wcześniej.

    Ważny

    Nie możesz użyć tego samego asymetrycznego klucza do szyfrowania kopii zapasowej, jeśli już używałeś tego klucza do TDE (w poprzednim przykładzie) lub szyfrowania na poziomie kolumnowym (poniższy przykład).

    Ten przykład wykorzystuje asymetryczny klucz CONTOSO_KEY_BACKUP przechowywany w sejfie kluczy, który można wcześniej zaimportować lub utworzyć dla master bazy danych, jak opisano w kroku 2: Utworzenie sejfu kluczy.

    USE master;  
    
    -- Create a SQL Server login associated with the asymmetric key   
    -- for the Database engine to use when it is encrypting the backup.  
    CREATE LOGIN Backup_Login   
    FROM ASYMMETRIC KEY CONTOSO_KEY_BACKUP;  
    GO   
    
    -- Alter the Encrypted Backup Login to add the credential for use by   
    -- the Database Engine to access the key vault  
    ALTER LOGIN Backup_Login   
    ADD CREDENTIAL Azure_EKM_Backup_cred ;  
    GO  
    
  3. Zrób kopię zapasową bazy danych

    Zrób kopię zapasową bazy danych, określając szyfrowanie asymetrycznym kluczem przechowywanym w usłudze Key Vault.

    W poniższym przykładzie należy zauważyć, że jeśli baza danych była już zaszyfrowana za pomocą TDE, a klucz CONTOSO_KEY_BACKUP asymetryczny różni się od klucza asymetrycznego TDE, kopia zapasowa jest szyfrowana zarówno przez klucz asymetryczny TDE, jak i CONTOSO_KEY_BACKUP. Docelowa instancja SQL Server potrzebuje obu kluczy do odszyfrowania kopii zapasowej.

    USE master;  
    
    BACKUP DATABASE [DATABASE_TO_BACKUP]  
    TO DISK = N'[PATH TO BACKUP FILE]'   
    WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD,   
    ENCRYPTION(ALGORITHM = AES_256,   
    SERVER ASYMMETRIC KEY = [CONTOSO_KEY_BACKUP]);  
    GO  
    
  4. Przywróć bazę danych

    Aby przywrócić kopię zapasową bazy danych zaszyfrowaną przy użyciu TDE, docelowa instancja programu SQL Server musi najpierw mieć kopię asymetrycznego klucza magazynu kluczy użytego do szyfrowania. Aby dostarczyć tę kopię:

    • Jeśli oryginalny asymetryczny klucz używany do TDE nie znajduje się już w magazynie kluczy, przywróć kopię zapasową klucza z magazynu kluczy lub zaimportuj go ponownie z lokalnego modułu HSM. Aby odcisk kciuka klucza odpowiadał odciskowi kciuka zapisanemu w kopii zapasowej bazy danych, klucz musi używać tej samej nazwy klucza z magazynu kluczy, co pierwotnie.

    • Zastosuj kroki 1 i 2 na docelowej instancji SQL Server.

    • Po tym, jak docelowa instancja SQL Server uzyska dostęp do asymetrycznych kluczy używanych do szyfrowania kopii zapasowej, przywróć bazę danych na tym serwerze.

    Przykładowy kod przywracania:

    RESTORE DATABASE [DATABASE_TO_BACKUP]  
    FROM DISK = N'[PATH TO BACKUP FILE]'   
        WITH FILE = 1, NOUNLOAD, REPLACE;  
    GO  
    

    Aby uzyskać więcej informacji na temat opcji tworzenia kopii zapasowych, zobacz BACKUP (Transact-SQL).

Szyfrowanie na poziomie kolumn za pomocą asymetrycznego klucza z magazynu kluczy

Poniższy przykład tworzy klucz symetryczny chroniony kluczem asymetrycznym w magazynie kluczy. Klucz symetryczny następnie szyfruje dane w bazie danych.

Ważny

Nie możesz użyć tego samego asymetrycznego klucza do szyfrowania na poziomie kolumnowym, jeśli już używałeś tego klucza do szyfrowania kopii zapasowej.

Ten przykład wykorzystuje asymetryczny klucz CONTOSO_KEY_COLUMNS przechowywany w magazynie kluczy, który można zaimportować lub utworzyć wcześniej, jak opisano w kroku 2: Utworzenie magazynu kluczy. Aby użyć tego asymetrycznego klucza w bazie ContosoDatabase danych, uruchom ponownie polecenie CREATE ASYMMETRIC KEY, aby nadać bazie ContosoDatabase danych odniesienie do klucza.

USE [ContosoDatabase];  
GO  
  
-- Create a reference to the key in the key vault  
CREATE ASYMMETRIC KEY CONTOSO_KEY_COLUMNS   
FROM PROVIDER [AzureKeyVault_EKM_Prov]  
WITH PROVIDER_KEY_NAME = 'ContosoDevRSAKey2',  
CREATION_DISPOSITION = OPEN_EXISTING;  
  
-- Create the data encryption key.  
-- The data encryption key can be created using any SQL Server   
-- supported algorithm or key length.  
-- The DEK will be protected by the asymmetric key in the key vault  
  
CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY  
    WITH ALGORITHM=AES_256  
    ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;  
  
DECLARE @DATA VARBINARY(MAX);  
  
--Open the symmetric key for use in this session  
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY   
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;  
  
--Encrypt syntax  
SELECT @DATA = ENCRYPTBYKEY  
    (  
    KEY_GUID('DATA_ENCRYPTION_KEY'),   
    CONVERT(VARBINARY,'Plain text data to encrypt')  
    );  
  
-- Decrypt syntax  
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));  
  
--Close the symmetric key  
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;