Menggunakan Koneksi SQL Server dengan Fitur Enkripsi SQL

Berlaku untuk:SQL Server

Aktivitas enkripsi SQL Server umum menggunakan kunci asimetris yang dilindungi oleh Azure Key Vault mencakup tiga area berikut.

  • Enkripsi Data Transparan 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 bagian I melalui IV topik Langkah-langkah Penyiapan untuk Manajemen Kunci yang Dapat Diperluas Menggunakan Azure Key Vault, sebelum mengikuti langkah-langkah tentang topik ini.

Catatan

Versi 1.0.0.440 dan yang lebih lama telah diganti dan tidak lagi didukung di lingkungan produksi. Tingkatkan ke versi 1.0.1.0 atau yang lebih baru dengan mengunjungi Pusat Unduhan Microsoft dan menggunakan instruksi di halaman Pemeliharaan & Pemecahan Masalah SQL Server Koneksi or di bawah "Peningkatan Koneksi or SQL Server."

Catatan

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

Enkripsi Data Transparan dengan menggunakan Kunci Asimetris dari Azure Key Vault

Setelah menyelesaikan Bagian I melalui IV topik Langkah-langkah Penyiapan untuk Manajemen Kunci yang Dapat Diperluas Menggunakan Azure Key Vault, gunakan kunci Azure Key Vault untuk mengenkripsi kunci enkripsi database menggunakan TDE. Untuk informasi selengkapnya tentang memutar kunci menggunakan PowerShell, lihat Memutar pelindung Transparent Data Encryption (TDE) menggunakan PowerShell.

Penting

Jangan menghapus versi kunci sebelumnya setelah rollover. Saat kunci di-roll over, beberapa data masih dienkripsi dengan kunci sebelumnya, seperti cadangan database yang lebih lama, file log cadangan dan file log transaksi.

Anda harus membuat kredensial dan login, dan membuat kunci enkripsi database yang akan mengenkripsi data dan log dalam database. Untuk mengenkripsi database memerlukan izin CONTROL pada database. Grafik berikut menunjukkan hierarki kunci enkripsi saat menggunakan Azure Key Vault.

Diagram showing the hierarchy of the encryption key when using the Azure Key Vault.

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

    Mesin Database menggunakan kredensial aplikasi Microsoft Entra untuk mengakses Key Vault selama beban database. Sebaiknya buat ID Klien dan Rahasia lain, seperti yang dijelaskan di Langkah 1, untuk Mesin Database, untuk membatasi izin Key Vault yang diberikan.

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

    • IDENTITY Edit argumen (ContosoDevKeyVault) untuk menunjuk ke Azure Key Vault Anda.

      • Jika Anda menggunakan Azure global, ganti IDENTITY argumen dengan nama Azure Key Vault Anda dari Bagian II.
      • Jika Anda menggunakan cloud Azure privat (misalnya Azure Government, Azure yang dioperasikan oleh 21Vianet, atau Azure Jerman), ganti IDENTITY argumen dengan URI Vault yang dikembalikan di Bagian II, langkah 3. Jangan sertakan "https://" dalam URI Vault.
    • Ganti bagian pertama argumen dengan ID Klien aplikasi Microsoft Entra dari Langkah 1.SECRET Dalam contoh ini, ID Klien adalah EF5C8E094D2A4A769998D93440D8115D.

      Penting

      Anda harus menghapus tanda hubung dari ID Klien.

    • Selesaikan bagian kedua dari SECRET argumen dengan Rahasia Klien dari Bagian I. Dalam contoh ini, Rahasia Klien dari Bagian 1 adalah ReplaceWithAADClientSecret.

    • String akhir untuk argumen SECRET akan menjadi urutan huruf dan angka yang panjang, 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. Membuat Kunci Enkripsi Database (DEK)

    DEK akan mengenkripsi data dan file log Anda dalam instans database, dan pada gilirannya dienkripsi oleh kunci asimetris Azure Key Vault. DEK dapat dibuat menggunakan algoritma atau panjang kunci yang didukung SQL Server.

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

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

    Menggunakan Management Studio, verifikasi bahwa TDE telah diaktifkan dengan menyambungkan ke database Anda dengan Object Explorer. Klik kanan database Anda, arahkan ke Tugas, lalu klik Kelola Enkripsi Database.

    Screenshot showing Object Explorer with Tasks > Manage Database Encryption selected.

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

    Screenshot of the Manage Database Encryption dialog box with the Set Database Encryption On option selected and a yellow banner that says Now TDE is turned on.

    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 kunci enkripsi data yang dilindungi oleh kunci asimetris di brankas kunci.
