Giriş yap Kullanıcı için başarısız oldu - Hata 18456 - Önem derecesi 14, Durum 38


23

SQL Server Log File Viewer'ın gösterdiği mesaj:

Login failed for user [User]
Error: 18456, Severity: 14, State 38

Aslında ne anlama geliyor:

Failed to open the explicitly specified database

Benim sorum:

Her bir ciddiyet ve durum birleşimi için yararlı açıklama metni ile 18456 hatalarının tüm varyasyonlarının bir listesi var mı (Giriş başarısız oldu)?

Bir Google’ım vardı ancak belirli kombinasyonlardan başka bir şey bulamıyorum.

Yanıtlar:


25

Devlet kodları ve anlamları.

1      'Account is locked out'
2      'User id is not valid'
3-4    'Undocumented'
5      'User id is not valid'
6      'Undocumented'
7      'The login being used is disabled'
8      'Incorrect password'
9      'Invalid password'
10     'Related to a SQL login being bound to Windows domain password policy enforcement.
        See KB925744.'
11-12  'Login valid but server access failed'
16     'Login valid, but not permissioned to use the target database'
18     'Password expired'
27     'Initial database could not be found'
38     'Login valid but database unavailable (or login not permissioned)'

Aaron Bertrand'ın blogunda daha ayrıntılı bilgi bulabilirsiniz .


@PeteOakly devlet 38 için burada doğru izdesiniz. Devlet 38 nedenlerinden biri olarak eksik bir veritabanı hakkında aşağıdaki yazıya bakın.
John Dyer

4

Bağlantı dizesinde veritabanının adının bir yazım hatası nedeniyle durum kodu 38 ile aynı hatayı yaşadım.


2

İşte bu hatayı çözdüğümde ne buldum: Windows kullanıcı adı ve şifresini değil, Windows girişini kullanarak bazı SQL bağlantıları oluşturmuştum. Ne olduğundan veya nasıl geçtiğinden emin değilim, ama oldu. Onları sildim ve varlık modelleriimi yeniden inşa ettim. İyi olduğunu bildiğim başka bir bağlantı teli kullandım ve hepsi neşedir. Anahtar Persist Güvenlik Bilgisi = Doğru, ağda veya harici bir web sitesinde çalışmayacak


2

Ben de devlet 38 ile 18456 oldu. Bağlantı dizgisinin 'tümleşik güvenlik = doğru' olduğu ve istediğim şeyin olmadığı ortaya çıktı. Bağlantı dizesi, kullanılacak olan kullanıcı kimliğini ve şifreyi içeriyordu. Ayarı false olarak değiştirdiğimde her şey yolundaydı.


2

Bir SQL Server'da birden fazla örneği olan oturum açmaya çalışırken bu hatayı aldım. Bağlantı dizesi bir örneğe isim vermedi. Örneğimi adlandırdıktan sonra (SERVERNAME \ INSTANCENAME), sunucuya bağlanmayı başardım.


2

@Pete Oakly eyalet kodu listesiyle doğru yolda . Özellikle, bu hepimizin ilgilendiği koddur:

38 'Giriş geçerli, ancak veritabanı kullanılamıyor (veya giriş izni yok)'

Sorunum C # hata günlüğünde başladı:

İstisna | PublishedException | 000161 | 10/29/2018 | 11: 06: 40.210 | 16284 | InnerException | Giriş tarafından istenen "InterestingDataBaseName" veritabanı açılamıyor. Giriş yapılamadı. 'CORP \ anyuser' kullanıcısı için giriş başarısız oldu.

Gözlerim "Giriş yapılamadı" üzerine odaklandı bölümüne . Kullanıcı bu DB sunucusu için sa idi, oturum açma nasıl başarısız olabilir?

Bu yazıya cevap veren programcılar üçlüsü tarafından rastladım: https://justaprogrammer.net/2012/12/09/a-misleading-sql-error-message-error-18456-severity-14-state-38 /

Bu, başarısız olan giriş değil, erişmeye çalıştığım veritabanıdır. Bu yok!

Bingo! Başka sebeplerden dolayı veritabanı adını değiştirmiştim ve konfigürasyon dosyasını güncellemedim. DB adı düzeltildi ve işler bir kez daha cazibe gibi çalışıyor.


1

Bizim durumumuzda SQL Server Yapılandırma Yöneticisi | SQL Server Ağ Yapılandırması | TCP / IP | IP | TCP Bağlantı Noktası edildi DEĞİL ayarlayın.

Bir ODBC bağlantısı kurmadan, uzak bir SQL Management Studio bağlantısı bile kullanabiliyor ve kullanıcıyla oturum açabiliyoruz. Ancak, Tomcat uygulamamızın URL'sine her eriştiğimizde bir jdbc bağlantısı başlattı, ardından SQL Server'da tespit ettik. Hata günlüğü: 'xxxx' kullanıcısı için oturum açma başarısız oldu: sebep açık tanımlı veritabanı açılamadı, hata 18456, Önem 14 , Devlet 38

Jdbc bağlantı dizesinin bir özeti

"jdbc:sqlserver://10.10.10.10:1433;databaseName=zzzzzzz" username="yyyyyy" password="xxxxxx" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" defaultAutoCommit="true"/>
<Resource name="jdbc/application" 

Bunu da SQL Server Ağ Konfigürasyonunda yapacağım. <Örnek adı> için protokoller | Adlandırılmış Borular ETKİNLEŞTİRİLMELİDİR ve Boru Adı \\.\pipe\MSSQL$<instance name>\sql\query doğru ayarlanmalıdır.


1

Peki, bu veritabanı izni ile ilgili hatadır. Çözümümü bu soruya ekliyorum çünkü DBA'nın rolünü anlamak çok önemlidir. Yani benim önerilerim var:

  • Sunucu Yöneticisine Git
  • Araçlar'ı ve ardından Bilgisayar Yönetimi'ni seçin.
  • Yerel Kullanıcıları ve Grupları Kontrol Edin
  • 'Bilgisayarı / etki alanını yönetmek için yerleşik hesap' açıklamasını içeren yönetici adını kontrol edin.

Şimdi, bu kullanıcı adıyla giriş yapın ve kullanıcıya erişim verebilirsiniz. Böyle yaparak:

Git Güvenlik sağ tıklayın Oturumu açma ve seçmek Yeni bir oturum

Giriş penceresinde, kullanıcı adını yazabilir veya arayabilirsiniz. Listeden kullanıcıyı seçin ve tekrar Tamam ve Tamam'ı tıklayın .

Aynı oturum açma penceresinde, Sunucu Rollerine tıklayın ve aşağıdaki gibi seçilen kullanıcıya erişim verin: sysadmin, serveradmin, decreator etc; Tamam'a tıklayın .

Bireysel bir veritabanına erişim vermek istiyorsanız, o zaman Kullanıcı Eşleme'ye gidin ve gereksiniminize göre erişim sağlayın.

Veritabanının durumunu kontrol et: İzin: Hibe Giriş: Etkin

tıklayın Tamam


2
Eksik olasılığı üzerine odağı koysa Bu oldukça iyi bir cevap olabilir SQL Server Giriş için Veritabanı Kullanıcı ilişki veya ihtimali SQL Server Login 'in varsayılan veritabanı artık mevcut değil. Şu anda cevabınız, nasıl hesap oluşturulacağına dair genel bir öneridir. Cevabınızın ilk kısmının OP sorununu nasıl çözeceği konusunda emin değilim. Bu kısmı açıklar mısın?
John aka hot2use,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.