Gagal masuk untuk pengguna - Kesalahan 18456 - Keparahan 14, Status 38

23

Pesan yang ditampilkan oleh SQL Server Log File Viewer:

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

Apa sebenarnya artinya:

Failed to open the explicitly specified database

Pertanyaan saya:

Apakah ada daftar di suatu tempat dari semua variasi kesalahan 18456 (Login gagal), untuk setiap kombinasi keparahan dan keadaan, dengan teks uraian yang membantu?

Saya sudah memiliki Google tetapi tidak dapat menemukan selain kombinasi spesifik.

Pete Oakey
sumber

Jawaban:

25

Kode negara dan artinya.

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)'

Informasi lebih rinci tersedia di blog Aaron Bertrand .

Pete Oakey
sumber
@PeteOakly Anda berada di jalur yang benar di sini untuk negara 38. Lihat pos di bawah ini tentang database yang hilang sebagai salah satu alasan untuk keadaan 38.
John Dyer
4

Saya memiliki kesalahan yang sama dengan kode negara 38 yang disebabkan oleh kesalahan ketik nama database dalam string koneksi.

Rob Bowman
sumber
2

Inilah yang saya temukan ketika saya menyelesaikan kesalahan ini: Saya telah membuat beberapa koneksi SQL menggunakan windows login dan bukan nama pengguna dan kata sandi. Tidak benar-benar yakin apa atau bagaimana itu terjadi tetapi ternyata itu terjadi. Saya menghapusnya dan kemudian membangun kembali model entitas saya. Saya menggunakan koneksi string lain yang saya tahu baik, dan semuanya adalah sukacita. Kuncinya adalah Persist Security Info = True, yang tidak akan berfungsi di jaringan atau situs web eksternal

Bill W.
sumber
2

Saya memiliki 18456 dengan negara 38 juga. Ternyata string koneksi memiliki 'keamanan terpadu = benar' yang bukan yang saya inginkan. String koneksi berisi userid dan kata sandi yang akan digunakan. Ketika saya mengubah pengaturan menjadi false, semuanya baik-baik saja.

Dick Vandenberg
sumber
2

Saya mendapat kesalahan ini mencoba masuk ke SQL Server dengan beberapa contoh. String koneksi tidak memberi nama instance. Setelah saya beri nama instance (SERVERNAME \ INSTANCENAME), saya berhasil terhubung ke server.

Nasser
sumber
2

@Pete Oakly berada di jalur yang benar dengan daftar kode negara. Secara khusus, ini adalah kode yang kita semua tertarik:

38 'Login valid tetapi database tidak tersedia (atau login tidak diizinkan)'

Masalah saya dimulai pada log kesalahan C #:

Pengecualian | PublishedException | 000161 | 10/29/2018 | 11: 06: 40.210 | 16284 | InnerException | Tidak dapat membuka basis data "InterestingDataBaseName" yang diminta oleh login. Login gagal. Gagal masuk untuk pengguna 'CORP \ anyuser'.

Mata saya terfokus pada bagian "Login gagal" . Pengguna saya adalah sa untuk server DB ini, bagaimana mungkin login gagal?

Saya menemukan posting ini oleh trio programmer yang memiliki jawaban: https://justaprogrammer.net/2012/12/09/a-misleading-sql-error-message-error-18456-severity-14-state-38 /

Ini bukan gagal login per se, itu database yang saya coba akses. Itu tidak ada!

Bingo! Saya telah mengubah nama database karena alasan lain dan tidak memperbarui file konfigurasi. Memperbaiki nama DB dan semuanya berfungsi seperti pesona sekali lagi.

John Dyer
sumber
1

Dalam kasus kami di Manajer Konfigurasi SQL Server | Konfigurasi Jaringan SQL Server | TCP / IP | IP | Port TCP TIDAK diatur.

Tanpa kita bisa membuat koneksi ODBC dan bahkan menggunakan koneksi SQL Management Studio jarak jauh dan login dengan pengguna. Namun setiap kali kami mengakses url dari aplikasi Tomcat kami, ia meluncurkan koneksi jdbc, kemudian kami melihat di SQL Server. Log kesalahan: Login gagal untuk pengguna 'xxxx': alasan Gagal membuka database yang ditetapkan secara eksplisit, kesalahan 18456, Severity 14 , Negara 38

Di sini abstrak dari string koneksi jdbc

"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" 

Ini untuk mengatakan bahwa juga di SQL Server Network Configuration | Protokol untuk <nama instance> | Pipa Bernama harus DIAKTIFKAN & Nama Pipa \\.\pipe\MSSQL$<instance name>\sql\query harus diatur dengan benar.

IMS
sumber
1

Ya, ini adalah kesalahan terkait izin basis data. Saya menambahkan solusi saya dalam pertanyaan ini karena, sangat penting untuk memahami peran DBA. Jadi, ada saran saya:

  • Pergi ke Server Manager
  • Pilih Alat dan kemudian Manajemen Komputer
  • Periksa Pengguna dan Grup Lokal
  • Periksa nama admin dengan deskripsi 'Akun bawaan untuk mengelola komputer / domain'

Sekarang, login dengan nama pengguna itu dan Anda dapat memberikan akses kepada pengguna. Untuk melakukannya:

Pergi ke Keamanan , klik kanan pada Login dan pilih Login Baru

Di jendela masuk, Anda dapat mengetik nama pengguna atau mencarinya. Pilih pengguna dari daftar dan klik OK dan OK lagi.

Pada jendela login yang sama, klik Server Peran , dan berikan akses ke pengguna yang dipilih seperti: sysadmin, serveradmin, decreator dll; klik OK .

Jika Anda ingin memberikan akses ke basis data individual, buka Pemetaan Pengguna dan berikan akses sesuai kebutuhan Anda.

Periksa Status database: Izin: Grant Login: Diaktifkan

Klik OK

Priyanka
sumber
2
Ini bisa menjadi jawaban yang cukup baik jika Anda bisa menempatkan fokus pada kemungkinan hilang SQL Server Login ke database Pengguna hubungan atau kemungkinan bahwa SQL Server Login 's database default tidak lagi tersedia. Saat ini jawaban Anda hanyalah rekomendasi umum tentang cara membuat akun. Saya tidak yakin bagaimana bagian pertama dari jawaban Anda akan membantu menyelesaikan masalah OP. Bisakah Anda menjelaskan bagian itu?
John alias hot2use