Tidak dapat membuka "tes" database yang diminta oleh login. Login gagal. Login gagal untuk pengguna 'xyz \ ASPNET'

99

Saya telah membuat layanan web yang menyimpan beberapa data ke db. Tapi saya mendapatkan kesalahan ini:

Tidak dapat membuka database "test" yang diminta oleh login. Login gagal. Login gagal untuk pengguna 'xyz \ ASPNET'.

String koneksi saya adalah

Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True
coure2011
sumber
Kami membutuhkan lebih banyak informasi sebelum kami dapat membantu mendiagnosis ini.
sblom
Saya memiliki masalah ini dan menutup studio visual dan membukanya lagi dan mulai berfungsi ..
trees_are_great

Jawaban:

47

Nah, kesalahannya cukup jelas, bukan? Anda mencoba menyambung ke SQL Server dengan pengguna "xyz / ASPNET" - itulah akun yang menjalankan aplikasi ASP.NET Anda.

Akun ini tidak diizinkan untuk menyambung ke SQL Server - buat login di SQL Server untuk akun tersebut, atau kemudian tentukan akun SQL Server valid lainnya di string koneksi Anda.

Dapatkah Anda menunjukkan kepada kami string koneksi Anda (dengan memperbarui pertanyaan asli Anda)?

UPDATE: Oke, Anda menggunakan otentikasi Windows terintegrasi -> Anda perlu membuat login SQL Server untuk "xyz \ ASPNET" di SQL Server Anda - atau ubah string koneksi Anda menjadi seperti:

connectionString="Server=.\SQLExpress;Database=IFItest;User ID=xyz;pwd=top$secret"

Jika Anda memiliki user "xyz" dengan password "top $ secret" di database Anda.

marc_s
sumber
11
Tidak "tidak diizinkan untuk menyambung ke SQL Server", tetapi "tidak diizinkan untuk menggunakan database" tes "".
wRAR
@wRAR: benar - tapi saya rasa kemungkinan login pengguna ada di server, tetapi tidak diaktifkan di database khusus ini, mungkin tipis (setidaknya menurut saya)
marc_s
Lihat juga "Database = IFItest" vs "test", meskipun itu mungkin salah cetak.
wRAR
2
Satu hal yang tidak pernah Anda singgung adalah bahwa Nama DB bisa saja salah. Saya mendapat pesan pengecualian dari Azure SQL Server, dan ternyata saya telah memberikan nama yang salah untuk DB saya di salah satu string koneksi di kode C # di proyek ASP.NET saya.
Ron16
Ron, itu masalahku. Saya bahkan telah memeriksa ulang ejaannya tetapi melewatkannya saat itu.
Darrell Lloyd Harvey
32
  • Salah satu: "xyz \ ASPNET" bukan info masuk (dalam sys.server_principals)
  • Atau: "xyz \ ASPNET" disiapkan tetapi tidak dipetakan ke pengguna dalam pengujian database (sys.database_principals)

Saya akan memilih opsi ke-2: pesan kesalahan menyiratkan database default tidak ada atau tidak ada hak di dalamnya, daripada tidak diatur sebagai login.

Untuk menguji apakah itu sudah diatur sebagai login

SELECT SUSER_ID('xyz\ASPNET') -- (**not** SUSER_SID)

Jika NULL

CREATE LOGIN [xyz\ASPNET] FROM WINDOWS

Jika bukan NULL

USE test
GO
SELECT USER_ID('xyz\ASPNET')

Jika NULL

USE test
GO
CREATE USER [xyz\ASPNET] FROM LOGIN [xyz\ASPNET]
gbn
sumber
1
Ini luar biasa !, alur kerja sederhana untuk mendeteksi dan menyelesaikan masalah.
Mazen el Senih
13

Saya memiliki masalah ini dan yang menyelesaikannya bagi saya adalah:

  • Pergi ke kolam Aplikasi di IIS
  • Klik kanan pada kumpulan aplikasi proyek saya
  • Di bagian Model Proses, buka Identity
  • Pilih opsi akun Kustom
  • Masukkan nama pengguna dan kata sandi komputer Anda.
ParPar
sumber
8

