dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Home/Hata Kütüphanesi/SQL Server/sqlserver-18456-login-failed
SQL Server
SQL Server 2019 / 2022
5 dk okuma
Error 18456: Login failed for user

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ı.

Standart:Kıdemli Veritabanı Mimarı & SRE (dataiotech Labs)
Test Edilen Sürümler: SQL Server 2019 / 2022
İlk 60 Saniye Teşhis Protokolü:

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

plaintext
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

StateAnlamıİlk bakılacak yer
2, 5Kullanı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, 12Login geçerli ama sunucu erişimi reddedildiHesap devre dışı, kilitli, ya da kimlik doğrulama türü uyuşmuyor
18Şifre değiştirilmeliMUST_CHANGE işaretli hesap
38, 40Login'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.

sql
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.

sql
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.

sql
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:

sql
ALTER LOGIN [uygulama] ENABLE;

Varsayılan veritabanı silinmişse State 40 alırsınız. Çözüm:

sql
ALTER LOGIN [uygulama] WITH DEFAULT_DATABASE = [master];

Ardından hedef veritabanında kullanıcı eşleşmesini onarın:

sql
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ılar

4. `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

Diğer Veritabanı Hata Teşhisleri

Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.

Tüm Hatalar (20)