Mengenkripsi Kolom Data
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance Azure Synapse Analytics
Artikel ini menjelaskan cara mengenkripsi kolom data dengan menggunakan enkripsi konten di SQL Server menggunakan Transact-SQL. Ini terkadang dikenal sebagai enkripsi tingkat kolom, atau enkripsi tingkat sel.
Sampel kode Transact-SQL dalam artikel ini menggunakan AdventureWorks2022
database sampel atau AdventureWorksDW2022
, yang dapat Anda unduh dari halaman beranda Sampel Microsoft SQL Server dan Proyek Komunitas.
Keamanan
Izin
Izin berikut diperlukan untuk melakukan langkah-langkah di bawah ini:
- Izin
CONTROL
pada database. - Izin
CREATE CERTIFICATE
pada database. Hanya login Windows, login SQL Server, dan peran aplikasi yang dapat memiliki sertifikat. Grup dan peran tidak dapat memiliki sertifikat. - Izin
ALTER
pada tabel. - Beberapa izin pada kunci dan tidak boleh ditolak izinnya
VIEW DEFINITION
.
Membuat kunci master database
Untuk menggunakan contoh berikut, Anda harus memiliki kunci master database. Jika database Anda belum memiliki kunci master database, buatlah. Untuk membuatnya, sambungkan ke database Anda dan jalankan skrip berikut. Pastikan untuk menggunakan kata sandi yang kompleks.
Salin dan tempel contoh berikut ke dalam jendela kueri yang tersambung ke AdventureWorks
database sampel. Pilih Jalankan.
CREATE MASTER KEY ENCRYPTION BY
PASSWORD = '<complex password>';
Selalu cadangkan kunci master database Anda. Untuk informasi selengkapnya tentang kunci master database, lihat MEMBUAT MASTER KEY (Transact-SQL).
Contoh: Mengenkripsi dengan enkripsi dan pengautentikasi simetris
Di Object Explorer, sambungkan ke instans Mesin Database.
Pada bilah Standar, pilih Kueri Baru.
Salin dan tempel contoh berikut ke dalam jendela kueri yang tersambung ke
AdventureWorks
database sampel. Pilih Jalankan.CREATE CERTIFICATE Sales09 WITH SUBJECT = 'Customer Credit Card Numbers'; GO CREATE SYMMETRIC KEY CreditCards_Key11 WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE Sales09; GO -- Create a column in which to store the encrypted data. ALTER TABLE Sales.CreditCard ADD CardNumber_Encrypted varbinary(160); GO -- Open the symmetric key with which to encrypt the data. OPEN SYMMETRIC KEY CreditCards_Key11 DECRYPTION BY CERTIFICATE Sales09; -- Encrypt the value in column CardNumber using the -- symmetric key CreditCards_Key11. -- Save the result in column CardNumber_Encrypted. UPDATE Sales.CreditCard SET CardNumber_Encrypted = EncryptByKey(Key_GUID('CreditCards_Key11') , CardNumber, 1, HASHBYTES('SHA2_256', CONVERT( varbinary , CreditCardID))); GO -- Verify the encryption. -- First, open the symmetric key with which to decrypt the data. OPEN SYMMETRIC KEY CreditCards_Key11 DECRYPTION BY CERTIFICATE Sales09; GO -- Now list the original card number, the encrypted card number, -- and the decrypted ciphertext. If the decryption worked, -- the original number will match the decrypted number. SELECT CardNumber, CardNumber_Encrypted AS 'Encrypted card number', CONVERT(nvarchar, DecryptByKey(CardNumber_Encrypted, 1 , HASHBYTES('SHA2_256', CONVERT(varbinary, CreditCardID)))) AS 'Decrypted card number' FROM Sales.CreditCard; GO
Mengenkripsi dengan enkripsi simetris sederhana
Di Object Explorer, sambungkan ke instans Mesin Database.
Pada bilah Standar, pilih Kueri Baru.
Salin dan tempel contoh berikut ke dalam jendela kueri yang tersambung ke
AdventureWorks
database sampel. Pilih Jalankan.CREATE CERTIFICATE HumanResources037 WITH SUBJECT = 'Employee Social Security Numbers'; GO CREATE SYMMETRIC KEY SSN_Key_01 WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE HumanResources037; GO USE [AdventureWorks2022]; GO -- Create a column in which to store the encrypted data. ALTER TABLE HumanResources.Employee ADD EncryptedNationalIDNumber varbinary(128); GO -- Open the symmetric key with which to encrypt the data. OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037; -- Encrypt the value in column NationalIDNumber with symmetric -- key SSN_Key_01. Save the result in column EncryptedNationalIDNumber. UPDATE HumanResources.Employee SET EncryptedNationalIDNumber = EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber); GO -- Verify the encryption. -- First, open the symmetric key with which to decrypt the data. OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037; GO -- Now list the original ID, the encrypted ID, and the -- decrypted ciphertext. If the decryption worked, the original -- and the decrypted ID will match. SELECT NationalIDNumber, EncryptedNationalIDNumber AS 'Encrypted ID Number', CONVERT(nvarchar, DecryptByKey(EncryptedNationalIDNumber)) AS 'Decrypted ID Number' FROM HumanResources.Employee; GO