Oturum açma tarafından istenen veritabanı "testi" açılamıyor. Giriş başarısız oldu. 'Xyz \ ASPNET' kullanıcısı için oturum açma başarısız oldu


103

Bazı verileri db'ye kaydeden bir web hizmeti oluşturdum. Ama şu hatayı alıyorum:

Oturum açma tarafından istenen veritabanı "testi" açılamıyor. Giriş başarısız oldu. Oturum açma 'xyz \ ASPNET' kullanıcısı için başarısız oldu.

Bağlantı dizem

Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True

Bunu teşhis etmeye yardımcı olmadan önce çok daha fazla bilgiye ihtiyacımız var.
sblom

Bu sorunu yaşadım ve görsel stüdyosunu
kapattım

Yanıtlar:


47

Peki, hata oldukça açık, değil mi? SQL Sunucunuza "xyz / ASPNET" kullanıcısı ile bağlanmaya çalışıyorsunuz - ASP.NET uygulamanızın altında çalıştığı hesap budur.

Bu hesabın SQL Server'a bağlanmasına izin verilmez - ya o hesap için SQL Server'da bir oturum açma oluşturun ya da bağlantı dizenizde başka bir geçerli SQL Server hesabı belirtin.

Bize bağlantı dizenizi gösterebilir misiniz (orijinal sorunuzu güncelleyerek)?

GÜNCELLEME: Tamam, entegre Windows kimlik doğrulamasını kullanıyorsunuz -> SQL Sunucunuzda "xyz \ ASPNET" için bir SQL Server oturumu oluşturmanız gerekiyor - veya bağlantı dizenizi aşağıdaki gibi bir şeyle değiştirmeniz gerekiyor:

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

Veritabanınızda "top $ gizli" parolasına sahip bir "xyz" kullanıcınız varsa.


12
"SQL Server'a bağlanmasına izin verilmez", ancak "" test "veritabanını kullanmasına izin verilmez.
wRAR

@wRAR: doğru - ama sanırım kullanıcı girişinin sunucuda var olması, ancak bu belirli veritabanında etkin olmaması, muhtemelen zayıf (en azından düşünürdüm)
marc_s

Ayrıca bkz. "Veritabanı = IFItest" ve "test", ancak bu bir yanlış basım olabilir.
wRAR

3
Hiç dokunmadığınız bir nokta, DB Adının da yanlış olabileceğidir. Azure SQL Sunucumdan ditto görünümlü bir istisna mesajı atıyordum ve ASP.NET projemdeki C # kodundaki bağlantı dizilerinden birinde DB için yanlış ad verdiğim ortaya çıktı.
Ron16

Ron, bu benim sorunumdu. Yazımı iki kez kontrol ettim ama o zaman bile kaçırdım.
Darrell Lloyd Harvey

33
  • Ya: "xyz \ ASPNET" bir oturum açma değil (sys.server_principals içinde)
  • Veya: "xyz \ ASPNET" ayarlandı, ancak veritabanı testinde (sys.database_principals) bir kullanıcıya eşlenmedi

İkinci seçeneği tercih ederim: hata mesajı, varsayılan veritabanının bir oturum açma olarak ayarlanmaması yerine, orada olmadığını veya hiçbir hakka sahip olmadığını gösterir.

Giriş olarak ayarlanıp ayarlanmadığını test etmek için

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

BOŞ ise

CREATE LOGIN [xyz\ASPNET] FROM WINDOWS

BOŞ değilse

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

BOŞ ise

USE test
GO
CREATE USER [xyz\ASPNET] FROM LOGIN [xyz\ASPNET]

1
Bu gerçekten harika!, Sorunu tespit etmek ve çözmek için basit bir iş akışı.
Mazen el Senih

"SELECT USER_ID (..." hangi tabloya karşı çalışıyor? Master?
Sam

13

Bu sorunu yaşadım ve benim için çözen şey şuydu:

  • IIS'deki Uygulama havuzlarına gidin
  • Proje uygulama havuzuma sağ tıklayın
  • Süreç Modeli bölümünde Kimlik'i açın
  • Özel hesap seçeneğini seçin
  • Bilgisayar kullanıcı adınızı ve şifrenizi girin.

8

