लॉगिन द्वारा अनुरोधित डेटाबेस "परीक्षण" नहीं खोल सकता। लॉगिन विफल रहा। उपयोगकर्ता 'xyz \ ASPNET' के लिए लॉगिन विफल


99

मैंने एक वेब सेवा बनाई है जो कुछ डेटा को db में सहेज रही है। लेकिन मुझे यह त्रुटि मिल रही है:

लॉगिन द्वारा अनुरोधित डेटाबेस "परीक्षण" नहीं खोल सकता। लॉगिन विफल रहा। उपयोगकर्ता 'xyz \ ASPNET' के लिए लॉगिन विफल हुआ।

मेरा कनेक्शन स्ट्रिंग है

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

इससे पहले कि हमें इसका निदान करने में मदद मिल सके, हमें पूरी जानकारी चाहिए।
sblom

मेरे पास यह मुद्दा था और विजुअल स्टूडियो को बंद कर दिया और इसे फिर से खोल दिया और इसने काम करना शुरू कर दिया ..
पेड़_आरे_ग्रेचर

जवाबों:


47

खैर, त्रुटि बहुत स्पष्ट है, नहीं? आप उपयोगकर्ता "xyz / ASPNET" के साथ अपने SQL सर्वर से कनेक्ट करने का प्रयास कर रहे हैं - यह वह खाता है जिसके तहत आपका ASP.NET ऐप चल रहा है।

इस खाते को SQL सर्वर से कनेक्ट करने की अनुमति नहीं है - या तो उस खाते के लिए SQL सर्वर पर एक लॉगिन बनाएं, या फिर अपने कनेक्शन स्ट्रिंग में किसी अन्य मान्य SQL सर्वर खाते को निर्दिष्ट करें।

क्या आप हमें अपना कनेक्शन स्ट्रिंग दिखा सकते हैं (अपने मूल प्रश्न को अपडेट करके)?

अद्यतन: ठीक है, आप एकीकृत विंडोज प्रमाणीकरण का उपयोग कर रहे हैं -> आपको अपने SQL सर्वर पर "xyz \ ASPNET" के लिए एक SQL सर्वर लॉगिन बनाने की आवश्यकता है - या अपने कनेक्शन स्ट्रिंग को कुछ इस तरह से बदलें:

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

यदि आपके पास अपने डेटाबेस में "शीर्ष $ गुप्त" के पासवर्ड के साथ एक उपयोगकर्ता "xyz" है।


11
"SQL सर्वर से कनेक्ट करने की अनुमति नहीं है", लेकिन डेटाबेस "परीक्षण" का उपयोग करने की अनुमति नहीं है।
wrar

@ वॉयर: सच - लेकिन मुझे लगता है कि मौका उपयोगकर्ता लॉगिन सर्वर पर मौजूद है, लेकिन इस विशेष डेटाबेस में सक्षम नहीं है, शायद पतला है (कम से कम मुझे लगता है)
marc_s

"डेटाबेस = IFItest" बनाम "परीक्षण" भी देखें, हालांकि यह एक गलत धारणा हो सकती है।
wrar

2
एक बिंदु जिसे आपने कभी नहीं देखा, वह यह है कि डीबी नाम गलत भी हो सकता है। मुझे अपने Azure SQL सर्वर से एक अपवाद दिखने वाला एक बिट्टो संदेश दिखाई दे रहा था, और मैंने अपने ASP.NET प्रोजेक्ट में C # कोड में एक कनेक्शन में अपने DB के लिए गलत नाम दिया था।
रॉन 16

रॉन, यह मेरा मुद्दा था। मैंने वर्तनी की दोगुनी जाँच भी की थी लेकिन तब भी चूक गया।
डेरेल लॉयड हार्वे

32
  • या तो: "xyz \ ASPNET" लॉगिन नहीं है (sys.server_principals में)
  • या: "xyz \ ASPNET" सेट अप किया गया है, लेकिन डेटाबेस टेस्ट (sys.database_principals) में उपयोगकर्ता के लिए मैप नहीं किया गया है

मैं दूसरे विकल्प के लिए जाऊंगा: त्रुटि संदेश का अर्थ है कि डिफ़ॉल्ट डेटाबेस या तो इसमें नहीं है या इसमें कोई अधिकार नहीं है, बल्कि लॉगिन के रूप में सेट नहीं किया गया है।

