एज़्योर SQL डेटाबेस "लॉगिन उपयोगकर्ता के लिए विफल" आवेदन में है, लेकिन SSMS में ठीक काम करता है


14

मैं Azure SQL डेटाबेस V12 पर मौजूद डेटाबेस उपयोगकर्ताओं की सुविधा को आज़माना चाहता था , लेकिन मुझे यह प्रमाणित करने में समस्या हो रही है कि यह मुझे अजीब लगता है।

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

CREATE USER classifier WITH PASSWORD='thepassword'

मैंने इस उपयोगकर्ता को डेटा लेखक और पाठक भूमिकाओं में भी जोड़ा:

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

इसके बाद, मैं SSMS से इन क्रेडेंशियल्स के साथ डेटाबेस से जुड़ने में सक्षम हूं:

यहाँ छवि विवरण दर्ज करें

लेकिन यह वह जगह है जहां चीजें गड़बड़ हो जाती हैं: मैंने कई अलग-अलग कनेक्शन स्ट्रिंग झुकाव की कोशिश की है और मैं जिस वेब ऐप पर काम कर रहा हूं, उससे जुड़ा नहीं हो सकता। यह Azure वातावरण में काम नहीं करता था, इसलिए मैं Azure डेटाबेस के कनेक्शन स्ट्रिंग के साथ स्थानीयहोस्ट पर चल रहा हूं, और यह बस कनेक्ट नहीं होगा। यहाँ इस समय मैं उपयोग कर रहा हूँ कनेक्शन स्ट्रिंग:

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

मैंने उपयोगकर्ता के लिए पासवर्ड (एसएसएमएस के माध्यम से) रीसेट करने की कोशिश की है और फिर कनेक्शन स्ट्रिंग को अपडेट किया है; मैंने पासवर्ड को इस कनेक्शन स्ट्रिंग के ठीक बाहर कॉपी करके और SSMS में कनेक्ट संवाद में यह सुनिश्चित करने के लिए कि मैंने वहां किसी प्रकार का टाइपो नहीं किया था, को डबल-चेक किया।

मैंने Azure db सर्वर में ऑडिटिंग को सक्षम करने के लिए कुछ विवरण प्राप्त करने की उम्मीद की, क्योंकि यह विफल हो रहा है, लेकिन मुझे जो भी मिल रहा है, वह है:

Err 18456, Level 14, State 1, Sever SQL Azure, Line 1Login उपयोगकर्ता 'क्लासिफायरियर' के लिए विफल

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

SSMS (और LinqPad और Visual Studio Server Explorer, संयोगवश) सफल होने पर एप्लिकेशन विफल होने का क्या कारण हो सकता है?

जवाबों:


15

हमने पाया कि निहित डेटाबेस / निहित उपयोगकर्ताओं के साथ आपको निर्दिष्ट करना होगा:

GRANT CONNECT TO [YOUR_USER]

अन्यथा CONNECTडिफ़ॉल्ट रूप से निरस्त किया जा रहा है। एक बार जब हमने उपरोक्त परिवर्तन किया, तो हम डेटाबेस तक पहुँच सकते हैं।


हमारे पास एक मौजूदा खाता था जो काम कर रहा था और फिर काम करना बंद कर दिया। मुझे इसे फिर से कनेक्ट करने के लिए अनुदान देना पड़ा।
शेन कोर्ट्रेल

Azure पर, मुझे त्रुटि मिल रही है, Cannot find the user 'myuser', because it does not exist or you do not have permission.हालांकि उपयोगकर्ता सुरक्षा> लॉगिन के अंतर्गत मौजूद है, लेकिन MyDatabse> सुरक्षा> उपयोगकर्ता नहीं। मैंने कोशिश की, CREATE USER [myuser] FOR LOGIN [myuser] WITH DEFAULT_SCHEMA=[mydb] GOलेकिन त्रुटि हुईThe login already has an account under a different user name.
कोरीम

मुझे भी ऐसी ही समस्या का समाधान करना पड़ा था। देव वातावरण पर सब कुछ sql Azure से जुड़ने का काम करता है, लेकिन एक बार प्रकाशित होने के बाद, यह उस त्रुटि को फेंक देता है। हालाँकि, मैं कमांड नहीं चला सकता या उपयोगकर्ता नहीं बना सकता, किसी को अलग करने की कोशिश कर रहा है?
रिकर सिल्वा

@dezso मैं इसी तरह के मुद्दे का सामना कर रहा हूं। मेरा ADO.NET और EF (DBContext) कोड स्थानीय मशीन में ठीक काम करता है (Azure में प्रयास नहीं किया गया है) लेकिन IdentityDBConext का उपयोग करके कार्यान्वित EF कोड विफल हो जाता है। मुझे यकीन नहीं है कि क्या गलत है या क्या IdentityDBConext की सुविधाओं को सर्वर तक पहुंच की आवश्यकता है। यहाँ मेरा मूल प्रश्न है stackoverflow.com/questions/40260720/…
हिरेन देसाई

5

एक नए निहित उपयोगकर्ता के माध्यम से एक एज़्योर डेटाबेस से कनेक्ट करने के लिए हमारे एपीआई को स्विच करते समय, हमें शामिल करने के लिए अपना कनेक्शन स्ट्रिंग बदलना पड़ा:

Persist Security Info=True;

हालांकि मुझे यह समझ में नहीं आता है कि इस बदलाव की आवश्यकता क्यों थी, मैं भविष्य में किसी और की मदद करने की स्थिति में यहां पोस्ट करना चाहता था।

हम मूल रूप से इस सवाल से यह कोशिश करने आए थे ।


2

मेरी समस्या अलग थी, लेकिन संबंधित: मैं एक निहित उपयोगकर्ता के साथ SQL सर्वर प्रबंधन स्टूडियो (SSMS) का उपयोग करके एक Azure SQL डेटाबेस से कनेक्ट करने का प्रयास कर रहा था । मुझे SSMS में "उपयोगकर्ता के लिए लॉगिन विफल" संदेश मिल रहा था।

समाधान: क्वेरी विंडो के लिए SSMS कनेक्शन विकल्पों में मैंने "डेटाबेस से कनेक्ट करें" को उस डेटाबेस के नाम पर सेट किया था, जिससे मैं कनेक्ट करने का प्रयास कर रहा था।

स्पष्टीकरण: दृष्टिहीनता में कारण स्पष्ट था: निहित उपयोगकर्ताओं को केवल उस डेटाबेस (एस) से कनेक्ट करने की अनुमति है जिसमें वे बनाए गए थे।


नीचे वोट की व्याख्या करने के लिए देखभाल?
विंस हॉर्स्ट

1
मैं नहीं था, लेकिन शायद इसलिए क्योंकि आपका जवाब सवाल के विपरीत है। हालांकि अभी भी उपयोगी है, और उस SSMS के खराब डिज़ाइन के लिए धन्यवाद एक आसान गलती है!
सिमोन_विवर

0

यह तब हो सकता है जब आपके पासवर्ड में एक पॉवरशेल कमांड हो, जिसमें कनेक्शन स्ट्रिंग हो $। आप एकल उद्धरण के साथ कनेक्शन स्ट्रिंग को संलग्न करके इसे प्राप्त कर सकते हैं - या पहली जगह में कनेक्शन स्ट्रिंग में अपना पासवर्ड संग्रहीत नहीं करके; ;-)

उदाहरण के लिए। मैं Scaffold-DbContextकमान के साथ इस में भाग गया

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

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