Gunakan SQL Server Connector dengan fitur enkripsi SQL

Berlaku untuk:SQL Server

Aktivitas enkripsi SQL Server yang umum yang menggunakan kunci asimetris yang dilindungi oleh Azure Key Vault termasuk dalam tiga area berikut:

  • Enkripsi data transparan (TDE) dengan menggunakan kunci asimetris dari Azure Key Vault.
  • Mengenkripsi cadangan dengan menggunakan kunci asimetris dari Key Vault.
  • Enkripsi tingkat kolom dengan menggunakan kunci asimetris dari Key Vault.

Selesaikan langkah 1 sampai 4 dari Set up Transparent Data Encryption with Azure Key Vault for SQL Server sebelum mengikuti langkah-langkah dalam artikel ini.

Catatan

Versi 1.0.0.440 dan sebelumnya digantikan dan tidak lagi didukung di lingkungan produksi. Tingkatkan ke versi 1.0.1.0 atau lebih baru. Unduh versi saat ini dari Pusat Unduh Microsoft, dan ikuti instruksi di bagian "Upgrade of SQL Server Connector" pada pemeliharaan dan pemecahan masalah SQL Server Connector.

Catatan

ID Microsoft Entra sebelumnya dikenal sebagai Azure Active Directory (Azure AD).

Enkripsi data transparan dengan menggunakan kunci asimetris dari Azure Key Vault

Setelah Anda menyelesaikan langkah 1 sampai 4 dari Set up Transparent Data Encryption with Azure Key Vault for SQL Server, gunakan kunci Azure Key Vault untuk mengenkripsi kunci enkripsi database dengan TDE. Untuk informasi lebih lanjut tentang merotasi kunci menggunakan PowerShell, lihat Merotasi pelindung Transparent Data Encryption (TDE) menggunakan PowerShell.

Penting

Jangan menghapus versi kunci sebelumnya setelah rollover. Saat kunci dirotasi, beberapa data masih terenkripsi dengan kunci sebelumnya, seperti cadangan database lama, file log yang dicadangkan, dan file log transaksi.

Anda perlu membuat kredensial dan login, serta membuat kunci enkripsi database yang mengenkripsi data dan log di database. Mengenkripsi database memerlukan izin CONTROL pada database tersebut. Grafik berikut menunjukkan hierarki kunci enkripsi saat Anda menggunakan Azure Key Vault.

Diagram yang menunjukkan hierarki kunci enkripsi saat menggunakan Azure Key Vault.

  1. Membuat kredensial SQL Server untuk Mesin Database yang akan digunakan untuk TDE

    Database Engine menggunakan kredensial aplikasi Microsoft Entra untuk mengakses key vault selama pemuatan database. Untuk membatasi izin key vault yang Anda berikan, buat Client ID dan Secret yang lain, seperti yang dijelaskan pada Langkah 1: Atur model autentikasi, untuk Database Engine.

    Ubah skrip Transact-SQL di bawah ini dengan cara berikut:

    • Sunting argumen IDENTITY (ContosoDevKeyVault) untuk mengarahkan ke Azure Key Vault Anda.

      • Jika Anda menggunakan global Azure, ganti IDENTITY argumen dengan nama Azure Key Vault Anda dari Langkah 2: Buat kunci brankas.
      • Jika Anda menggunakan cloud Azure privat, misalnya Azure Government, Azure yang dioperasikan oleh 21Vianet, atau Azure Jerman, ganti argumen tersebut IDENTITY dengan URI Vault yang dikembalikan di Create a key vault and key menggunakan PowerShell. Jangan sertakan https:// dalam URI brankas kunci.
    • Ganti bagian pertama argumen SECRET dengan Client ID aplikasi Microsoft Entra dari Langkah 1: Siapkan model autentikasi. Dalam contoh ini, ID Klien adalah EF5C8E094D2A4A769998D93440D8115D.

      Penting

      Anda harus menghapus tanda hubung dari Klien ID.

    • Selesaikan bagian kedua argumen SECRET dengan Client Secret dari langkah 1. Dalam contoh ini, Client Secret adalah ReplaceWithAADClientSecret.

    • String hasil akhir untuk argumen SECRET adalah urutan panjang huruf dan angka, tanpa tanda hubung.

    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. Membuat login SQL Server untuk Mesin Database untuk TDE

    Buat login SQL Server dan tambahkan kredensial dari Langkah 1 ke dalamnya. Contoh Transact-SQL ini menggunakan kunci yang sama yang diimpor sebelumnya.

    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. Buat kunci enkripsi basis data (DEK)

    DEK mengenkripsi data dan file log Anda di instance database, dan pada gilirannya dienkripsi oleh kunci asimetris Azure Key Vault. Anda dapat membuat DEK menggunakan algoritma atau panjang kunci apa pun yang didukung SQL Server.

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

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

    Menggunakan Management Studio, pastikan TDE aktif dengan menghubungkan ke database Anda menggunakan Object Explorer. Klik kanan database Anda, arahkan ke Tasks, lalu pilih Kelola Enkripsi Database.

    Cuplikan layar memperlihatkan Object Explorer dengan Tugas > Kelola Enkripsi Database dipilih.

    Dalam kotak dialog Kelola Enkripsi Database, konfirmasikan bahwa TDE aktif, dan kunci asimetris apa yang mengenkripsi DEK.

    Cuplikan layar kotak dialog Kelola Enkripsi Database dengan opsi Atur Enkripsi Database Aktif dipilih dan banner kuning yang mengatakan Sekarang TDE diaktifkan.

    Atau, Anda dapat menjalankan skrip Transact-SQL berikut. Status enkripsi 3 menunjukkan database terenkripsi.

    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;  
    

    Catatan

    Database tempdb dienkripsi secara otomatis setiap kali database apa pun mengaktifkan TDE.