यह जाँचने के लिए कि क्या यह एक लॉगिन के रूप में स्थापित है

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

अगर NULL

CREATE LOGIN [xyz\ASPNET] FROM WINDOWS

यदि NULL नहीं है

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

अगर NULL

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

1
यह समस्या का पता लगाने और हल करने के लिए एक साधारण वर्कफ़्लो है!
मेज़न अल सेनिह

12

मुझे यह समस्या थी और मेरे लिए इसका हल क्या था:

  • IIS में एप्लिकेशन पूल पर जाएं
  • मेरे प्रोजेक्ट एप्लिकेशन पूल पर राइट क्लिक करें
  • प्रक्रिया मॉडल अनुभाग में पहचान खोलें
  • कस्टम खाता विकल्प चुनें
  • अपना पीसी उपयोगकर्ता नाम और पासवर्ड दर्ज करें।

8

लॉगिन समस्या के लिए सबसे अच्छा समाधान sqlServer में एक लॉगिन उपयोगकर्ता बनाना है। यहां Windows प्रमाणीकरण (SQL सर्वर प्रबंधन स्टूडियो) का उपयोग करने वाले SQL सर्वर लॉगिन बनाने के चरण दिए गए हैं:

  1. SQL सर्वर प्रबंधन स्टूडियो में, ऑब्जेक्ट एक्सप्लोरर खोलें और सर्वर इंस्टेंस के फ़ोल्डर का विस्तार करें जिसमें नया लॉगिन बनाएं।
  2. सुरक्षा फ़ोल्डर पर राइट-क्लिक करें, नया इंगित करें और फिर लॉगिन पर क्लिक करें।
  3. सामान्य पृष्ठ पर, लॉगिन नाम बॉक्स में एक विंडोज उपयोगकर्ता का नाम दर्ज करें।
  4. Windows प्रमाणीकरण का चयन करें।
  5. ओके पर क्लिक करें।

उदाहरण के लिए, यदि उपयोगकर्ता का नाम है xyz\ASPNET, तो इस नाम को लॉगिन नाम बॉक्स में दर्ज करें।

इसके अलावा आपको उस डेटाबेस तक पहुँचने के लिए उपयोगकर्ता मैपिंग को बदलना होगा जिसे आप एक्सेस करना चाहते हैं।


8

ज्यादातर बार, यह एक लॉगिन मुद्दा नहीं है, बल्कि डेटाबेस बनाने के साथ एक समस्या है। इसलिए यदि आपके डेटाबेस को बनाने में कोई त्रुटि है, तो यह पहली बार में नहीं बनाया जाएगा। जिस स्थिति में यदि आपने उपयोगकर्ता की परवाह किए बिना लॉग इन करने की कोशिश की, तो लॉगिन विफल हो जाएगा। यह आमतौर पर DB संदर्भ की तार्किक गलत व्याख्या के कारण होता है।

किसी ब्राउज़र में साइट पर जाएँ और उन त्रुटि लॉग को पढ़ें, इससे आपको कोड के साथ समस्या को सुलझाने में मदद मिल सकती है (आमतौर पर मॉडल के साथ तर्क की समस्याओं का सामना करना पड़ता है)।

मेरे मामले में, कोड ने ठीक, समान लॉगिन समस्या संकलित की, जबकि मैं अभी भी प्रबंधन स्टूडियो डाउनलोड कर रहा था, मैं त्रुटि लॉग के माध्यम से चला गया, मेरे db संदर्भ बाधाओं और साइट ठीक चलने लगी .... इस बीच प्रबंधन स्टूडियो अभी भी डाउनलोड कर रहा है


6

मेरे लिए डेटाबेस नहीं बनाया गया था और ईएफ कोड को पहले बनाया जाना चाहिए था लेकिन इस त्रुटि में हमेशा एंडेट होता है। वही कनेक्शन स्ट्रिंग एस्पनेट कोर डिफॉल्ट वेब प्रोजेक्ट में काम कर रहा था। समाधान जोड़ना था

_dbContext.Database.EnsureCreated()

पहले डेटाबेस संपर्क से पहले (DB बोने से पहले)।


4

समस्या

त्रुटि स्वयं को इसके समान संदेश के रूप में प्रस्तुत करती है:

