Udostępnij za pośrednictwem


Używanie łącznika programu SQL Server z funkcjami szyfrowania SQL

Dotyczy:programu SQL Server

Typowe działania szyfrowania programu SQL Server korzystające z klucza asymetrycznego chronionego przez usługę Azure Key Vault obejmują następujące trzy obszary.

  • Transparent Data Encryption przy użyciu klucza asymetrycznego z usługi Azure Key Vault

  • Szyfrowanie kopii zapasowych przy użyciu klucza asymetrycznego z usługi Key Vault

  • Szyfrowanie na poziomie kolumny przy użyciu klucza asymetrycznego z usługi Key Vault

Wykonaj czynności opisane w częściach I do IV tematu Kroki instalacji rozszerzalnego zarządzania kluczami przy użyciu usługi Azure Key Vault, przed wykonaniem czynności opisanych w tym temacie.

Notatka

Wersje 1.0.0.440 i starsze zostały zastąpione i nie są już obsługiwane w środowiskach produkcyjnych. Uaktualnij do wersji 1.0.1.0 lub nowszej, odwiedzając Centrum pobierania Microsoft i korzystając z instrukcji dotyczących konserwacji łącznika programu SQL Server & stronie Rozwiązywanie problemów z w obszarze "Uaktualnianie łącznika programu SQL Server".

Notatka

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

Transparent Data Encryption przy użyciu klucza asymetrycznego z usługi Azure Key Vault

Po ukończeniu części I do IV tematu Kroki instalacji rozszerzalnego zarządzania kluczami przy użyciu usługi Azure Key Vault użyj klucza usługi Azure Key Vault, aby zaszyfrować klucz szyfrowania bazy danych przy użyciu funkcji TDE. Aby uzyskać więcej informacji na temat obracania kluczy przy użyciu PowerShell, zobacz Obracanie protektora przezroczystego szyfrowania danych (TDE) przy użyciu PowerShell.

Ważny

Nie usuwaj poprzednich wersji klucza po zmianie. Po przerzucaniu kluczy niektóre dane są nadal szyfrowane przy użyciu poprzednich kluczy, takich jak starsze kopie zapasowe bazy danych, pliki dziennika kopii zapasowej i pliki dziennika transakcji.

Należy utworzyć poświadczenia i identyfikator logowania oraz utworzyć klucz szyfrowania bazy danych, który będzie szyfrować dane i dzienniki w bazie danych. Aby zaszyfrować bazę danych, wymagane jest uprawnienie CONTROL do bazy danych. Poniższa grafika przedstawia hierarchię klucza szyfrowania podczas korzystania z usługi Azure Key Vault.

