SQL Server güvenlik sıkılaştırma (Linux ve Windows: denetim, ağ, TLS, kimlik, yetki, audit, TDE)
SQL ServerSeviye: OrtaSüre: 5 dk (denetim) – 3 saat (tam sıkılaştırma)Kurulum rehberi değildir: çalışan bir SQL Server 2019 / 2022 / 2025 instance'ının (Linux ya da Windows) açıklarını bulur ve kapatır. Önce salt-okur Durum denetimi açıkları önem sırasıyla listeler ve her bulgunun hangi karta götürdüğünü söyler; sonra alanları tek tek ya da hepsini sırayla kapatırsınız: dinleme adresi ve firewall, Force Encryption + sertifika ve istemcide doğrulama, sa'nın kapatılması ve parola politikası (CHECK_POLICY), roller ve DDL'siz uygulama kullanıcısı, saldırı yüzeyi (xp_cmdshell, TRUSTWORTHY, guest), Server Audit, TDE (sertifika yedeği zorunlu), şifreli yedek, servis hesabı ve dosya izinleri, CU takibi. TDE ve yedek şifrelemesi Standard ve Enterprise'da vardır (Express'te yok). Sonda denetim tekrar çalışır.
Yapı: Tek SQL Server instance (Linux ya da Windows) + uygulama sunucusu; Always On AG notlarda
Senaryolar
- Durum denetimi: açıklarım neler? (salt-okur) — İlk çalıştırılacak tarama: sa, parola politikası, boş parolalar, sysadmin üyeleri, public/guest yetkileri, xp_cmdshell, şifresiz bağlantılar, audit, TDE ve sertifika yedekleri, portlar ve firewall; hiçbir şeyi değiştirmez.
- Tam sıkılaştırma (hepsi sırayla) — Yeni kurulmuş ya da hiç sıkılaştırılmamış instance: tüm alanlar güvenli sırayla uygulanır; SQL Server bir-iki kez yeniden başlatılır (bakım penceresi gerekir).
- Ağ ve bağlantı: kim nereden bağlanabilir? (dinleme, firewall, Browser) — SQL Server tüm arayüzlerde dinliyor, 1433 herkese açık, SQL Browser gereksiz yere çalışıyor. Dinleme adresi değişirse yeniden başlatma gerekir.
- Bağlantıyı şifrele (Force Encryption, sertifika, istemci doğrulaması) — Bağlantılar şifresiz ya da kendinden imzalı geçici sertifikayla; istemciler TrustServerCertificate=true kullanıyor. Sertifika değişikliği yeniden başlatma ister.
- Kimlik doğrulama ve parola (sa, CHECK_POLICY, Windows kimliği) — sa açık, SQL login'lerde parola politikası yok, boş/zayıf parolalar; kişisel DBA hesabı ve sa'nın kapatılması. Kesinti yok (yalnız Windows kimlik doğrulamasına geçiş yeniden başlatma ister).
- En az yetki ve saldırı yüzeyi (roller, public, guest, xp_cmdshell) — Uygulama kullanıcısı db_owner ya da sysadmin, public/guest'e fazladan yetki, xp_cmdshell/TRUSTWORTHY açık; rol tasarımı ve yetki raporu. Kesinti yok.
- Audit: kim ne yaptı? (Server Audit, Database Audit Specification) — Denetçi giriş, yetki ve şema değişikliklerinin kaydını istiyor; Server Audit dosyaya (ya da Windows olay günlüğüne), merkezi sisteme aktarım ve saklama. Kesinti yok. Tüm sürümlerde lisanssız (2016 SP1+).
- Veriyi diskte şifrele (TDE) — Disk, veri dosyası ya da yedeğin başka sunucuda açılmasına karşı TDE: DMK, sertifika, DEK. Çevrimiçi yapılır; sertifika yedeği ZORUNLU (kaybolursa veritabanı ve yedekleri açılamaz). Lisans: SQL Server 2019+ Standard ve Enterprise'da var, Express'te yok.
- Yedeklerin güvenliği (şifreli yedek, sertifika, izinler) — Yedekler şifresiz, yedek dizini herkese açık, parola betikte düz metin; BACKUP … WITH ENCRYPTION, sertifika yedeği ve dizin izinleri. Kesinti yok. Yedek şifrelemesi Standard ve Enterprise'da var, Express'te yok.
- İşletim sistemi tarafı (servis hesabı, dosya izinleri, SELinux) — Servis LocalSystem ya da yönetici hesabıyla çalışıyor, veri/yedek dizinleri herkese açık, SELinux kapalı; servis hesabı değişikliği yeniden başlatma ister.
- Yama ve sürüm: desteklenen sürümde ve son CU'da mıyım? — Sürüm, CU seviyesi ve destek bitişi (2016 Temmuz 2026'da bitti); uygulama için CU patch rehberine bağlanır. Salt-okur.
Başlamadan önce
- SQL Server çalışıyor; mssql-tools18 kurulu ve … sysadmin. sqlcmd /opt/mssql-tools18/bin/ altındadır (PATH'te değil; rehber tam yol kullanır). Betiği çalıştırmadan önce parolayı ekrana yazmadan değişkene alın: read -rsp 'Parola: ' SQLCMDPASSWORD; export SQLCMDPASSWORD ve sudo --preserve-env=SQLCMDPASSWORD bash <betik>.sh. Kurulum: SQL Server Linux kurulumu.
- Yönetici PowerShell oturumu; oturum açan Windows hesabı SQL Server'da sysadmin (sqlcmd -E). Kurulum: SQL Server Windows kurulumu.
- İki ayrı oturum açık: birinde adımlar uygulanır, diğerinde sysadmin bağlantısı (sqlcmd) açık kalır. sa kapatma, firewall, Force Encryption ve servis değişikliklerinden sonra yeni bağlantıyı ayrı oturumda deneyin; eski oturumu kapatmayın. Son çare: yerel DAC bağlantısı (sqlcmd -A) her zaman sunucunun kendisinden çalışır; tamamen kilitlenirseniz tek kullanıcı modu (…systemctl stop mssql-server; sudo -u mssql /opt/mssql/bin/sqlservr -m…net start … /m…) ile yerel yönetici sysadmin olarak girer.
- Bakım penceresi: seçtiğiniz alanlarda SQL Server yeniden başlatılacak (dinleme adresi, sertifika/Force Encryption, servis hesabı, kimlik doğrulama modu).… AG'de önce secondary replica'larda uygulayın, sonra failover ile primary'yi değiştirip eski primary'de.…
- Bağlanan uygulamaların listesi (sunucu, login, sürücü). Denetim adımı şu an bağlı olanları gösterir.
- Güncel tam yedek ve master/msdb yedeği var (yedekleme rehberi). TDE ve yedek şifrelemesinde sertifika yedeği olmadan veri geri gelmez.
Rehberin aşamaları
- Durum denetimi (salt-okur) — Veritabanı içi bulguları listele · İşletim sistemi tarafını denetle · İşletim sistemi tarafını denetle
- Başlamadan: geri dönüş noktası — Login'lerin, ayarların ve yapılandırmanın kopyasını al · Login'lerin, ayarların ve kayıt defterinin kopyasını al
- Kimlik — 1. Teşhis — Login'leri, politikayı ve kimlik doğrulama modunu göster
- Kimlik — 3. Uygulama — Uygulama ve rapor login'lerini politikalı oluştur · Uygulama ve rapor login'lerini politikalı oluştur · Boş ya da kullanıcı adıyla aynı parolaları değiştir · Boş ya da kullanıcı adıyla aynı parolaları değiştir · Kişisel DBA erişimini hazırla · DBA AD grubunun sysadmin olduğunu doğrula …
- Kimlik — 4. Doğrulama — Kimlik durumunu doğrula · Uygulama sunucusundan sa ile girişi dene · Uygulama sunucusundan sa ile girişi dene
- Yetki — 1. Teşhis — Sunucu ve veritabanı yetkilerini göster
- Yetki — 3. Uygulama — Saldırı yüzeyini daralt (sp_configure) · TRUSTWORTHY ve guest erişimini kapat · Rolleri, şemayı ve kullanıcıları kur · Uygulama kullanıcısını db_owner'dan çıkar · Yetki raporu
- Yetki — 4. Doğrulama — Uygulama kullanıcısının DDL yapamadığını doğrula
- TLS — 1. Teşhis — Bağlantıların şifreleme durumunu göster
- TLS — 3. Uygulama — Test CA'sı ve sunucu sertifikası oluştur · Anahtar ve imza isteğini (CSR) oluştur · Sertifikayı ve anahtarı doğrula · Sertifikayı ve Force Encryption'ı tanımla (mssql-conf) · SQL Server'ı yeniden başlat · Sertifikayı oluştur ya da içe aktar …
- TLS — 4. Doğrulama — Tüm TCP bağlantılarının şifreli olduğunu doğrula
- TLS — 5. Sonrası: sertifika yenileme — Sertifikayı yenileme yordamı
- Ağ — 1. Teşhis: kim nereden bağlanıyor? — Dinlenen adresleri ve istemci kaynaklarını göster
- Ağ — 3. Uygulama — Dinleme adresini daralt (mssql-conf) · Dinleme adresini daralt (TCP/IP IPn) · Firewall'da portu yalnız izinli ağlara aç · Firewall'da portu yalnız izinli ağlara aç · SQL Browser'ı kapat (varsayılan instance) · Dinleme adresi için SQL Server'ı yeniden başlat …
- Ağ — 4. Doğrulama — Uygulama sunucusundan bağlantıyı dene (yeni oturum) · Uygulama sunucusundan bağlantıyı dene (yeni oturum)
- Audit — 1. Teşhis — Mevcut audit'leri ve giriş denetimini göster
- Audit — 2. Güvenlik ağı — Audit dizinini hazırla · Audit dizinini hazırla
- Audit — 3. Uygulama — Server Audit ve sunucu düzeyi olayları tanımla · Uygulama şemasında veri erişimini kaydet · Audit kayıtlarını dışa aktaran betik · Dışa aktarma için parola dosyası, cron ve rsyslog
- Audit — 4. Doğrulama — Bir değişiklik yapıp audit kaydında gör
- Yedek — 1. Teşhis — Yedeklerin şifreleme durumunu ve sertifikaları göster · Yedek dizini izinleri · Yedek dizini izinleri
- Yedek — 3. Uygulama — Yedek sertifikasını oluştur ve hemen yedekle · Yedek sertifikasını oluştur ve hemen yedekle · Şifreli yedek al ve doğrula · Yedek dizini izinlerini düzelt · Yedek dizini izinlerini düzelt
- İşletim sistemi — 1. Teşhis — Servis hesabı, izinler ve SELinux · Servis hesapları ve dizin izinleri
- İşletim sistemi — 3. Uygulama — mssql hesabını kilitle ve dizin izinlerini düzelt · SELinux'u Enforcing tut ve SQL Server'ı kısıtla · Servis hesabını sanal hesap ya da gMSA yap · Veri dizini izinlerini düzelt
- TDE — 1. Teşhis — Şifreleme durumunu ve sertifikaları göster
- TDE — 2. Güvenlik ağı — TDE öncesi tam yedek
- TDE — 3. Uygulama — DMK ve TDE sertifikasını oluştur, hemen yedekle · DMK ve TDE sertifikasını oluştur, hemen yedekle · AG: TDE sertifikasını diğer replica'lara yükle · Veritabanı şifreleme anahtarını oluştur ve TDE'yi aç · Şifreleme bitene kadar izle
- TDE — 4. Doğrulama — Şifreli veritabanını ve sertifika yedeğini doğrula
- Yama ve sürüm — 1. Teşhis — Sürüm ve CU seviyesini göster · İşletim sistemi tarafında bekleyen güncellemeler
- Yama ve sürüm — 5. Sonrası — Yama takvimini kayda geçir
- Son durum denetimi: açıklar kapandı mı? — Durum denetimini tekrar çalıştır · İşletim sistemi tarafını tekrar denetle · İşletim sistemi tarafını tekrar denetle