लॉगिन द्वारा अनुरोधित डेटाबेस "DATABASE NAME" नहीं खोल सकता। लॉगिन विफल रहा। उपयोगकर्ता XYZ के लिए लॉगिन विफल हुआ।

  • त्रुटि को आमतौर पर एक साधारण विज़ुअल स्टूडियो या पूर्ण-कंप्यूटर पुनरारंभ द्वारा ठीक नहीं किया जा सकता है।
  • त्रुटि भी प्रतीत होता है बंद डेटाबेस फ़ाइल के रूप में पाया जा सकता है।

जोड़

समाधान निम्नलिखित चरणों में रखा गया है। आप अपने डेटाबेस में कोई डेटा नहीं खोएंगे और आपको अपनी डेटाबेस फाइल को डिलीट नहीं करना चाहिए!

पूर्व-अपेक्षित: आपने SQL सर्वर प्रबंधन स्टूडियो (पूर्ण या एक्सप्रेस) स्थापित किया होगा

  1. SQL सर्वर प्रबंधन स्टूडियो खोलें
  2. "सर्वर से कनेक्ट करें" विंडो में (फ़ाइल-> ऑब्जेक्ट ऑब्जेक्ट एक्सप्लोरर कनेक्ट करें) निम्नलिखित दर्ज करें:
    • सर्वर प्रकार: डेटाबेस इंजन
    • सर्वर नाम: (localdb) \ v11.0
    • प्रमाणीकरण: [जब आप अपना स्थानीय डीबी बनाते हैं तो आप जो भी इस्तेमाल करते हैं। शायद विंडोज प्रमाणीकरण)।
  3. "कनेक्ट" पर क्लिक करें
  4. ऑब्जेक्ट एक्सप्लोरर में "डेटाबेस" फ़ोल्डर का विस्तार करें (देखें-> ऑब्जेक्ट एक्सप्लोरर, एफ 8)
  5. अपने डेटाबेस का पता लगाएं। इसे आपके डेटाबेस (.mdf) फ़ाइल के पूर्ण पथ के रूप में नामित किया जाना चाहिए
    • आपको यह देखना चाहिए कि डेटाबेस के नाम के अंत में "(लंबित रिकवरी)" कहा गया है या जब आप डेटाबेस का विस्तार करने का प्रयास करते हैं तो यह आपको सक्षम नहीं करेगा और आपको एक त्रुटि संदेश दे भी सकता है और नहीं भी।
    • यह मुद्दा! आपका डेटाबेस अनिवार्य रूप से क्रैश हो गया है।
  6. डेटाबेस पर राइट क्लिक करें फिर "कार्य -> ​​डिटैच ..." चुनें।
  7. अलग विंडो में, सूची में अपने डेटाबेस का चयन करें और "ड्रॉप कनेक्शन" कहने वाले कॉलम की जांच करें
  8. ओके पर क्लिक करें।
  9. आपको डेटाबेस को डेटाबेस की सूची से गायब देखना चाहिए। आपकी समस्या अब ठीक होनी चाहिए। जाओ और अपने स्थानीयकरण का उपयोग करने वाले अपने एप्लिकेशन को चलाएं।
  10. आपके एप्लिकेशन को चलाने के बाद, आपका डेटाबेस डेटाबेस की सूची में फिर से दिखाई देगा - यह सही है। इसे "लंबित पुनर्प्राप्ति" नहीं कहना चाहिए क्योंकि इसे ठीक से काम करना चाहिए।

समाधान का स्रोत: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed


समस्या यह है कि मुझे यह भी नहीं मिल रहा है कि डी.बी.
शिम्मी वेइटहैंडलर

3

यह तब भी होता है जब आप डीबी का गलत नाम टाइप करते हैं

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