Oturum açma sorunu için en iyi çözüm, sqlServer'da bir oturum açma kullanıcısı oluşturmaktır. Windows Kimlik Doğrulaması (SQL Server Management Studio) kullanan bir SQL Server oturumu oluşturmanın adımları şunlardır:

  1. SQL Server Management Studio'da, Object Explorer'ı açın ve yeni oturum açma bilgilerinin oluşturulacağı sunucu örneğinin klasörünü genişletin.
  2. Güvenlik klasörüne sağ tıklayın, Yeni'nin üzerine gelin ve ardından Oturum Aç'a tıklayın.
  3. Genel sayfasında, Oturum açma adı kutusuna bir Windows kullanıcısının adını girin.
  4. Windows Kimlik Doğrulaması'nı seçin.
  5. Tamam'ı tıklayın.

Örneğin, kullanıcı adı ise xyz\ASPNET, bu adı Oturum Açma Adı Kutusu'na girin.

Ayrıca, erişmek istediğiniz Veritabanına erişime izin vermek için Kullanıcı eşlemesini değiştirmeniz gerekir.


8

Çoğu zaman bu bir giriş sorunu değil, veritabanının kendisinin oluşturulmasıyla ilgili bir sorundur. Dolayısıyla, veritabanınızı oluştururken bir hata meydana gelirse, ilk etapta oluşturulmayacaktır. Bu durumda, kullanıcı ne olursa olsun oturum açmaya çalışırsanız, oturum açma başarısız olur. Bu genellikle db bağlamının mantıksal olarak yanlış yorumlanması nedeniyle olur.

Siteyi bir tarayıcıda ziyaret edin ve bu hata günlüklerini GERÇEKTEN okuyun; bu, kodunuzla ilgili sorunu belirlemenize yardımcı olabilir (genellikle modelle çakışan mantık sorunları).

Benim durumumda, kod iyi derlendi, aynı giriş problemi, hala yönetim stüdyosunu indirirken, hata günlüğünden geçtim, db bağlam kısıtlamalarımı düzelttim ve site düzgün çalışmaya başladı .... bu arada yönetim stüdyosu hala indiriliyor


6

Benim için veritabanı yaratılmadı ve EF kodu önce onu yaratmalıydı, ancak her zaman bu hatada sona erdi. Aynı bağlantı dizesi aspnet çekirdeği varsayılan web projesinde çalışıyordu. Çözüm eklemek oldu

_dbContext.Database.EnsureCreated()

ilk veritabanı iletişiminden önce (DB tohumlamasından önce).


4

Sorun

Hata kendini buna benzer bir mesaj olarak gösterir:

Oturum açma tarafından istenen "VERİTABANI ADI" veritabanı açılamıyor. Giriş başarısız oldu. XYZ kullanıcısı için oturum açılamadı.

  • Hata genellikle basit bir Visual Studio veya tam bilgisayar yeniden başlatmasıyla düzeltilemez.
  • Hata, görünüşte kilitli bir veritabanı dosyası olarak da bulunabilir.

Çözüm

Çözüm, aşağıdaki adımlarda atılır. Veritabanınızdaki hiçbir veriyi kaybetmeyeceksiniz ve veritabanı dosyanızı silmemelisiniz!

Ön koşul: SQL Server Management Studio (Tam veya Ekspres) yüklemiş olmanız gerekir

  1. SQL Server Management Studio'yu açın
  2. "Sunucuya Bağlan" penceresinde (Dosya-> Bağlan nesne gezgini) aşağıdakileri girin:
    • Sunucu türü: Veritabanı Motoru
    • Sunucu adı: (localdb) \ v11.0
    • Kimlik Doğrulama: [Yerel veritabanınızı oluşturduğunuzda ne kullanırsanız kullanın. Muhtemelen Windows Kimlik Doğrulaması).
  3. "Bağlan" ı tıklayın
  4. Nesne Gezgini'ndeki "Veritabanları" klasörünü genişletin (Görünüm-> Nesne Gezgini, F8)
  5. Veritabanınızı bulun. Veritabanı (.mdf) dosyanızın tam yolu olarak adlandırılmalıdır
    • Veritabanı adının sonunda "(Pending Recovery)" yazdığını görmelisiniz veya veritabanını genişletmeye çalıştığınızda, bunu yapamaz ve size bir hata mesajı verebilir veya vermeyebilir.
    • Sorun bu! Veritabanınız büyük ölçüde çöktü ..
  6. Veritabanına sağ tıklayın ve ardından "Görevler -> Ayır ..." öğesini seçin.
  7. Ayırma penceresinde, listeden veritabanınızı seçin ve "Bağlantıları Bırak" yazan sütunu işaretleyin.
  8. Tamam'ı tıklayın.
  9. Veritabanının veritabanları listesinden kaybolduğunu görmelisiniz. Sorunun şimdi çözülmüş olmalı. Git ve localdb'nizi kullanan uygulamanızı çalıştırın.
  10. Uygulamanızı çalıştırdıktan sonra, veritabanınız veritabanları listesinde yeniden görünecektir - bu doğrudur. Düzgün çalışması gerektiğinden artık "Kurtarma bekleniyor" dememelidir.

