Veri erişimi güvenliği
SQL injection ve en az yetki
Güvenlik, tek bir komuttan ibaret değildir.
Kavramı anlayalım
SQL injection güvenilmeyen verinin SQL kodu haline gelmesidir. Uygulamada parametreli sorgular veya güvenli ORM bağlaması kullan; string interpolation ile WHERE üretme. Parametreler değerleri bağlar, izin ve iş kuralı doğrulamasını yerine getirmez. Sıralama ve tablo seçimi gibi tanımlayıcılar sabit izin listelerinden gelmelidir.
Uygulama hesabına sysadmin veya db_owner verme. İhtiyaç duyduğu nesne ve işlem yetkilerini role bağla. Kimlik bilgilerini kod deposunda saklama; secret yönetimi ve rotasyon uygula. Şifreleme aktarım ve depolama için farklı kontroller gerektirir; maskeleme erişim kontrolü değildir. Loglara kişisel bilgi veya secret yazma. Bu ders izinleri görüntüler; kullanıcı veya login oluşturarak gerçek sunucu güvenliğini değiştirmez.
Veri erişiminin etki alanını sınırlandırmak için.
Giriş doğrulamasının parametre bağlamaya alternatif olduğunu sanmak.
Aynı konu. Üç farklı derinlik.
SELECT ORIGINAL_LOGIN() AS LoginName, USER_NAME() AS DatabaseUser;Bağlantının kimlik bağlamını gösterir.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
SalesOrder için mevcut izinlerini listele.
Çözümü ve açıklamasını göster
SELECT permission_name FROM sys.fn_my_permissions(N'lab.SalesOrder', N'OBJECT');Yetki listesi güvenlik denetiminin başlangıcıdır; kapsamlı denetimin yerine geçmez.