Database SQL Azure "Login gagal untuk pengguna" dalam aplikasi, tetapi berfungsi dengan baik di SSMS

14

Saya ingin mencoba fitur pengguna basis data yang terkandung di Azure SQL Database V12, tapi saya mengalami masalah otentikasi yang terasa aneh bagi saya.

Saya membuat basis data bernama Classifier. Saya menambahkan IP saya ke aturan firewall sehingga saya bisa terhubung ke server Azure db dari SSMS di workstation saya. Setelah saya dapat terhubung melalui SSMS untuk administrasi, saya mencoba menambahkan pengguna dengan kata sandi ke database, seperti ini:

CREATE USER classifier WITH PASSWORD='thepassword'

Saya juga menambahkan pengguna ini ke peran penulis data dan pembaca:

exec sp_addrolemember 'db_datawriter', 'classifier'
exec sp_addrolemember 'db_datareader', 'classifier'

Setelah ini, saya dapat terhubung ke database dengan kredensial ini dari SSMS:

masukkan deskripsi gambar di sini

Tapi di sinilah semuanya serba salah: Saya sudah mencoba beberapa mantra koneksi string yang berbeda dan sepertinya tidak bisa terhubung dalam aplikasi web yang sedang saya kerjakan. Itu tidak berfungsi di lingkungan Azure, jadi saya berjalan di localhost dengan string koneksi ke database Azure, dan itu tidak akan terhubung. Inilah string koneksi yang saya gunakan saat ini:

<add name="Classifier" connectionString="Data Source=xxxxxxx.database.secure.windows.net;Initial Catalog=Classifier;User ID=classifier;Password=xxxxxxxxxxxxx;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient"/>

Saya sudah mencoba mengatur ulang kata sandi (melalui SSMS) untuk pengguna dan kemudian memperbarui string koneksi; Saya juga memeriksa ulang kata sandi dengan menyalinnya langsung dari string koneksi ini dan ke dialog connect di SSMS untuk memastikan saya tidak memiliki kesalahan ketik di sana.

Saya mengaktifkan audit di server Azure db dengan harapan mendapatkan beberapa detail mengapa gagal, tetapi yang saya dapatkan adalah ini:

Kesalahan 18456, Level 14, Status 1, Sever SQL Azure, Line 1Login gagal untuk pengguna 'classifier'

Dan di sinilah aku terjebak. Sebagian besar dari apa yang saya dapat temukan melalui dokumentasi atau blog menunjukkan bahwa hal yang harus dilakukan adalah melihat log SQL Server untuk melihat apa status kesalahan sebenarnya yang akan menunjukkan secara lebih sempit sifat kegagalan, tetapi karena saya Saya berurusan dengan Azure tidak ada cara untuk melakukan itu (sejauh yang saya tahu).

Apa yang bisa menyebabkan aplikasi gagal di mana SSMS (dan LinqPad dan Visual Studio Server Explorer, kebetulan) berhasil?

Ben Collins
sumber

Jawaban:

15

Kami menemukan bahwa dengan basis data / pengguna yang ada Anda harus menentukan:

GRANT CONNECT TO [YOUR_USER]

Jika tidak, CONNECTtampaknya dicabut secara default. Setelah kami membuat perubahan di atas, kami dapat mengakses database.

HowardvanRooijen
sumber
Kami memiliki akun yang ada yang berfungsi dan kemudian berhenti bekerja. Saya harus memberikan koneksi lagi ke sana.
Shane Courtrille
Pada Azure, saya mendapatkan kesalahan Cannot find the user 'myuser', because it does not exist or you do not have permission.meskipun nama pengguna ada di bawah Keamanan> Masuk tetapi tidak MyDatabse> Keamanan> Pengguna. Saya mencoba CREATE USER [myuser] FOR LOGIN [myuser] WITH DEFAULT_SCHEMA=[mydb] GOtetapi mendapat kesalahanThe login already has an account under a different user name.
Korayem
Saya punya masalah serupa. Pada lingkungan dev semuanya berfungsi menghubungkan ke sql Azure, tetapi setelah diterbitkan, ia melempar kesalahan itu. Namun saya tidak dapat menjalankan perintah atau membuat pengguna, ada yang mencoba sesuatu yang berbeda?
Ricker Silva
@dezso saya menghadapi masalah serupa. Kode ADO.NET dan EF (DBContext) saya berfungsi dengan baik di mesin lokal (belum pernah mencoba di Azure) Tetapi kode EF yang diimplementasikan menggunakan IdentityDBConext gagal. Saya tidak yakin apa yang salah atau fitur apa dari IdentityDBConext yang memerlukan akses ke server. Ini pertanyaan asli saya stackoverflow.com/questions/40260720/…
Hiren Desai
5

Saat mengalihkan API kami untuk terhubung ke basis data Azure melalui pengguna baru yang terkandung, kami harus mengubah string koneksi kami untuk menyertakan:

Persist Security Info=True;

Meskipun saya tidak mengerti mengapa perubahan ini diperlukan, saya ingin memposting di sini jika itu membantu orang lain di masa depan.

Kami awalnya datang untuk mencoba ini dari pertanyaan ini .

sfm
sumber
2

Masalah saya berbeda, tetapi terkait: Saya mencoba menyambungkan ke database Azure SQL dengan menggunakan SQL Server Management Studio (SSMS) dengan pengguna yang ada . Saya menerima pesan "Login gagal untuk pengguna" di SSMS.

Solusi: dalam opsi koneksi SSMS untuk jendela kueri, saya telah menetapkan "Sambungkan ke Database" ke nama database yang saya coba sambungkan.

Penjelasan: Di belakang, alasannya jelas: pengguna yang terkandung hanya diizinkan untuk terhubung ke database tempat mereka dibuat.

Vince Horst
sumber
Mau jelaskan suara turun?
Vince Horst
1
Bukan saya tapi mungkin karena jawaban Anda agak kebalikan dari pertanyaan. Masih berguna, dan berkat desain yang buruk dari dialog SSMS itu kesalahan yang mudah dilakukan!
Simon_Weaver
0

Ini dapat terjadi jika menjalankan perintah Powershell yang berisi string koneksi ketika kata sandi Anda berisi $. Anda dapat menyiasatinya dengan melampirkan string koneksi dengan tanda kutip tunggal - atau dengan tidak menyimpan kata sandi Anda dalam string koneksi terlebih dahulu ;-)

Misalnya. Saya mengalami ini dengan Scaffold-DbContextperintah

https://github.com/aspnet/EntityFrameworkCore/issues/6624

Simon_Weaver
sumber