Çözümün kaynağı: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed


Sorun şu ki, o DB'yi bile bulamıyorum.
Shimmy Weitzhandler

3

Kullanıcıyı güncellemeye çalıştım ve işe yaradı. Aşağıdaki komuta bakın.

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

Sadece user('ftool')buna göre değiştirin .


3

Ayrıca, DB'nin yanlış adını yazdığınızda da olur

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

Bazen bu sadece aptalca bir hata. Bunu bulmak için yaklaşık 1 saatten fazla zamanım var :( çünkü önce bir sürü zor şeyi deniyorum


2

Bu benim için çalışıyor.

  1. SQL Server >> Güvenlik >> Girişler'e gidin ve NT AUTHORITY \ NETWORK SERVICE'e sağ tıklayın ve Özellikler'i seçin.
  2. Yeni açılan Login Properties ekranında, "User Mapping" sekmesine gidin.
  3. Ardından, "Kullanıcı Eşleştirme" sekmesinde, istenen veri tabanını seçin - özellikle bu hata mesajının görüntülendiği veri tabanını.
  4. Tamam'ı tıklayın.

Bu blogu okuyun.

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


teşekkürler, "NT AUTHORITY \ SYSTEM" kullanmak sorunumu çözdü.
Farzad Karimi

2

Yerel veritabanı .mdf dosyasına bağlanmak için Windows kimlik doğrulamasını kullandım ve yerel sunucum sql server 2014 idi. Sorunum şu bağlantı dizesini kullanarak çözüldü:

string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";

Yerel DB'mi çalışır hale getirmek için bu bölümü "Kullanıcı Örneği = True" kaldırmak zorunda kaldım
Anonim

2

Benim durumumda bu farklı bir konu. Veritabanı tek kullanıcı moduna döndü ve veritabanına ikinci bir bağlantı bu istisnayı gösteriyordu. Bu sorunu çözmek için aşağıdaki adımları izleyin.

  1. Nesne gezgininin ana gibi bir sistem veritabanına yönlendirildiğinden emin olun.
  2. exec sp_who2A'yı yürütün ve 'my_db' veritabanına giden tüm bağlantıları bulun. KILL { session id }Oturum kimliğinin sp_who2 tarafından listelenen SPID olduğu yerde yaparak tüm bağlantıları kesin.
USE MASTER;
EXEC sp_who2
  1. Veritabanını değiştirin
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO

1

Bundan önceki sayılarda bahsedildiğini görmedim, bu yüzden başka bir olasılığı atayım. O olabilir IFItesterişilemiyor ya da sadece yok. Örneğin, her biri kendi veritabanına sahip bir dizi konfigürasyona sahipse, veritabanı adı mevcut konfigürasyon için doğru adla değiştirilmemiş olabilir.


1

Not: Web hizmetini barındırmak için bir Windows hizmeti kullanıyorsanız.

Web hizmetinizin SQL Server'a bağlanmak için doğru Log on hesabını kullandığından emin olmalısınız.

  • Açık hizmetler (Windows hizmetinin yüklendiğini varsayıyorum)
  • Servis ve goto özelliklerine sağ tıklayın.
  • "Oturum Aç" sekmesine tıklayın
  • "Bu hesap" radyo düğmesini tıklayın
  • "Gözat" ı tıklayın
  • Metin Alanına Pc kullanıcı adını girin ve sağdaki "Adı Kontrol Et" Düğmesine tıklayın.
  • Metin Alanındaki metne tıklayın, "Tamam" düğmesine basın
  • giriş şifresini girin ve Başvurun

1

Cyptus'un kullandığım cevabından esinlenerek

_dbContext.Database.CreateIfNotExists();

EF6'da ilk veritabanı iletişiminden önce (DB tohumlamasından önce).


1

Veritabanını sunucunuzda oluşturmadıysanız, aynı oturum açma hatasını alırsınız. Oturum açmadan önce veritabanının mevcut olduğundan emin olun.


1

Asp.net mvc şablonunda sağlanan varsayılan veritabanına yazmaya çalışırken bu sorunla karşılaştım. Bu, veritabanının henüz oluşturulmamış olmasından kaynaklanıyordu.

Veritabanını oluşturmak ve erişilebilir olduğundan emin olmak için şu adımları izleyin:

  1. Visual Studio'da Paket yöneticisi konsolunu açın
  2. "Update-database" komutunu çalıştırın

Bu, veritabanını oluşturacak ve üzerinde gerekli tüm geçişleri çalıştıracaktır.


0

En iyi seçenek, sql kimlik doğrulamasından daha güvenli olduğu için Windows tümleşik kimlik doğrulamasını kullanmak olacaktır. Sql sunucusunda gerekli izinlere sahip yeni bir Windows kullanıcısı oluşturun ve uygulama havuzu güvenlik ayarlarından IIS kullanıcısını değiştirin.


0

Yeni bir giriş oluştururken Kullanıcı Eşleştirme seçeneğini de ayarlamam gerektiğini fark ettim ve bu benim için sorunu çözdü. Umarım bu, kendini burada sıkışmış bulan herkese yardımcı olur!

Düzenleme: Girişin db sahibi olarak ayarlanması bir sonraki sorunu da çözdü


0

Bu db'yi başka bir sql sunucusunda açarsanız (örneğin, sql managment studio (SMS) başlatırsanız ve bu db'yi eklerseniz) ve bu sunucuyu durdurmayı unutursanız bazen bu sorun ortaya çıkabilir. Sonuç olarak - uygulamanız, başka bir sunucu altında bu veritabanına zaten bağlı olan kullanıcıyla bağlantı kurmaya çalışır. Bunu düzeltmek için bu sunucuyu Config ile durdurmayı deneyin. dağıtıcı sql sunucusu.

