SQL Server Error 18456: "Login failed" — State Numarası Neyi Anlatıyor?
18456 hatasında State numarası gerçek nedeni söyler. State 5, 8, 11, 18, 38 ve 40 için ayrı çözümler, ERRORLOG okuma komutları.
Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.
▸Belirti
Login failed for user 'uygulama'. Reason: Password did not match that for the login provided.
[CLIENT: 10.0.4.22]Bu hata mesajının en değerli kısmı, istemciye gösterilmeyen State numarasıdır ve yalnızca sunucudaki ERRORLOG'da görünür. State, "kimlik doğrulama mı, yetkilendirme mi, veritabanı mı" sorusunu tek başına yanıtlar.
▸State kodları: teşhis tablosu
| State | Anlamı | İlk bakılacak yer |
|---|---|---|
| 2, 5 | Kullanıcı/oturum açma adı bulunamadı | Login gerçekten var mı, adı doğru mu |
| 7, 8 | Şifre uyuşmuyor | Şifre; Windows-only modda mı çalışıyor (karma mod kapalı) |
| 11, 12 | Login geçerli ama sunucu erişimi reddedildi | Hesap devre dışı, kilitli, ya da kimlik doğrulama türü uyuşmuyor |
| 18 | Şifre değiştirilmeli | MUST_CHANGE işaretli hesap |
| 38, 40 | Login'in varsayılan veritabanı açılamadı | Varsayılan DB silinmiş, offline veya erişilemez |
▸Adım adım çözüm
1. State numarasını ERRORLOG'dan okuyun.
EXEC xp_readerrorlog 0, 1, N'18456';Bu, en hızlı ve en güvenilir başlangıçtır. Mesajın tamamında State: N ifadesini arayın.
2. Kimlik doğrulama modunu doğrulayın.
SELECT SERVERPROPERTY('IsIntegratedSecurityOnly') AS sadece_windows;1 dönerse sunucu yalnızca Windows kimlik doğrulaması kabul ediyor; SQL login ile bağlanmaya çalışmak State 8 üretir. Karma moda geçiş, SSMS'te sunucu özelliklerinden yapılır ve servis yeniden başlatılmasını gerektirir.
3. Login'in durumunu ve varsayılan veritabanını kontrol edin.
SELECT name, type_desc, is_disabled, default_database_name,
create_date, modify_date
FROM sys.server_principals
WHERE type IN ('S', 'U', 'G')
ORDER BY name;is_disabled = 1 ise:
ALTER LOGIN [uygulama] ENABLE;Varsayılan veritabanı silinmişse State 40 alırsınız. Çözüm:
ALTER LOGIN [uygulama] WITH DEFAULT_DATABASE = [master];Ardından hedef veritabanında kullanıcı eşleşmesini onarın:
USE [uygulama_db];
SELECT dp.name, dp.type_desc, sp.name AS server_login
FROM sys.database_principals dp
LEFT JOIN sys.server_principals sp ON dp.sid = sp.sid
WHERE dp.type IN ('S', 'U') AND sp.name IS NULL; -- yetim kullanıcılar4. `NT AUTHORITY\ANONYMOUS LOGON` görüyorsanız sorun şifre değil. Bu, Kerberos'un iki atlamayı geçemediği (double-hop) klasik durumdur: istemci → uygulama sunucusu → SQL Server. Çözüm, SQL Server için SPN kaydı ve temsil (delegation) yapılandırmasıdır.
▸Bunu bir daha yaşamamak için
Login envanterini (sys.server_principals) ve veritabanı kullanıcı eşleşmelerini düzenli kontrol edin. Yetim kullanıcılar, veritabanı geri yüklemesinden sonra sessizce oluşur ve ilk kesintide patlar.
▸İlgili Mühendislik Rehberleri ve İç Linkler
- •SQL Server Deadlock (Error 1205) Analizi
- •SQL Server Pool Timeout Kılavuzu
- •Test edilen sürümler: SQL Server 2019 / 2022
Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
SQL Server Error 1205 Deadlock: Grafiği Bulma ve Önleme
SQL Server 1205 hatasında deadlock grafiğini system_health oturumundan çıkarma, kurban seçimini anlama ve kalıcı önleme yöntemleri.
SQL Server Pool Timeout: Bağlantı Havuzu Tükenmesi Çözümü
"Timeout expired prior to obtaining a connection from the pool" hatasının komut zaman aşımından farkı, sızıntı tespiti ve .NET tarafında kalıcı düzeltme.
SQL Server Msg 9002: Transaction Log Full Hatası Çözümü
9002 hatasında log_reuse_wait_desc çıktısını okumak, LOG_BACKUP / ACTIVE_TRANSACTION / AVAILABILITY_REPLICA nedenlerine göre ayrı çözümler ve VLF yönetimi.