Sahadan Notlar

IIS Application Pool Identity ve SQL Server erişim hatası

Durum: IIS anonim kimliği ve SQL erişim yetkisi düzeltilerek bağlantı sağlandı. Gizlilik: Müşteri, cihaz ve adresler anonimleştirilmiştir; komutlar örnek ortam için uyarlanmalıdır.

Classic ASP uygulaması Windows Authentication ile SQL Server’a bağlanırken kimin kimliğiyle bağlandığını bilmek gerekir. `NT AUTHORITY\IUSR` hatası genellikle beklenen havuz kimliğinin kullanılmadığını gösterir.

Hata ve ilk teşhis

Uygulamanın SQL Server erişiminde `Login failed for user ‘NT AUTHORITY\IUSR’` hatası görüldü. Bağlantı dizesi `Trusted_Connection=Yes` kullandığı için IIS’ten gelen Windows kimliği SQL Server açısından belirleyiciydi.

Dosya izinleri, IIS havuzunun hesabı ve veritabanındaki giriş farklı katmanlardır. Sadece SQL’e bir kullanıcı açarak uygulamanın yanlış kimlikle çalışması düzelmeyebilir.

Kimlik zincirini incelemek

  • IIS > Sites > ilgili site > Authentication > Anonymous Authentication bölümündeki kimliği kontrol et.
  • Uygulamanın bağlı olduğu Application Pool adını ve Identity değerini kaydet.
  • SQL Server’ın aynı makinede mi, başka makinede mi çalıştığını belirle; sanal havuz kimliği yalnızca yerel Windows hesabı bağlamında kullanılabilir.
  • En az ayrıcalık ilkesiyle yalnızca gerekli veritabanına hak ver; `sysadmin` veya Windows yöneticiliği verme.

Yerel SQL Server için örnek

IIS tarafında Anonymous Authentication Identity seçeneği Application pool identity olarak ayarlandığında işlem doğru havuz hesabıyla çalışabilir. SQL uzaktaysa domain service account/gMSA veya uygun başka güvenli kimlik modeli gerekir. Tek sunuculu örnek komutu uzaktaki SQL’e aynen uygulamak doğru değildir.

-- Aynı Windows sunucusundaki SQL Server için örnektir.
USE master;
CREATE LOGIN [IIS APPPOOL\SitePool] FROM WINDOWS;
GO
USE [DemoDB];
CREATE USER [IIS APPPOOL\SitePool] FOR LOGIN [IIS APPPOOL\SitePool];
ALTER ROLE db_datareader ADD MEMBER [IIS APPPOOL\SitePool];
-- Yalnızca gerçekten yazma gerekiyorsa:
ALTER ROLE db_datawriter ADD MEMBER [IIS APPPOOL\SitePool];
GO

Nasıl doğrulanır?

  • Bağlantıyı gerçekleştiren sayfadan basit yetkili bir SELECT denemesi yap.
  • Gerekliyse bir test kaydıyla yazma yetkisini doğrula, sonra test verisini kaldır.
  • SQL sunucu Error Log ve IIS olaylarında beklenmeyen başarısız giriş kalmadığını incele.
  • Bağlantı dizesinin içinde veritabanı yönetici şifresi bulunmadığını kontrol et.

Sonuç

Vakadaki IIS Anonymous Authentication kimliği App Pool Identity’ye geçirildi, SQL’de ilgili havuz hesabına gerekli haklar verildi; uygulama verileri yeniden okuyabildi. Asıl ders: Windows bütünleşik güvenlikte ‘uygulama hesabı’ ile ‘web ziyaretçisi hesabı’ aynı olmayabilir.