Kötü İngilizce için özür dilerim. Saygılarımızla, Ignat.


0

Benim durumumda, asp.net uygulaması genellikle veritabanına sorunsuz bağlanabilir. Günlüklerde böyle bir mesaj fark ettim. Ben SQL sunucu günlükleri açmak ve bu mesajı öğrenmek:

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.

Görünüşe göre sunucu yeniden başlatılıyor ve SQL sunucusu ASP.NET uygulamasından biraz daha önce kapanıyordu ve veritabanı sunucunun yeniden başlatılmasından birkaç saniye önce kullanılamıyordu.


0

Oturumu DB sahibi olarak ayarlasanız ve oturum açmayı kullanacak veritabanı için kullanıcı eşlemesini ayarlasanız bile, gerçek DB kullanıcısının (yalnızca oturum açma değil) 'sahip' rolüne sahip olup olmadığını kontrol edin.


0

Benim durumumda, "Sistem" kimliği altında bir Windows Hizmeti çalıştırıyordum. Hata şuydu:

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

Sorun, hatanın çok yanıltıcı olmasıdır. Veritabanına 'MYDOMAINNAME \ HOSTNAME $' girişini ekledikten ve bu oturum açma sysadmin erişimini verdikten ve hedef veritabanımda bu oturum açma için bir kullanıcı ekledikten ve o kullanıcıyı dbowner yaptıktan sonra bile aynı hatayı alıyordum. Görünüşe göre aynısını 'NT AUTHORITY \ SYSTEM' girişi için yapmam gerekiyordu. Bunu yaptıktan sonra sorunsuz bir şekilde giriş yapabildim. Hata mesajının neden "MYDOMAINNAME \ HOSTNAME $" hakkında şikayet ettiğini bilmiyorum. Bu girişi ve ilgili kullanıcıyı sildim ve her şey hala çalışıyor.

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.