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.
PostgreSQL too many clients already Hatası: 6 Adımda Çözüm
FATAL: sorry, too many clients already hatasının üç nedeni, nedeni ayırt eden tek sorgu ve max_connections ile PgBouncer üzerinden kalıcı çözümü.
PostgreSQL password authentication failed Hatası: Neden ve Çözüm
psql password authentication failed hatasının dört nedeni: yanlış şifre, md5/SCRAM uyuşmazlığı, pg_hba.conf sırası ve yanlış cluster. Adım adım teşhis.
MySQL ERROR 1045 Access denied: root Şifresi Sıfırlama Rehberi
MySQL 1045 hatasının dört nedeni, "using password: YES/NO" ayrımının anlamı ve kilitli kalınca --init-file ile güvenli şifre sıfırlama.