कुछ समय के लिए, यह सिर्फ एक बेवकूफ गलती है। मुझे यह पता लगाने में लगभग 1 घंटे से अधिक समय लगता है :( क्योंकि मैं पहले मुश्किल चीज़ों का एक बहुत कोशिश करता हूं


2

मैंने उपयोगकर्ता को अपडेट करने की कोशिश की, और यह काम किया। नीचे कमांड देखें।

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

उसी के user('ftool')अनुसार बदलें ।


2

यह मेरे लिए काम करता है।

  1. SQL सर्वर >> सुरक्षा >> लॉगिन पर जाएं और NT AUTHORITY \ NETWORK सेवा पर राइट क्लिक करें और गुण चुनें
  2. लॉगिन गुणों की नई खुली स्क्रीन में, "उपयोगकर्ता मानचित्रण" टैब पर जाएं।
  3. फिर, "उपयोगकर्ता मानचित्रण" टैब पर, वांछित डेटाबेस चुनें - विशेष रूप से वह डेटाबेस जिसके लिए यह त्रुटि संदेश प्रदर्शित होता है।
  4. ओके पर क्लिक करें।

इस ब्लॉग को पढ़ें।

http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requested-by-the-login-the-login-failed-login-failed-for- उपयोगकर्ता के NT-authoritynetwork-सेवा /


धन्यवाद, "NT AUTHORITY \ SYSTEM" का उपयोग करके मेरी समस्या हल हो गई।
फ़रज़ाद करीमी

2

मैंने स्थानीय डेटाबेस .mdf फ़ाइल से कनेक्ट करने के लिए Windows प्रमाणीकरण का उपयोग किया था और मेरा स्थानीय सर्वर sql सर्वर 2014 था। इस कनेक्शन स्ट्रिंग का उपयोग करके मेरी समस्या हल हो गई:

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

मुझे अपने स्थानीय डीबी को काम करने के लिए इस भाग को "यूजर इंस्टेंस = ट्रू" को हटाना पड़ा
अनाम

2

मेरे मामले में यह एक अलग मुद्दा है। डेटाबेस एकल उपयोगकर्ता मोड में बदल गया और डेटाबेस के लिए दूसरा कनेक्शन इस अपवाद को दिखा रहा था। इस समस्या को हल करने के लिए निम्न चरणों का पालन करें।

  1. सुनिश्चित करें कि ऑब्जेक्ट एक्सप्लोरर मास्टर जैसे सिस्टम डेटाबेस को इंगित किया गया है।
  2. निष्पादित करें exec sp_who2और डेटाबेस 'my_db' के सभी कनेक्शन खोजें। ऐसा करने से सभी कनेक्शनों को मारने KILL { session id }जहां सत्र id sp_who2 द्वारा सूचीबद्ध SPID है।
USE MASTER;
EXEC sp_who2
  1. डेटाबेस को बदल दें
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO

1

मैंने पिछले मुद्दों में इसका उल्लेख नहीं देखा है, इसलिए मुझे एक और संभावना निकालने की अनुमति दें। ऐसा हो सकता है कि IFItestयह उपलब्ध नहीं है या बस मौजूद नहीं है। उदाहरण के लिए, यदि किसी के पास अपने स्वयं के डेटाबेस के साथ कई कॉन्फ़िगरेशन हैं, तो यह हो सकता है कि डेटाबेस का नाम वर्तमान कॉन्फ़िगरेशन के लिए सही एक में नहीं बदला गया था।


1

एनबी: यदि वेब सेवा को होस्ट करने के लिए विंडोज़ सेवा का उपयोग किया जाता है।

आपको यह सुनिश्चित करना होगा कि SQL सर्वर से कनेक्ट करने के लिए आपका webservice सही लॉग ऑन अकाउंट का उपयोग कर रहा है।

  • खुली सेवाएँ (मुझे लगता है कि विंडोज़ सेवा स्थापित हो गई है)
  • सेवा और गोटो गुण पर राइट क्लिक करें।
  • "लॉग ऑन" टैब पर क्लिक करें
  • "यह खाता" रेडियो बटन पर क्लिक करें
  • "ब्राउज़ करें" पर क्लिक करें
  • टेक्स्ट फ़ील्ड में Pc उपयोगकर्ता नाम दर्ज करें और दाईं ओर "चेक नाम" बटन पर क्लिक करें।
  • टेक्स्ट फ़ील्ड में टेक्स्ट पर क्लिक करें, "ओके" बटन दबाएं
  • लॉगिन पासवर्ड डालें और अप्लाई करें

1

साइप्टस के उत्तर से प्रेरित होकर मैंने इसका उपयोग किया

_dbContext.Database.CreateIfNotExists();

पहले डेटाबेस संपर्क से पहले EF6 पर (DB बोने से पहले)।


1

यदि आपने अपने सर्वर में डेटाबेस नहीं बनाया है तो आपको वही लॉगिन त्रुटि मिलेगी। सुनिश्चित करें कि लॉगिन करने से पहले डेटाबेस मौजूद है।


1

जब मैं asp.net mvc टेम्पलेट में प्रदान किए गए डिफ़ॉल्ट डेटाबेस में लिखने का प्रयास कर रहा था तो मैं इस मुद्दे पर भागा। यह इस तथ्य के कारण था कि डेटाबेस अभी तक नहीं बनाया गया था।

डेटाबेस बनाने के लिए और सुनिश्चित करें कि यह सुलभ है इन चरणों का पालन करें:

  1. Visual Studio में पैकेज प्रबंधक कंसोल खोलें
  2. कमांड "अपडेट-डेटाबेस" चलाएं

यह डेटाबेस को उस पर सभी आवश्यक माइग्रेशन एक रन बनाएगा।


0

सबसे अच्छा विकल्प विंडोज एकीकृत प्रमाणीकरण का उपयोग करना होगा क्योंकि यह एसक्यूएल प्रमाणीकरण की तुलना में अधिक सुरक्षित है। आवश्यक अनुमतियों के साथ sql सर्वर में एक नया विंडोज़ उपयोगकर्ता बनाएं और एप्लिकेशन पूल सुरक्षा सेटिंग्स में IIS उपयोगकर्ता को बदलें।


0

मैंने पाया कि मुझे नया लॉगिन बनाते समय UserMapping विकल्प भी सेट करना पड़ा और इससे मेरे लिए समस्या हल हो गई। आशा है कि किसी को भी मदद करता है कि खुद को यहाँ फंस गया!

संपादित करें: db स्वामी के रूप में लॉगिन सेट करने से अगली समस्या भी हल हो गई


0

यदि आप इस db को किसी अन्य sql सर्वर में खोलते हैं तो कुछ बार यह समस्या आ सकती है (उदाहरण के लिए, आप sql प्रबंध स्टूडियो (SMS) लॉन्च करें और इस db को जोड़ें), और इस सर्वर को बंद करना न भूलें। परिणाम के रूप में - आप ऐप को किसी अन्य सर्वर के तहत इस db में पहले से जुड़े उपयोगकर्ता से कनेक्ट करने का प्रयास करते हैं। इसे ठीक करने के लिए, कॉन्फ़िगर द्वारा इस सर्वर को रोकने का प्रयास करें। डिस्पैचर sql सर्वर।

खराब अंग्रेजी के बारे में मेरी माफी। तरह का संबंध है, इग्नाट।


0

मेरे मामले में asp.net एप्लिकेशन आमतौर पर बिना किसी समस्या के डेटाबेस से जुड़ सकता है। मैंने लॉग में इस तरह के संदेश को देखा। मैं SQL सर्वर लॉग ऑन करता हूं और मुझे यह संदेश पता चलता है:

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.

तो ऐसा लगता है कि सर्वर पुनः आरंभ हो रहा था और यह कि SQL Server whad कुछ समय पहले ASP.NET एप्लीकेशन को बंद कर रहा था और सर्वर सर्वर पुनरारंभ होने से पहले कुछ सेकंड के लिए उपलब्ध नहीं था।


0

यहां तक ​​कि अगर आपने लॉगिन को DB के मालिक के रूप में सेट किया है और डेटाबेस के लिए उपयोगकर्ता मैपिंग सेट करें जो लॉगिन का उपयोग करेगा, तो जांचें कि वास्तविक DB उपयोगकर्ता (न कि केवल लॉगिन) की 'स्वामी' की भूमिका है।


0

मेरे मामले में, मैं "सिस्टम" पहचान के तहत एक विंडोज सेवा चला रहा था। त्रुटि थी:

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

समस्या यह है कि त्रुटि बहुत भ्रामक है। डेटाबेस में 'MYDOMAINNAME \ HOSTNAME $' लॉगिन करने के बाद भी, और मैंने इस लॉगिन sysadmin को अनुमति दी और अपने लक्ष्य डेटाबेस पर उस लॉगिन के लिए एक उपयोगकर्ता जोड़ा, और उस उपयोगकर्ता को dbowner बनाया, मुझे अभी भी वही त्रुटि मिल रही थी। जाहिर तौर पर मुझे 'NT AUTHORITY \ SYSTEM' लॉगिन के लिए भी ऐसा ही करने की आवश्यकता थी। मैंने ऐसा करने के बाद, मैं एक समस्या के बिना लॉगिन करने में सक्षम था। मुझे नहीं पता कि त्रुटि संदेश 'MYDOMAINNAME \ HOSTNAME $' के बारे में शिकायत क्यों करता है। मैंने उस लॉगिन और संबंधित उपयोगकर्ता को हटा दिया और सब कुछ अभी भी काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.