SQL Server Always Encrypted: Hassas Veriler için Şifreleme Rehberi
Merhaba,
KVKK ve veri güvenliği konuşulduğunda hep şu soru geliyor: "Veritabanını şifrelediniz mi?" Çoğu zaman "evet, TDE kullanıyoruz" yanıtı geliyor. Ama TDE yani Transparent Data Encryption sadece disk üzerindeki veriyi şifreler — veritabanı sunucusundan sorgu çalıştıran biri yine düz metni görür. Bu kısımlarda Always Encrypted devreye giriyor.
Always Encrypted Nedir?
SQL Server 2016 ile gelen ve sonrasında sürekli geliştirilen bu özellik, hassas sütunların şifrelemesini tamamen istemci tarafında yapıyor. Yani şifreleme ve şifre çözme işlemi uygulama katmanında gerçekleşiyor, SQL Server hiçbir zaman düz metni görmüyor.
Bunu şöyle düşünün: DBA'nız bile o sütundaki gerçek değeri göremez. Veritabanı yöneticisi tabloya SELECT yaptığında şifreli veriyi görür. Bu KVKK açısından çok kritik arkadaşlar.
Hangi Verileri Şifrelemeli?
Her şeyi şifrelemek performans kaybına neden olur. Şu tür veriler için öncelikli düşünün:
- TC kimlik numaraları
- Kredi kartı numaraları
- Sağlık verileri
- Şifreler (zaten hash'lenmiş olmalı, ama ekstra katman olarak)
- Finansal hesap bilgileri
İki Şifreleme Türü
Always Encrypted iki mod sunar:
- Deterministic Encryption: Aynı değer her zaman aynı şifreli çıktıyı üretir. Bu sayede eşitlik sorguları (
WHERE tc_no = @param) çalışır. Ama pattern analizi riski var. - Randomized Encryption: Aynı değer her seferinde farklı şifreli çıktı üretir. Çok daha güvenli ama sadece full scan mümkün, filtreleme yapılamaz.
Hangi modu seçeceğiniz iş gereksinimlerinize göre değişiyor. Sorgularda filtreleyeceğiniz bir sütun için Deterministic, sadece saklayıp göstereceğiniz veriler için Randomized tercih edin.
Uygulama Tarafında Ne Değişir?
Güzel olan şu: Uygulama kodunda çok az değişiklik gerekiyor. .NET'te ADO.NET veya Entity Framework kullanıyorsanız connection string'e Column Encryption Setting=Enabled eklemeniz yeterli. Driver gerisini hallediyor.
Server=myserver;Database=mydb;
Integrated Security=true;
Column Encryption Setting=Enabled;
Tabi Column Master Key ve Column Encryption Key yönetimini doğru yapmanız şart. Azure Key Vault ile entegrasyon burada çok işe yarıyor.
Dikkat Edilmesi Gerekenler
- Şifreli sütunlarda LIKE operatörü çalışmaz
- Şifreli sütunlar üzerinde aggregation (SUM, AVG vs) yapılamaz
- Linked server ve OPENQUERY ile çalışmaz
- Key yönetimi kritik — key kaybedilirse veri kurtarılamaz
Bu kısıtları baştan bilerek tasarım yaparsanız Always Encrypted gerçekten güçlü bir güvenlik katmanı sağlıyor.
İyi Günler Dilerim.
Bu yazıyı paylaş: