Používejte SQL Server Connector s funkcemi šifrování SQL

platí pro:SQL Server

Běžné šifrovací aktivity SQL Server, které používají asymetrický klíč chráněný Azure Key Vault, spadají do následujících tří oblastí:

  • Transparentní šifrování dat (TDE) pomocí asymetrického klíče z Azure Key Vault.
  • Šifrování záloh pomocí asymetrického klíče z klíčového trezoru.
  • Šifrování na úrovni sloupců pomocí asymetrického klíče z klíčového trezoru.

Dokončete kroky 1 až 4 v Nastavte transparentní šifrování dat s Azure Key Vault pro SQL Server, než budete postupovat podle kroků v tomto článku.

Poznámka

Verze 1.0.0.440 a starší byly nahrazeny a již nejsou podporovány v produkčních prostředích. Upgradujte na verzi 1.0.1.0 nebo novější. Stáhněte si aktuální verzi z Microsoft Download Center a postupujte podle pokynů v části „Upgrade of SQL Server Connector“ v Údržba a řešení problémů se službou SQL Server Connector.

Poznámka

Microsoft Entra ID se dříve označovala jako Azure Active Directory (Azure AD).

Transparentní šifrování dat pomocí asymetrického klíče z Azure Key Vault

Po dokončení kroků 1 až 4 v Nastavení transparentní šifrování dat s Azure Key Vault pro SQL Server použijte klíč Azure Key Vault k zašifrování šifrovacího klíče databáze pomocí TDE. Pro více informací o rotaci klíčů pomocí PowerShellu viz Rotate the transparentní šifrování dat (TDE) protector using PowerShell.

Důležitý

Po přechodu neodstraňujte předchozí verze klíče. Když dojde k obměně klíčů, některá data jsou stále šifrována předchozími klíči, například starší databázové zálohy, zálohované soubory protokolů a soubory transakčních protokolů.

Musíte vytvořit přihlašovací údaje a přihlášení a vytvořit šifrovací klíč databáze, který šifruje data a transakční protokol v databázi. Šifrování databáze vyžaduje CONTROL oprávnění k přístupu k databázi. Následující grafika ukazuje hierarchii šifrovacího klíče při použití Azure Key Vault.

Diagram zobrazující hierarchii šifrovacího klíče při použití Azure Key Vault.

  1. Vytvořte přihlašovací údaje SQL Serveru pro databázový stroj, který se použije pro Transparentní šifrování dat (TDE)

    Database Engine používá přihlašovací údaje aplikace Microsoft Entra k přístupu k trezoru klíčů během načítání databáze. Pro omezení oprávnění ke skladu klíčů, která udělujete, vytvořte další Client ID a Secret, jak je popsáno v kroku 1: Nastavte autentizační model pro Database Engine.

    Upravte následující skript Transact-SQL následujícími způsoby:

    • Upravte argument IDENTITY (ContosoDevKeyVault) tak, aby odkazovat na službu Azure Key Vault.

    • Nahraďte první část argumentu SECRETidentifikátorem klienta aplikace Microsoft Entra z kroku 1: Nastavte autentizační model. V tomto příkladu je ID klienta EF5C8E094D2A4A769998D93440D8115D.

      Důležitý

      Je nutné odebrat pomlčky z id klienta .

    • Dokončete druhou část argumentu SECRET s klientským tajemstvím z kroku 1. V tomto příkladu je Client SecretReplaceWithAADClientSecret.

    • Poslední řetězec argumentu SECRET je dlouhá posloupnost písmen a čísel bez pomlček.

    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. Vytvořte přihlášení k SQL Serveru pro databázový stroj pro TDE

    Vytvořte přihlášení k SQL Serveru a přidejte do něj přihlašovací údaje z kroku 1. Tento Transact-SQL příklad používá stejný klíč, který jste naimportovali dříve.

    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. Vytvořte šifrovací klíč databáze (DEK)

    DEK šifruje vaše data a logovací soubory v databázové instanci a je následně šifrován asymetrickým klíčem Azure Key Vault. DEK můžete vytvořit pomocí libovolného algoritmu nebo délky klíče, kterou SQL Server podporuje.

    USE ContosoDatabase;  
    GO  
    
    CREATE DATABASE ENCRYPTION KEY   
    WITH ALGORITHM = AES_256   
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;  
    GO  
    
  4. Zapněte TDE

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

    Pomocí Management Studio ověřte, že je TDE zapnuté, připojením k databázi pomocí Průzkumník objektů. Klikněte pravým tlačítkem na databázi, najeďte na Úlohy a poté vyberte Spravovat šifrování databáze.

    snímek obrazovky zobrazující Průzkumníka objektů s vybranou možností Úlohy > Spravovat šifrování databáze

    V dialogovém okně Spravovat šifrování databáze ověřte, že je TDE zapnuté a jaký asymetrický klíč šifruje DEK.

    Snímek obrazovky dialogového okna Spravovat šifrování databáze s vybranou možností Nastavit šifrování databáze na zapnuto a se žlutým bannerem oznamujícím, že TDE je nyní zapnuto.

    Případně můžete spustit následující Transact-SQL skript. Stav šifrování 3 označuje zašifrovanou databázi.

    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;  
    

    Poznámka

    Databáze tempdb se automaticky šifruje, kdykoli je v jakékoli databázi povoleno TDE.