Solusi terbaik untuk masalah login adalah membuat pengguna login di sqlServer. Berikut adalah langkah-langkah untuk membuat login SQL Server yang menggunakan otentikasi Windows (SQL Server Management Studio):

  1. Di SQL Server Management Studio, buka Object Explorer dan perluas folder instance server untuk membuat login baru.
  2. Klik kanan folder Keamanan, arahkan ke Baru, lalu klik Login.
  3. Di halaman Umum, masukkan nama pengguna Windows di kotak Nama login.
  4. Pilih Otentikasi Windows.
  5. Klik OK.

Misalnya, jika nama pengguna adalah xyz\ASPNET, maka masukkan nama ini ke dalam Kotak nama Login.

Anda juga perlu mengubah Pemetaan pengguna untuk mengizinkan akses ke Database yang ingin Anda akses.

Rajeev
sumber
8

Sering kali, ini bukan masalah login, tetapi masalah dengan pembuatan database itu sendiri. Jadi jika ada kesalahan saat membuat database Anda, itu tidak akan dibuat sejak awal. Dalam hal ini jika Anda mencoba masuk, terlepas dari penggunanya, proses masuk akan gagal. Ini biasanya terjadi karena salah tafsir logis dari konteks db.

Kunjungi situs di browser dan BENAR-BENAR membaca log kesalahan tersebut, ini dapat membantu Anda menemukan masalah dengan kode Anda (biasanya masalah logika yang bertentangan dengan model).

Dalam kasus saya, kode dikompilasi dengan baik, masalah login yang sama, ketika saya masih mengunduh studio manajemen, saya melewati log kesalahan, memperbaiki kendala konteks db saya dan situs mulai berjalan dengan baik .... sementara studio manajemen masih mengunduh

Justice O.
sumber
6

Bagi saya database belum dibuat dan kode EF pertama kali harus membuatnya tetapi selalu berakhir dengan kesalahan ini. String koneksi yang sama berfungsi di proyek web default inti aspnet. Solusinya adalah menambahkan

_dbContext.Database.EnsureCreated()

sebelum kontak database pertama (sebelum seeding DB).

cyptus
sumber
4

Masalah

Kesalahan muncul dengan sendirinya sebagai pesan yang mirip dengan ini:

Tidak dapat membuka database "DATABASE NAME" yang diminta oleh login. Login gagal. Login gagal untuk pengguna XYZ.

  • Kesalahan biasanya tidak dapat diperbaiki dengan Visual Studio sederhana atau restart komputer penuh.
  • Kesalahan juga dapat ditemukan sebagai file database yang tampaknya terkunci.

Perbaiki

Solusinya ada dalam langkah-langkah berikut. Anda tidak akan kehilangan data apa pun dalam database Anda dan Anda tidak boleh menghapus file database Anda!

Prasyarat: Anda harus menginstal SQL Server Management Studio (Penuh atau Ekspres)

  1. Buka SQL Server Management Studio
  2. Di jendela "Connect to Server" (File-> Connect object explorer) masukkan berikut ini:
    • Jenis server: Mesin Basis Data
    • Nama server: (localdb) \ v11.0
    • Otentikasi: [Apa pun yang Anda gunakan saat membuat db lokal. Mungkin Otentikasi Windows).
  3. Klik "Hubungkan"
  4. Perluas folder "Database" di Object Explorer (View-> Object Explorer, F8)
  5. Temukan database Anda. Ini harus diberi nama sebagai jalur lengkap ke file database (.mdf) Anda
    • Anda seharusnya melihatnya mengatakan "(Pemulihan Tertunda)" di akhir nama database atau ketika Anda mencoba untuk memperluas database itu tidak akan dapat dan mungkin atau mungkin tidak memberi Anda pesan kesalahan.
    • Ini masalahnya! Basis data Anda pada dasarnya mogok ..
  6. Klik kanan pada database lalu pilih "Tasks -> Detach ...".
  7. Di jendela lepas, pilih database Anda di daftar dan periksa kolom yang bertuliskan "Drop Connections"
  8. Klik OK.
  9. Anda akan melihat database menghilang dari daftar database. Masalah Anda sekarang harus diperbaiki. Buka dan jalankan aplikasi Anda yang menggunakan localdb Anda.
  10. Setelah menjalankan aplikasi Anda, database Anda akan muncul kembali di daftar database - ini benar. Seharusnya tidak tertulis "Pemulihan menunggu keputusan" karena seharusnya berfungsi dengan baik.