Mengenkripsi cadangan dengan menggunakan kunci asimetris dari Key Vault

Pencadangan terenkripsi didukung dimulai dengan SQL Server 2014 (12.x). Contoh berikut membuat dan memulihkan cadangan yang dienkripsi dengan kunci enkripsi data yang dilindungi oleh kunci asimetris di brankas kunci.

Database Engine menggunakan kredensial aplikasi Microsoft Entra untuk mengakses key vault selama pemuatan database. Untuk membatasi izin key vault yang Anda berikan, buat Client ID dan Secret baru, seperti yang dijelaskan pada Langkah 1: Atur model autentikasi, untuk Database Engine.

  1. Buat kredensial SQL Server untuk Database Engine yang digunakan Database Engine untuk enkripsi cadangan

    Ubah skrip Transact-SQL di bawah ini dengan cara berikut:

    • Sunting argumen IDENTITY (ContosoDevKeyVault) untuk mengarahkan ke Azure Key Vault Anda.

      • Jika Anda menggunakan global Azure, ganti IDENTITY argumen dengan nama Azure Key Vault Anda dari Langkah 2: Buat kunci brankas.
      • Jika Anda menggunakan cloud Azure privat, misalnya Azure Government, Microsoft Azure yang dioperasikan oleh 21Vianet, atau Azure Jerman, ganti argumen IDENTITY dengan URI Vault yang dikembalikan di Create a key vault and key menggunakan PowerShell. Jangan sertakan https:// dalam URI brankas kunci.
    • Ganti bagian pertama argumen SECRET dengan Client ID aplikasi Microsoft Entra dari Langkah 1: Siapkan model autentikasi. Dalam contoh ini, ID Klien adalah EF5C8E094D2A4A769998D93440D8115D.

      Penting

      Anda harus menghapus tanda hubung dari Klien ID.

    • Selesaikan bagian kedua argumen SECRET dengan Client Secret dari langkah 1. Dalam contoh ini, Client Secret adalah Replace-With-AAD-Client-Secret. String final untuk argumen SECRET ini adalah urutan panjang huruf dan angka, tanpa tanda hubung.

      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. Buat login SQL Server untuk Database Engine untuk enkripsi cadangan

    Buat login SQL Server untuk digunakan oleh Mesin Database untuk pencadangan enkripsi, dan tambahkan kredensial dari Langkah 1 ke dalamnya. Contoh Transact-SQL ini menggunakan kunci yang sama yang diimpor sebelumnya.

    Penting

    Anda tidak dapat menggunakan kunci asimetris yang sama untuk enkripsi cadangan jika Anda sudah menggunakan kunci tersebut untuk TDE (contoh sebelumnya), atau enkripsi tingkat kolom (contoh berikut).

    Contoh ini menggunakan CONTOSO_KEY_BACKUP kunci asimetris yang disimpan di brankas kunci, yang dapat Anda impor atau buat lebih awal untuk master basis data, seperti yang dijelaskan pada Langkah 2: Membuat brankas kunci.

    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. Cadangkan database

    Cadangkan database, tentukan enkripsi dengan kunci asimetris yang disimpan di key vault.

    Dalam contoh berikut, perhatikan bahwa jika basis data sudah dienkripsi dengan TDE, dan kunci asimetris CONTOSO_KEY_BACKUP berbeda dari kunci asimetris TDE, cadangan tersebut dienkripsi oleh kedua kunci asimetris TDE dan CONTOSO_KEY_BACKUP. Instance SQL Server target membutuhkan kedua kunci untuk mendekripsi cadangan.

    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. Pulihkan database

    Untuk memulihkan cadangan database yang dienkripsi dengan TDE, instance SQL Server target harus terlebih dahulu memiliki salinan kunci vault kunci asimetris yang digunakan untuk enkripsi. Untuk memberikan salinan tersebut:

    • Jika kunci asimetris asli yang digunakan untuk TDE sudah tidak ada lagi di brankas kunci, pulihkan cadangan kunci brankas kunci atau impor ulang kunci dari HSM lokal. Agar sidik jari kunci sesuai dengan sidik jari yang direkam di cadangan database, kunci harus menggunakan nama kunci Key Vault yang sama seperti aslinya.

    • Terapkan langkah 1 dan 2 pada instance SQL Server target.

    • Setelah instance SQL Server target memiliki akses ke kunci asimetris yang digunakan untuk mengenkripsi cadangan, pulihkan database di server.

    Contoh kode pemulihan:

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

    Untuk informasi selengkapnya tentang opsi pencadangan, lihat BACKUP (Transact-SQL).

Enkripsi tingkat kolom dengan menggunakan kunci asimetris dari Key Vault

Contoh berikut membuat kunci simetris yang dilindungi oleh kunci asimetris di brankas kunci. Kunci simetris kemudian mengenkripsi data dalam basis data.

Penting

Anda tidak bisa menggunakan kunci asimetris yang sama untuk enkripsi tingkat kolom jika Anda sudah menggunakan kunci tersebut untuk enkripsi cadangan.

Contoh ini menggunakan CONTOSO_KEY_COLUMNS kunci asimetris yang disimpan di brankas kunci, yang dapat Anda impor atau buat sebelumnya, seperti yang dijelaskan pada Langkah 2: Membuat brankas kunci. Untuk menggunakan kunci asimetris ini dalam database ContosoDatabase, jalankan pernyataan CREATE ASYMMETRIC KEY tersebut lagi untuk memberikan database ContosoDatabase referensi ke kunci tersebut.

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;