Mesin Database menggunakan kredensial aplikasi Microsoft Entra untuk mengakses Key Vault selama beban database. Sebaiknya buat ID Klien dan Rahasia lain, seperti yang dijelaskan di Langkah 1, untuk Mesin Database, untuk membatasi izin Key Vault yang diberikan.

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

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

    • IDENTITY Edit argumen (ContosoDevKeyVault) untuk menunjuk ke Azure Key Vault Anda.

      • Jika Anda menggunakan Azure global, ganti IDENTITY argumen dengan nama Azure Key Vault Anda dari Bagian II.
      • Jika Anda menggunakan cloud Azure privat (misalnya Azure Government, Microsoft Azure yang dioperasikan oleh 21Vianet, atau Azure Jerman), ganti IDENTITY argumen dengan URI Vault yang dikembalikan di Bagian II, langkah 3. Jangan sertakan "https://" dalam URI Vault.
    • Ganti bagian pertama argumen dengan ID Klien aplikasi Microsoft Entra dari Langkah 1.SECRET Dalam contoh ini, ID Klien adalah EF5C8E094D2A4A769998D93440D8115D.

      Penting

      Anda harus menghapus tanda hubung dari ID Klien.

    • Selesaikan bagian kedua dari SECRET argumen dengan Rahasia Klien dari Bagian I. Dalam contoh ini Rahasia Klien dari Bagian I adalah Replace-With-AAD-Client-Secret. String akhir untuk SECRET argumen akan menjadi urutan huruf dan angka yang panjang, 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. Membuat login SQL Server untuk Mesin Database 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 telah menggunakan kunci tersebut untuk TDE (contoh di atas), atau enkripsi tingkat kolom (contoh berikut).

    Contoh ini menggunakan kunci asimetris CONTOSO_KEY_BACKUP yang disimpan di brankas kunci, yang dapat diimpor atau dibuat sebelumnya untuk database master, sebagai Bagian IV, Langkah 5 sebelumnya.

    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. Mencadangkan Database

    Cadangkan database yang menentukan enkripsi dengan kunci asimetris yang disimpan dalam brankas kunci.

    Dalam contoh di bawah ini, perhatikan bahwa jika database sudah dienkripsi dengan TDE, dan kunci CONTOSO_KEY_BACKUP asimetris berbeda dari kunci asimetris TDE, cadangan akan dienkripsi oleh kunci asimetris TDE dan CONTOSO_KEY_BACKUP. Instans SQL Server target akan memerlukan 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. Memulihkan Database

    Untuk memulihkan cadangan database yang dienkripsi dengan TDE, instans SQL Server target harus terlebih dahulu memiliki salinan kunci Key Vault asimetris yang digunakan untuk enkripsi. Ini adalah bagaimana hal ini akan dicapai:

    • Jika kunci asimetris asli yang digunakan untuk TDE tidak lagi berada di Key Vault, pulihkan cadangan kunci Key Vault atau impor kembali kunci dari HSM lokal. Penting: Agar thumbprint kunci cocok dengan thumbprint yang direkam pada cadangan database, kunci harus diberi nama kunci Key Vault yang sama seperti yang awalnya dinamai sebelumnya.

    • Terapkan Langkah 1 dan 2 pada instans SQL Server target.

    • Setelah instans 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 konten yang dilindungi oleh kunci asimetris di brankas kunci. Kemudian kunci konten digunakan untuk mengenkripsi data dalam database.

Penting

Anda tidak dapat menggunakan kunci asimetris yang sama untuk enkripsi tingkat kolom jika Anda telah menggunakan kunci tersebut untuk enkripsi cadangan.

Contoh ini menggunakan kunci asimetris CONTOSO_KEY_COLUMNS yang disimpan di brankas kunci, yang dapat diimpor atau dibuat sebelumnya, seperti yang dijelaskan di Langkah 3, bagian 3 Langkah Penyiapan untuk Manajemen Kunci yang Dapat Diperluas Menggunakan Azure Key Vault. Untuk menggunakan kunci asimetris ini dalam ContosoDatabase database, Anda harus menjalankan CREATE ASYMMETRIC KEY pernyataan lagi, untuk menyediakan ContosoDatabase database dengan referensi ke kunci.

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;  

Lihat Juga

Langkah-langkah Penyiapan untuk Manajemen Kunci yang Dapat Diperluas Menggunakan Azure Key Vault
Manajemen Kunci yang Dapat Diperluas Menggunakan Azure Key Vault
Opsi Konfigurasi Server yang diaktifkan penyedia EKM
Pemeliharaan & Pemecahan Masalah SQL Server Connector