Diagram przedstawiający hierarchię klucza szyfrowania podczas korzystania z usługi Azure Key Vault.

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

    Silnik bazy danych używa poświadczeń aplikacji Microsoft Entra do uzyskiwania dostępu do Azure Key Vault podczas ładowania bazy danych. Zalecamy utworzenie innego identyfikatora klienta i tajnego kluczazgodnie z opisem w Kroku 1dla silnika bazy danych, w celu ograniczenia przyznanych uprawnień do Key Vault.

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

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

      • Jeśli używasz globalnej usługi Azure, zastąp argument IDENTITY nazwą usługi Azure Key Vault z części II.
      • Jeśli używasz prywatnej chmury platformy Azure (np. Azure Government, Azure obsługiwanej przez firmę 21Vianet lub Azure (Niemcy), zastąp argument IDENTITY identyfikatorem URI magazynu zwróconym w części II, krok 3. Nie dołączaj "https://" w adresie URL magazynu.
    • Zastąp pierwszą część argumentu SECRET aplikacją Microsoft Entra Client ID z Krok 1. W tym przykładzie identyfikator klienta jest EF5C8E094D2A4A769998D93440D8115D.

      Ważny

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

    • Ukończ drugą część argumentu SECRET z kluczem tajnym klienta z części I. W tym przykładzie klucz tajny klienta z części I jest ReplaceWithAADClientSecret.

    • Ostatnim ciągiem argumentu SECRET będzie długa sekwencja liter i cyfr bez łącznikó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. tworzenie klucza szyfrowania bazy danych (DEK)

    Klucz Szyfrowania Danych (DEK) zaszyfruje pliki danych i dziennika w wystąpieniu bazy danych, a następnie sam zostanie zaszyfrowany przez asymetryczny klucz Azure Key Vault. Klucz szyfrowania danych (DEK) można utworzyć przy użyciu dowolnego algorytmu lub długości klucza obsługiwanego przez 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  
    

    Za pomocą programu Management Studio sprawdź, czy funkcja TDE została włączona, łącząc się z bazą danych za pomocą Eksploratora obiektów. Kliknij prawym przyciskiem myszy bazę danych, wskaż polecenie Tasks, a następnie kliknij 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;  
    

    Nota

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

Szyfrowanie kopii zapasowych przy użyciu klucza asymetrycznego z usługi Key Vault

Zaszyfrowane kopie zapasowe są obsługiwane od programu SQL Server 2014 (12.x). Poniższy przykład tworzy i przywraca kopię zapasową zaszyfrowaną za pomocą klucza szyfrowania danych chronionego kluczem asymetrycznym w magazynie kluczy.
Silnik bazy danych używa poświadczeń aplikacji Microsoft Entra, aby uzyskać dostęp do usługi Key Vault podczas ładowania bazy danych. Zalecamy utworzenie innego identyfikatora klienta i tajnego klucza, zgodnie z opisem w Kroku 1, dla silnika bazy danych, aby ograniczyć przyznane uprawnienia usługi Key Vault.

  1. Utwórz poświadczenie SQL Server dla silnika bazy danych do użycia przy szyfrowaniu kopii zapasowej

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

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

      • Jeśli używasz globalnej usługi Azure, zastąp argument IDENTITY nazwą usługi Azure Key Vault z części II.
      • Jeśli używasz prywatnej chmury platformy Azure (np. Azure Government, Microsoft Azure obsługiwanej przez firmę 21Vianet lub Azure Germany), zastąp argument IDENTITY identyfikatorem URI magazynu zwróconym w części II, krok 3. Nie dołączaj "https://" w URI magazynu.
    • Zastąp pierwszą część argumentu SECRET aplikacją Microsoft Entra Client ID z Krok 1. W tym przykładzie identyfikator klienta jest EF5C8E094D2A4A769998D93440D8115D.

      Ważny

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

    • Ukończ drugą część argumentu SECRET za pomocą Klucz Tajny Klienta z części I. W tym przykładzie Klucz Tajny Klienta z części I to Replace-With-AAD-Client-Secret. Ostatni ciąg dla argumentu SECRET będzie długą sekwencją liter i cyfr bez łącznikó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. Tworzenie konta logowania SQL Server dla silnika bazy danych na potrzeby szyfrowania kopii zapasowych

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

    Ważny

    Nie można użyć tego samego klucza asymetrycznego do szyfrowania kopii zapasowych, jeśli klucz został już użyty dla funkcji TDE (powyższy przykład) lub szyfrowanie na poziomie kolumny (poniższy przykład).

    W tym przykładzie użyto klucza asymetrycznego CONTOSO_KEY_BACKUP przechowywanego w magazynie kluczy, który można zaimportować lub utworzyć wcześniej dla głównej bazy danych, tak jak opisano w części IV, kroku 5.

    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. tworzenie kopii zapasowej bazy danych

    Utwórz kopię zapasową bazy danych określającą szyfrowanie przy użyciu klucza asymetrycznego przechowywanego w magazynie kluczy.

    W poniższym przykładzie należy pamiętać, że jeśli baza danych została już zaszyfrowana za pomocą funkcji TDE, a klucz asymetryczny CONTOSO_KEY_BACKUP różni się od klucza asymetrycznego TDE, kopia zapasowa zostanie zaszyfrowana zarówno za pomocą klucza asymetrycznego TDE, jak i CONTOSO_KEY_BACKUP. Docelowa instancja SQL Server będzie potrzebować obu kluczy, aby odszyfrować kopię bezpieczeństwa.

    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. przywracanie bazy danych

    Aby przywrócić kopię zapasową bazy danych zaszyfrowaną za pomocą funkcji TDE, docelowy serwer SQL Server musi najpierw mieć kopię asymetrycznego klucza Azure Key Vault używanego do szyfrowania. W ten sposób można to osiągnąć:

    • Jeśli oryginalny klucz asymetryczny używany dla funkcji TDE nie znajduje się już w usłudze Key Vault, przywróć kopię zapasową klucza usługi Key Vault lub ponownie zaimportuj klucz z lokalnego modułu HSM. Ważne: Aby odcisk palca klucza był zgodny z odciskiem palca zapisanym w kopii zapasowej bazy danych, klucz musi mieć tę samą nazwę klucza jak pierwotnie.

    • Zastosuj kroki 1 i 2 na docelowym serwerze SQL Server.

    • Jak tylko docelowe wystąpienie programu SQL Server ma dostęp do klucza asymetrycznego używanego do szyfrowania kopii zapasowej, przywróć bazę danych na 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 kolumny przy użyciu klucza asymetrycznego z usługi Key Vault

Poniższy przykład tworzy klucz symetryczny chroniony kluczem asymetrycznym w magazynie kluczy. Następnie klucz symetryczny jest używany do szyfrowania danych w bazie danych.

Ważny

Nie można użyć tego samego klucza asymetrycznego do szyfrowania na poziomie kolumny, jeśli klucz został już użyty do szyfrowania kopii zapasowej.

W tym przykładzie użyto klucza asymetrycznego CONTOSO_KEY_COLUMNS przechowywanego w magazynie kluczy, który można zaimportować lub utworzyć wcześniej, zgodnie z opisem w kroku 3 sekcji 3 kroków konfiguracji w celu rozszerzenia zarządzania kluczami przy użyciu usługi Azure Key Vault. Aby użyć tego klucza asymetrycznego w bazie danych ContosoDatabase, należy ponownie wykonać instrukcję CREATE ASYMMETRIC KEY, aby podać bazę danych ContosoDatabase z odwołaniem 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;  

Zobacz też

kroki instalacji rozszerzalnego zarządzania kluczami przy użyciu usługi Azure Key Vault
rozszerzone zarządzanie kluczami przy użyciu usługi Azure Key Vault
opcja konfiguracji serwera z włączoną obsługą dostawcy EKM
Konserwacja konnektora SQL Server & Rozwiązywanie problemów