SQL Server Transparent Data Encryption ( TDE )
Merhaba Teknolojik Blog Okurları,
Bu yazımda sizlere SQL Server üzerinde nasıl güvenlik önlemleri alabiliriz. Güvenliği yüksek veri bulunduruyorsak bu veriyi nasıl güvenlikli bir hale getirebiliriz bunu paylaşmaya çalışacağım.
Data güvenliği için sütunlara şifreli olarak bilgi girişi yapmak :
“Data Encryption”
Veritabanı üzerinde şifreli veri alanı oluşturmak için önce boş bir veritabanı oluşturup aşağıdaki komutları uyguluyoruz.
Yeni bir veritabanı oluşturuyoruz
CREATE DATABASE SECUREDATABASE;
GO
–Şifreli alanın oluşturulacağı veritabanını seçiyoruz
USE SECUREDATABASE;
GO
–Database Master Key Oluştur
CREATE MASTER KEY ENCRYPTION BY
PASSWORD=‘GüvenliŞifreniz’;
GO
–Sertifikamızı oluşturuyoruz
CREATE CERTIFICATE SecureDBCertificate
WITH SUBJECT=’Secure database Certificate’;
GO
–Sertifika ile şifrelenecek Symmetric Key Oluşturuyoruz her sutunu farklı key kullanarak şifreleyebilirsiniz. “Örneğin Şifre alanlarını ayrı ve Kredikartı gibi bilgileri farklı key ile şifreleyebilirsiniz.”
CREATE SYMMETRIC KEY Password_Key_01
WITH ALGORITHM=TRIPLE_DES
ENCRYPTION BY CERTIFICATE SecureDBCertificate;
GO
–Veritabanına şifrelenecek yeni alanı oluşturuyoruz. Ben burada SENETNO alanını SECURE_SENETNO olarak şifreleyeceğim. Bu nedenle Tabloma SECURE_SENETNO alanını ekliyorum.
ALTER TABLE TAHSILATMAIN
ADD SECURE_SENETNO VARBINARY(128);
GO
–Veriyi şifreleyip yeni oluşturduğumuz alana şifreli olarak kopyalıyoruz.
OPEN SYMMETRIC KEY Password_Key_01
DECRYPTION BY CERTIFICATE SecureDBCertificate;
UPDATE TAHSILATMAIN
SET SECURE_SENETNO = ENCRYPTBYKEY(KEY_GUID(‘Password_Key_01‘), SENETNO);
CLOSE SYMMETRIC KEY Password_Key_01;
GO
Veritabanına direkt SELECT çektiğimizde göreceğimiz şu şekilde olacaktır.
Gördüğünüz gibi SENETNO alanı SECURE_SENETNO olarak TRIPLE_DES ile şifrelendi.
Bu alandaki veriler Simmetric Key ve Veritabanı sertifikası olmadan açılamaz. Peki bu verileri görünür olarak nasıl açarız derseniz SELECT komutumuzdan önce key ve sertifikayı açarak sorgu çekmeliyiz. Aşağıdaki örneği inceleyelim.
–Şifreli veriyi şifresiz olarak görüntülemek.
OPEN SYMMETRIC KEY Password_Key_01
DECRYPTION BY CERTIFICATE SecureDBCertificate;
SELECT CONVERT (VARCHAR,
DECRYPTBYKEY(SECURE_SENETNO)) AS [Decrypted Senet No],SENETNO AS [Non Encryption]
FROM TAHSILATMAIN
CLOSE SYMMETRIC KEY Password_Key_01;
GO
Veri alanlarını şifreledik şimdi de sıra veritabanımızı kopyalamaya veya Backup yöntemi ile çalınmasını önlemeye.
Transparent Data Encryption ( TDE )
Veritabanı dosyalarının kopyalanarak başka bir sunucuya kopyalanmasını veya yedeği alınarak farklı bir ortama açılmasını önlemek için transparent data encryption özelliğini kullanmaya çalışacağız bu yöntem MDF ve LDF dosyalarınızın farklı bir sunucuya Attach yöntemi ile eklenmesini önleyecektir. Yine aynı şekilde backup ile alınmış bir yedek dosyasının kendi sunucunuz haricinde başka bir sunucuda açılması kesin olarak engelleyecektir.
Master Key system veritabanı üzerinde oluşturuluyor.
USE master;
GO
— Master Key Oluşturalım
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘GüçlübirMasterKeyŞifresi’;
GO
–Database Certificate Oluşturuyoruz
CREATE CERTIFICATE DatabaseCertificate WITH SUBJECT = ‘ENCRYPT Database Cerificate’;
GO
— Backup Sertifika ” Bularıdaki komutu girdiğinizde uyarı alacaksınzı sertifikayı yedekleyin diye eğer sertifikanızı yedeklemezseniz Sunucunuzu yeniden kurduğunuzda veya sunucu değiştirdiğinizde bu veritabanını hiçbir yöntemle farklı bir makinaya restore edemezsiniz. Şifreleme işlemi yaparyapmaz muhakkak seritifika yedeklerinizi alınız.
BACKUP CERTIFICATE DatabaseCertificate TO FILE = ‘C:\Backup\Database Certificate Backup’
WITH PRIVATE KEY ( FILE = ‘C:\Backup\Private Key Certificate’,
ENCRYPTION BY PASSWORD = ‘SertifikaŞifreniz’);
Yedeğimizi aldıktan sonra şifreleyeceğimiz veritabanını seçiyoruz.
USE SECUREDATABASE;
— Veritabanımızı belirlediğimiz bir yöntemle şifreliyoruz Ben burada AES_256 ile şifreledim.
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE DatabaseCertificate;
GO
— Veritabanı Şifreleme İşlemini Açıyoruz.
ALTER DATABASE SECUREDATABASE
SET ENCRYPTION ON;
GO
Bu işlemden sonra veritabanınız şifrelenmiştir.
SQL Transparent Data Encyrption isimli yazarın SQL Server TDE başlıklı eseri bu Creative Commons Alıntı 4.0 Uluslararası Lisansı ile lisanslanmıştır.
Teknolojik-Blog.Com
Aziz Ozdemiroglu