Meng-enkripsi Database

Biasanya kita punya kekhawatiran jika database kita tercuri oleh orang lain kemudian dapat di restore di Server Instance yang lain.Sejak versi SQL Server 2008 sudah tersedia sebuah fitur untuk dapat melakukan enkripsi terhadap database yaitu dengan menggunakan Transparent Data Encryption (TDE). Fitur ini hanya bisa ditemukan pada SQL Server versi 2008 keatas dan hanya untuk edisi Data Center atau Enterprise. Enkripsi dilakukan pada level file mdf dan log, sehingga jika suatu waktu media penyimpanan database tersebut hilang tercuri, maka database tersebut tidak dapat di restore tanpa adanya certificate untuk membukanya.

Arsitektur dari mekanisme TDE ini adalah sb:

TDE

Enkripsi yang digunakan oleh TDE menggunakan algoritma AES dan 3DES. proses enkripsi dan dekripsinya terjadi secara background oleh SQL Server. Dalam menerapkan TDE ini pun tidak ada perubahan yang perlu dilakukan di sisi aplikasi, karena semua berlangsung di SQL Server.

Mari kita mulai bagaimana menerapkan enkripsi database, dalam demo ini saya menggunakan SQL Server 2014 Developer. pertama kita siapkan terlebih dahulu 1 buah database [TesTDE] dan 1 buah table Customers

USE master
GO
CREATE DATABASE [TesTDE]
GO

USE [TesTDE]
GO
CREATE TABLE [dbo].[Customers](
	[Id] [int] NOT NULL,
	[Name] [nvarchar](50) NULL,
	[Address] [nvarchar](150) NULL,
 CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Go

Kemudian kita buat sebuah master key yang akan digunakan untuk proses enkripsi database nya.

USE master;
GO
CREATE MASTER KEY ENCRYPTION
    BY PASSWORD = 'Suherm4nBl0g';
GO
CREATE CERTIFICATE TesTDEDbCert
  WITH SUBJECT = 'TesTDE_Db Certificate';

Selanjutnya kita siapkan sebuah Database Encryption Key. dalam proses ini juga kita menentukan jenis algorima enkripsi apa yang akan dalam mekanisme enkripsinya, disini saya mencontohkan menggunakan algoritma 3DES.

Saat kita mengeksekusi TSQL diatas, akan ada peringatan sebagai berikut :

Warning: The certificate used for encrypting the database encryption key 
has not been backed up. You should immediately back up the certificate 
and the private key associated with the certificate. 
If the certificate ever becomes unavailable or if you must restore 
or attach the database on another server, you must have backups of 
both the certificate and the private key or you will not be able 
to open the database.

Pada peringatan tampak jelas bahwa sangat direkomendasikan untuk melakukan backup terhadap Master Key. Ini untuk mengantisipasi jika kita ingin melakukan restore atau attach database ke instance server yang berbeda.

USE master;
GO
BACKUP CERTIFICATE TesTDEDbCert TO FILE = 'D:\TesTDEDbCert.cert';

kemudian langkah terakhir adalah mengaktivasi database TesTDE untuk di enkripsi

USE TesTDE;
GO
ALTER DATABASE TesTDE SET ENCRYPTION ON;

Perlu diingat, jika ini diterapkan pada database yang besar, maka akan dibutuhkan waktu yang lama untuk mengaktifkan enkripsi pada sebuah database karena seluruh data akan di enkripsi oleh SQL Server.

Untuk meyakinkan bahwa database TesTDE telah terenkripsi dapat kita lihat sebagai berikut

SELECT NAME, IS_ENCRYPTED
 FROM sys.databases;

Jika nanti database TesTDE bernilai 1 maka itu menunjukkan database tersebut terenkripsi.

Demikian, semoga bermanfaat.

Leave a Reply