Sumber solusi: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed

Anton Lyhin
sumber
Masalahnya adalah saya bahkan tidak dapat menemukan DB itu.
Shimmy Weitzhandler
3

Itu juga terjadi ketika Anda mengetik nama DB yang salah

ex : xxx-db-dev to xxx-dev-db

Terkadang, itu hanya kesalahan bodoh. Saya membutuhkan waktu lebih dari 1 jam untuk mengetahuinya :( karena saya baru saja mencoba banyak hal yang sulit terlebih dahulu

Serigala abu-abu
sumber
2

Saya mencoba memperbarui pengguna, dan berhasil. Lihat perintah di bawah ini.

USE ComparisonData// databaseName
EXEC  sp_change_users_login @Action='update_one', @UserNamePattern='ftool',@LoginName='ftool';

Ganti saja yang user('ftool')sesuai.

shashank
sumber
2

Ini Bekerja untuk saya.

  1. Buka SQL Server >> Keamanan >> Login dan klik kanan pada NT AUTHORITY \ NETWORK SERVICE dan pilih Properties
  2. Di layar yang baru dibuka dari Properti Login, buka tab "Pemetaan Pengguna".
  3. Kemudian, pada tab "Pemetaan Pengguna", pilih database yang diinginkan - terutama database yang menampilkan pesan kesalahan ini.
  4. Klik OK.

Baca blog ini.

http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requested-by-the-login-the-login-failed-login-failed-for- pengguna-nt-otoritasnetwork-service /

Kamran
sumber
terima kasih, menggunakan "NT AUTHORITY \ SYSTEM" memecahkan masalah saya.
Farzad Karimi
2

Saya menggunakan otentikasi Windows untuk menyambung ke database lokal file .mdf dan server lokal saya adalah sql server 2014. Masalah saya diselesaikan menggunakan string koneksi ini:

string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";
Ehsan
sumber
Saya harus menghapus bagian ini "User Instance = True" agar DB lokal saya berfungsi
Anonim
2

Dalam kasus saya ini adalah masalah yang berbeda. Basis data berubah menjadi mode pengguna tunggal dan koneksi kedua ke basis data menunjukkan pengecualian ini. Untuk mengatasi masalah ini ikuti langkah-langkah di bawah ini.

  1. Pastikan penjelajah objek diarahkan ke database sistem seperti master.
  2. Jalankan a exec sp_who2dan temukan semua koneksi ke database 'my_db'. Matikan semua koneksi dengan melakukan di KILL { session id }mana id sesi adalah SPID yang terdaftar oleh sp_who2.
USE MASTER;
EXEC sp_who2
  1. Ubah database
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO
Krishanth Rajkumar
sumber
1

Saya belum melihat hal ini disebutkan di edisi sebelumnya, jadi izinkan saya membuang kemungkinan lain. Bisa jadi itu IFItesttidak bisa dijangkau atau memang tidak ada. Misalnya, jika seseorang memiliki sejumlah konfigurasi, masing-masing dengan database-nya sendiri, bisa jadi nama database tidak diubah ke yang benar untuk konfigurasi saat ini.

demongolem
sumber
1

NB: Jika menggunakan layanan windows untuk menghosting webservice.

Anda harus memastikan bahwa layanan web Anda menggunakan akun Logon yang benar untuk menyambung ke SQL Server.

  • Buka layanan (Saya berasumsi layanan windows telah diinstal)
  • Klik kanan pada properti layanan dan goto.
  • Klik pada Tab "Masuk"
  • Klik tombol radio "Akun ini"
  • Klik "Jelajahi"
  • Masukkan nama pengguna PC di Bidang Teks dan klik Tombol "Periksa Nama" di sebelah kanan.
  • Klik pada teks di Text Field, tekan tombol "OK"
  • masukkan kata sandi login dan Terapkan
Koki Monoto
sumber
1

Terinspirasi oleh jawaban cyptus yang saya gunakan

_dbContext.Database.CreateIfNotExists();

pada EF6 sebelum kontak database pertama (sebelum seeding DB).

Jesse Hufstetler
sumber
1

Jika Anda belum membuat database di server Anda, Anda akan mendapatkan error login yang sama, Pastikan database sudah ada sebelum Anda login.

AmirHossein Rezaei
sumber
1

Saya mengalami masalah ini ketika mencoba untuk menulis ke database default yang disediakan di template MVC asp.net. Hal ini dikarenakan database belum dibuat.

Untuk membuat database dan memastikannya dapat diakses, ikuti langkah-langkah berikut:

  1. Buka konsol manajer paket di Visual Studio
  2. Jalankan perintah "update-database"

Ini akan membuat database dan menjalankan semua migrasi yang diperlukan di dalamnya.

GrantByrne
sumber
0

Pilihan terbaik adalah menggunakan otentikasi terintegrasi Windows karena lebih aman daripada otentikasi sql. Buat pengguna windows baru di sql server dengan izin yang diperlukan dan ubah pengguna IIS di pengaturan keamanan pool aplikasi.

Giorgi
sumber
0

Saya menemukan bahwa saya juga harus mengatur opsi UserMapping saat membuat login baru dan ini memecahkan masalah bagi saya. Harapan yang membantu siapa saja yang juga terjebak di sini!

Sunting: Mengatur login sebagai pemilik db memecahkan masalah berikutnya juga

DevDave
sumber
0

Beberapa kali masalah ini mungkin muncul jika Anda membuka db ini di server sql lain (misalnya, Anda meluncurkan studio manajemen sql (SMS) dan menambahkan db ini), dan lupa menghentikan server ini. Akibatnya - aplikasi Anda mencoba untuk terhubung dengan pengguna yang sudah terhubung di db ini di bawah server lain. Untuk memperbaikinya, coba hentikan server ini dengan Config. operator sql server.

Saya minta maaf tentang bahasa Inggris yang buruk. Hormat kami, Ignat.

pengguna3041948
sumber
0

Dalam kasus saya, aplikasi asp.net biasanya dapat terhubung ke database tanpa masalah. Saya melihat pesan seperti itu di log. Saya mengaktifkan log server SQL dan saya menemukan pesan ini:

2016-10-28 10:27:10.86 Logon       Login failed for user '****'. Reason: Failed to open the explicitly specified database '****'. [CLIENT: <local machine>]
2016-10-28 10:27:13.22 Server      SQL Server is terminating because of a system shutdown. This is an informational message only. No user action is required.

Jadi sepertinya server sedang restart dan SQL server yang telah ditutup lebih awal dari aplikasi ASP.NET dan database tidak tersedia selama beberapa detik sebelum server restart.

Tomas Kubes
sumber
0

Bahkan jika Anda telah mengatur login sebagai pemilik DB dan mengatur pemetaan pengguna untuk database yang akan menggunakan login, periksa apakah pengguna DB yang sebenarnya (bukan hanya login) memiliki peran sebagai 'pemilik'.

Chris Halcrow
sumber
0

Dalam kasus saya, saya menjalankan Layanan Windows dengan identitas "Sistem". Kesalahannya adalah:

System.Data.SqlClient.SqlException (0x80131904): 
Cannot open database "MyDbName" requested by the login. The login failed.
Login failed for user 'MYDOMAINNAME\HOSTNAME$'.

Masalahnya adalah kesalahan tersebut sangat menyesatkan. Bahkan setelah saya menambahkan login 'MYDOMAINNAME \ HOSTNAME $' ke database, dan memberikan akses masuk sysadmin ini dan menambahkan pengguna untuk login tersebut di database target saya, dan membuat pengguna dbowner itu, saya masih mendapatkan kesalahan yang sama. Rupanya saya perlu melakukan hal yang sama untuk login 'NT AUTHORITY \ SYSTEM'. Setelah saya melakukan itu, saya bisa masuk tanpa masalah. Saya tidak tahu mengapa pesan kesalahan mengeluh tentang 'MYDOMAINNAME \ HOSTNAME $'. Saya menghapus login itu dan pengguna yang sesuai dan semuanya masih berfungsi.

Greg Z.
sumber