dataiotech Labs
← Tüm Denetim & Uyum Konuları
Veri Maskeleme

Kişisel Veri (PII) Dinamik ve Statik Maskeleme (Anonymization)

Müşteri temsilcileri, analistler ve test ortamları için kredi kartı, TC Kimlik No, e-posta ve telefon gibi hassas PII verilerini rol bazlı maskeleyin.

Doğrulanan Regülasyon ve Standartlar
KVKK Madde 12GDPR Article 32PCI-DSS Req 3.4HIPAA Safe HarborSOC 2 Privacy

Temel Güvenlik ve Uyum Hedefleri

Canlı üretim verilerini test/staging ortamlarına kopyalarken anonimleştirme
Müşteri hizmetleri ve çağrı merkezi kullanıcılarına yalnızca kısmi veri (`4543 **** **** 1234`) gösterme
Analitik ve raporlama sorgularında kimlik tespiti yapılamaz (de-identified) veri sunma
Rol bazlı erişim ile yetkisiz veritabanı kullanıcılarının düz metin PII okumasını engelleme

Mimari ve Çalışma Prensibi

Dinamik Veri Maskeleme (DDM), veritabanındaki fiziksel veriyi değiştirmeden sorgu anında maskeleyerek döner. Statik Veri Maskeleme (SDM) ise üretimden staging ortamına veri taşırken PII kolonlarını geri döndürülemez hash/faker fonksiyonlarıyla kalıcı olarak dönüştürür.

Referans Konfigürasyon Dosyası
-- PostgreSQL Anon (postgresql_anonymizer) veya SQL Server DDM Örneği
-- 1. SQL Server Dynamic Data Masking
ALTER TABLE dbo.Customers 
ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()');

ALTER TABLE dbo.Customers 
ALTER COLUMN CardNumber ADD MASKED WITH (FUNCTION = 'partial(0,"XXXX-XXXX-XXXX-",4)');

-- 2. Düşük yetkili kullanıcıya okuma izni (Maskeli görür)
GRANT SELECT ON dbo.Customers TO SupportRole;
-- UNMASK yetkisi verilmediği sürece maskelenmiş veri döner.

Adım Adım Uygulama Rehberi

Canlı veya test ortamında güvenle devreye almak için sıralı operasyon adımları.

1

PII Envanteri ve Sınıflandırması

sql

Tablolardaki kimlik, telefon, e-posta, IBAN ve sağlık verisi gibi PII alanlarını etiketleyin.

SELECT table_schema, table_name, column_name 
FROM information_schema.columns 
WHERE column_name ILIKE ANY (ARRAY['%email%', '%phone%', '%tc_kimlik%', '%card%', '%iban%']);
2

Maskeleme Fonksiyonlarını Tanımlama

sql

Kolon türüne uygun maskeleme kurallarını şemaya uygulayın.

-- PostgreSQL Anonymizer Örneği
SECURITY LABEL FOR anon ON COLUMN users.phone 
IS 'MASKED WITH FUNCTION anon.partial(phone, 2, "$$$$", 2)';

SECURITY LABEL FOR anon ON COLUMN users.email 
IS 'MASKED WITH FUNCTION anon.email()';
3

Uygulama ve Test Kullanıcılarını İzolasyon

sql

Destek ve raporlama rollerini maskeli görünüme zorlayın, yalnızca yetkili servis kullanıcılarına UNMASK hakkı tanıyın.

CREATE USER support_agent WITH PASSWORD 'SecurePass!';
GRANT SELECT ON users TO support_agent;
-- support_agent 'MASKED' veri okuyacaktır.

En İyi Saha Pratikleri

  • Staging ve dev veritabanlarına canlı yedek yüklerken mutlaka CI/CD pipeline içinde statik maskeleme çalıştırın.
  • Maskeleme kurallarını uygulama katmanı yerine veritabanı motorunda tanımlayarak doğrudan SQL istemcilerinde de koruma sağlayın.

Sık Yapılan Hatalar & Tuzaklar

  • WHERE koşullarında maskeli kolonlar üzerinden tahmin yürütme (Inference attack) açıklarına karşı filtre kısıtlamalarını ihmal etmek.
  • Yedekleme dosyalarının (`.dump`, `.bak`) şifresiz ve maskesiz olarak geliştiricilerin yerel bilgisayarlarına indirilmesi.