Šifrování záloh pomocí asymetrického klíče z klíčového trezoru

Šifrované zálohy se podporují od SQL Serveru 2014 (12.x). Následující příklad vytváří a obnovuje zálohu zašifrovanou klíčem pro šifrování dat, kterou chrání asymetrický klíč v trezoru klíčů.

Database Engine používá přihlašovací údaje aplikace Microsoft Entra k přístupu k trezoru klíčů během načítání databáze. Pro omezení oprávnění ke skladu klíčů, která udělujete, vytvořte další Client ID a Secret, jak je popsáno v kroku 1: Nastavte autentizační model pro Database Engine.

  1. Vytvořte pověření SQL Server pro Database Engine pro použití pro šifrování záloh

    Upravte následující skript Transact-SQL následujícími způsoby:

    • Upravte argument IDENTITY (ContosoDevKeyVault) tak, aby odkazovat na službu Azure Key Vault.

    • Nahraďte první část argumentu SECRETidentifikátorem klienta aplikace Microsoft Entra z kroku 1: Nastavte autentizační model. V tomto příkladu je ID klienta EF5C8E094D2A4A769998D93440D8115D.

      Důležitý

      Je nutné odebrat pomlčky z id klienta .

    • Dokončete druhou část argumentu SECRET s klientským tajemstvím z kroku 1. V tomto příkladu je Client SecretReplace-With-AAD-Client-Secret. Poslední řetězec argumentu SECRET je dlouhá posloupnost písmen a čísel, bez spojovníků.

      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. Vytvořte přihlášení k SQL Serveru pro modul Database Engine pro šifrování záloh

    Vytvořte přihlášení k SQL Serveru, které bude používat databázový stroj pro zálohování šifrování, a přidejte do něj přihlašovací údaje z kroku 1. Tento Transact-SQL příklad používá stejný klíč, který jste naimportovali dříve.

    Důležitý

    Nemůžete použít stejný asymetrický klíč pro záložní šifrování, pokud jste ho již použili pro TDE (předchozí příklad) nebo pro šifrování na úrovni sloupců (následující příklad).

    Tento příklad používá asymetrický klíč uložený CONTOSO_KEY_BACKUP v klíčovém trezoru, který můžete pro databázi master importovat nebo vytvořit dříve, jak je popsáno v kroku 2: Vytvořit klíčový trezor.

    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. Zálohujte databázi

    Zálohujte databázi a specifikujte šifrování pomocí asymetrického klíče uloženého v trezoru klíčů.

    V následujícím příkladu si všimněte, že pokud byla databáze již zašifrována pomocí TDE a asymetrický klíč CONTOSO_KEY_BACKUP se liší od asymetrického klíče TDE, záloha je zašifrována jak asymetrickým klíčem TDE, tak CONTOSO_KEY_BACKUP. Cílová instance SQL Server potřebuje oba klíče k dešifrování zálohy.

    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. Obnovit databázi

    Pro obnovení zálohy databáze, která je zašifrovana pomocí TDE, musí cílová instance SQL Server nejprve mít kopii asymetrického klíče vaultu používaného pro šifrování. Chcete-li tuto kopii poskytnout:

    • Pokud původní asymetrický klíč použitý pro TDE již není v klíčovém trezoru, obnovte zálohu klíče z trezoru klíčů nebo jej znovu importujte z lokálního HSM. Aby otisk palce klíče odpovídal otisku zaznamenánému v databázové záloze, musí klíč používat stejný název klíče v trezoru klíčů, jaký měl původně.

    • Použijte kroky 1 a 2 na cílové instanci SQL Server.

    • Poté, co má cílová instance SQL Server přístup k asymetrickým klíčům používaným k šifrování zálohy, obnovte databázi na serveru.

    Ukázkový kód pro obnovení:

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

    Další informace o možnostech zálohování najdete v tématu BACKUP (Transact-SQL).

Šifrování na úrovni sloupců pomocí asymetrického klíče z klíčového trezoru

Následující příklad vytvoří symetrický klíč chráněný asymetrickým klíčem v trezoru klíčů. Symetrický klíč pak šifruje data v databázi.

Důležitý

Nemůžete použít stejný asymetrický klíč pro šifrování na úrovni sloupců, pokud jste ho už použili pro šifrování záloh.

Tento příklad používá CONTOSO_KEY_COLUMNS asymetrický klíč uložený v trezoru klíčů, který můžete importovat nebo vytvořit dříve, jak je popsáno v kroku 2: Vytvořit trezor klíčů. Pro použití tohoto asymetrického klíče v databázi ContosoDatabase spusťte příkaz CREATE ASYMMETRIC KEY znovu, aby databáze ContosoDatabase získala odkaz na klíč.

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;