27 Şubat 2014 Perşembe

HATA: Login failed for user ''. Reason: An attempt to login using SQL authentication failed...


HATA: 
Error: 18456, Severity: 14, State: 58.
Login failed for user ''. Reason: An attempt to login using SQL authentication failed. Server is configured for Windows authentication only.

AÇIKLAMA:
SQL Error Log'unda böyle bir hata ile karşılaşabilirsiniz. Keza bu giriş denemesini yapan kullanıcı da aşağıdaki gibi bir hata alacaktır:

Login failed for user ''.

Öncelikle bu hata biraz yanıltıcı aslında. Özellikle de hata mesajının ikinci cümlesi olan "Server is configured for Windows authentication only" cümlesinin bu hata ile hiçbir ilgisi yok. Çünkü bu hatayı "Mixed Mode Authentication" yani "SQL Authentication" olarak ayarlanmış bir SQL Server Instance'ında da alabiliyorsunuz!

Bu hatanın nasıl oluşabileceğini düşünürken aklıma bir fikir geldi ve bunu öncelikle SQL Server Management Studio (SSMS) ile denedim. Aklıma gelen fikir, bu hatanın SQL Authentication Mode ile fakat bir kullanıcı adı belirtmeden bağlanmaya çalışıldığında oluşabileceğiydi. SSMS ile yaptığım denemede aşağıdaki sonucu aldım:

SSMS ile kullanıcı bilgisi girmeden yaptığım test
Bu testte SQL Error Log'a herhangi bir kayıt düşmedi. Çünkü SSMS arayüzünden işleme devam etmek için onay alamadım! SSMS herhangi bir kullanıcı bilgisi girmeden SQL Authentication Mode ile bağlanamayacağımı anlayacak kadar akıllıydı. Ben de tam bu sırada VS ile bağlantı denemesi için küçük bir uygulama yazayım diye düşünürken, aklıma ODBC Client'ı geldi. ODBC Data Sources uygulamasını çalıştırdım ve User DSN bölümünden öylesine bir DSN kaydı oluşturdum.

ODBC Data Source ile yaptığım deneme


Tabii ki bağlantı yöntemi olarak SQL Authentication'ı seçtim ve kullanıcı adı bilgisini boş bıraktıktan sonra DSN oluşturma işlemine devam ettim ve voila! Bağlantı kuruldu ve hata alındı. Hata tam da beklediğim gibi bu şekilde alınmıştı. Anladım ki kullanıcı tarafında kullanılan uygulama, kullanıcı bilgilerinin girilip girilmediğini kontrol etmeden SQL Server Instance'ına bağlanmaya çalışıyordu ve bu nedenle ben de SQL Error Log'unda böyle bir hata mesajı görüyordum.

Hiç yorum yok: