Menggunakan Konektor 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 pada halaman Pemeliharaan & Pemecahan Masalah Konektor SQL Server di bagian "Peningkatan Konektor 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.
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.
- Jika Anda menggunakan Azure global, ganti
Ganti bagian pertama argumen dengan ID Klien aplikasi Microsoft Entra dari Langkah 1.
SECRET
Dalam contoh ini, ID Klien adalahEF5C8E094D2A4A769998D93440D8115D
.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 adalahReplaceWithAADClientSecret
.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;
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
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
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.
Dalam kotak dialog Kelola Enkripsi Database, konfirmasikan bahwa TDE aktif, dan kunci asimetris apa yang mengenkripsi DEK.
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.
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.
- Jika Anda menggunakan Azure global, ganti
Ganti bagian pertama argumen dengan ID Klien aplikasi Microsoft Entra dari Langkah 1.
SECRET
Dalam contoh ini, ID Klien adalahEF5C8E094D2A4A769998D93440D8115D
.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 adalahReplace-With-AAD-Client-Secret
. String akhir untukSECRET
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;
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
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 danCONTOSO_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
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