2012-06-25 15 views
5

काम करता है मैं एक विंडोज सेवा लिख ​​रहा हूं जिसे कुछ जानकारी पुनर्प्राप्त करने के लिए SQL सर्वर से कनेक्ट करने की आवश्यकता है। हालांकि, सर्वर मुझे कनेक्ट करने की अनुमति नहीं देता है: login failed for user [domain/username]। अजीब बात यह है कि सब कुछ एसएसएमएस के अंदर से पूरी तरह से ठीक काम करता है। मैं लॉग इन कर सकता हूं, डेटाबेस से पूछता हूं, और सबकुछ पूरी तरह से काम करता है। यह केवल विंडोज़ सेवा के माध्यम से है कि यह उस त्रुटि को फेंक रहा है।एसक्यूएल "विंडोज़ सेवा के लिए उपयोगकर्ता [उपयोगकर्ता नाम] त्रुटि में विफल रहा, लेकिन एसएसएमएस लॉगिन

संदर्भ के लिए, कनेक्शन स्ट्रिंग मैं उपयोग कर रहा हूँ है:

Data Source=sqlserveraddresshere;Initial Catalog=databasenamehere;User ID=domain\username;Password=password`

मुझे शक है कि इस से संबंधित है, लेकिन यह मेरे अपने उपयोगकर्ता नाम के बजाय अपने कंप्यूटर नाम हो रही है जब मैं एकीकृत सुरक्षा का उपयोग करने का प्रयास करें। मुझे 99% यकीन है कि ऐसा इसलिए है क्योंकि हमारा एंटी-वायरस और मॉनिटरिंग सॉफ्टवेयर अपने विंडोज सत्र के शीर्ष पर एक प्रशासक उपयोगकर्ता को अपना काम करने के लिए धोखा दे रहा है। किसी भी मामले में, सही उपयोगकर्ता नाम और पासवर्ड दर्ज करना चाहिए, भले ही सही हो?

मैंने एक ही त्रुटि से जुड़े कुछ अन्य प्रश्नों पर एक नज़र डाली, लेकिन वे सभी असंबद्ध थे। एसएसएमएस के माध्यम से जो भी हो सकता है, उससे मैं उन सभी को बता सकता हूं जो कोड के माध्यम से अपने एसक्यूएल सर्वर तक पहुंच सकते हैं। यह सबसे समान प्रश्न है जो मुझे मिल सकता है, हालांकि इससे अधिक मदद नहीं मिली: Can't connect to SQL Server: "Login failed for user "."

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

अद्यतन:

मैं सेवा के लिए खाता परिवर्तित कर दिया और IntegratedSecurity = true पर वापस आए। ऐसा लगता है कि कुछ बदल गया है, क्योंकि अब मुझे थोड़ा अलग त्रुटि मिल रही है:

Cannot open database "mydatabase" requested by the login. The login failed. >Login failed for user 'MYDOMAIN\myUserName'.

+4

क्या आप एसक्यूएल इवेंट लॉग (प्रबंधन स्टूडियो में, सर्वर का विस्तार, प्रबंधन का विस्तार, एसक्यूएल सर्वर लॉग का विस्तार) की जांच कर सकते हैं और असफल लॉगिन के लिए हमें पूर्ण त्रुटि दे सकते हैं? इसमें एक त्रुटि संख्या, गंभीरता और राज्य शामिल होना चाहिए। –

+0

आह एसक्यूएल इवेंट लॉग की जांच करने से मुझे कुछ नया सीखने में मदद मिली: जिस सर्वर को मैं एक्सेस करने का प्रयास कर रहा हूं वह केवल विंडोज प्रमाणीकरण के लिए कॉन्फ़िगर किया गया है। हालांकि, जब भी मैं डब्ल्यूए का उपयोग करता हूं तब भी लॉगिन विफल रहता है क्योंकि यह अभी भी खाता नाम के बजाय मेरा मशीन नाम भेजता है। मैं अब उस मुद्दे को हल करने और हल करने के लिए कुछ और शोध करूंगा। यहां पूर्ण त्रुटि है (अनामित प्रमाण-पत्र के साथ): उपयोगकर्ता के DOMAIN \ MACHINE_NAME $ 'के लिए विफल। कारण: टोकन-आधारित सर्वर एक्सेस सत्यापन बुनियादी ढांचे त्रुटि के साथ विफल रहा। पिछली त्रुटियों के लिए जाँच करें। [ग्राहक: 10.1.0.188] – VVander

+0

क्या आपके द्वारा पोस्ट किए गए संदेश के ऊपर त्रुटि ** गंभीरता ** ** ** ** ** ** मूल्य है? –

उत्तर

6

यह काम कर रहा है! आखिरकार!

सबसे पहले, केविन के सुझाव (मूल प्रश्न के नीचे टिप्पणी) का उपयोग करके, मैंने SQL सर्वर लॉग (प्रबंधन स्टूडियो में, सर्वर का विस्तार, प्रबंधन का विस्तार, SQL सर्वर लॉग का विस्तार) के माध्यम से जांच की। इस तरह मुझे और अधिक लंबी त्रुटि रिपोर्टिंग मिली जिसने मुझे इस मुद्दे का निदान करने में मदद की।

सर्वर को विंडोज प्रमाणीकरण के अलावा किसी और चीज की अनुमति नहीं देता है, इसलिए यही कारण है कि संयुक्त राष्ट्र/पीडब्ल्यू में प्रवेश करने के मेरे प्रयास मैन्युअल रूप से विफल हो गए।

हालांकि, मुझे अभी भी वह समस्या थी जहां सर्वर मेरे उपयोगकर्ता नाम के बजाय उपयोगकर्ता के रूप में मेरा मशीन नाम पास कर रहा था। यह उपयोगकर्ता को बदलने के Duncan's suggestion के साथ तय किया गया था कि सेवा मेरे नाम पर चल रही है (सेवाओं-> गुण-> लॉग ऑन टैब पर राइट क्लिक करें)।

आपकी मदद के लिए सभी को धन्यवाद, बहुत सराहना की।

+0

VVander के उत्तर में जोड़ने के लिए, लॉग ऑन टैब पर, "यह खाता" रेडियो बटन चुनें और ब्राउज़ करें पर क्लिक करें। "अपना नाम" टाइप करें और सिस्टम उपयोगकर्ता नाम प्रमाणीकृत करने के लिए एडी खोज करेगा। फिर अपने सिस्टम पासवर्ड टाइप करें और लागू करें। आपको कुछ संदेश मिलना चाहिए जैसे "सिस्टम इस सेवा के लिए उपयोगकर्ता नाम/पासवर्ड स्वीकार करता है .."। बस। यह काम करेगा। – bluwater2001

0

लॉग इन करने के लिए आप SQL सर्वर से गुजर रहे उपयोगकर्ता नाम क्या है? कनेक्शन स्ट्रिंग के अनुसार, ऐसा लगता है कि आप उपयोगकर्ता के रूप में शाब्दिक "डोमेन \ उपयोगकर्ता नाम" का उपयोग कर रहे हैं। पासवर्ड को शाब्दिक "पासवर्ड" के बजाय सही पासवर्ड के रूप में अपडेट किया जाना चाहिए।

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

+0

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

+0

जब मैं आज रात घर जाता हूं, तो मैं अपनी कनेक्शन स्ट्रिंग पोस्ट करूंगा जिसका उपयोग मैं अपने आवेदन के साथ करता हूं। यह SQL सर्वर प्रमाणीकरण का उपयोग करने के लिए सेट है, लेकिन मुझे लगता है कि इसे किसी भी प्रकार के प्रमाणीकरण के लिए प्रारंभिक मॉडल के रूप में कार्य करना चाहिए। – EastOfJupiter

+0

धन्यवाद, किसी भी मदद की सराहना की है। हालांकि मैं कनेक्शनस्ट्रिंग डॉट कॉम के उदाहरणों के साथ-साथ .NET में एमएस के कनेक्शनस्ट्रिंगबिल्डर वर्ग का उपयोग कर रहा हूं, यदि आपकी स्ट्रिंग अलग है तो इससे मदद मिल सकती है। – VVander

2

आपको उस उपयोगकर्ता खाते की जांच करने की आवश्यकता है, जिस पर सेवा चल रही है। चीजों की आवाज़ से यह Local System के रूप में चल रहा है जो लॉगिन के माध्यम से मशीन नाम को आजमाएगा और पास करेगा।

इसे कम से कम विशेषाधिकार प्राप्त डोमेन उपयोगकर्ता (या परीक्षण के लिए, आप अपने खाते का उपयोग कर सकते हैं) में बदलने का प्रयास करें और फिर उस उपयोगकर्ता को SQL सर्वर में लॉगिन दें। यह ट्रिक काम आना चाहिए।

+0

ठीक है मैंने सेवा के लिए खाता बदल दिया है और वापस एकीकृत एकीकृत सुरक्षा = सत्य पर स्विच किया है। ऐसा लगता है कि कुछ बदल गया है, क्योंकि अब मुझे थोड़ा अलग त्रुटि मिल रही है: लॉगिन द्वारा अनुरोध किया गया "mydatabase" डेटाबेस नहीं खोल सकता है। लॉगिन विफल रहा। लॉग इन उपयोगकर्ता 'MYDOMAIN \ myUserName' के लिए विफल रहा। मैं इसे मूल प्रश्न में भी जोड़ दूंगा। – VVander

+0

आपको शायद लॉगिन के लिए डेटाबेस उपयोगकर्ता बनाने की आवश्यकता है। एसएसएमएस में ऑब्जेक्ट एक्सप्लोरर में लॉगिन पर राइट क्लिक करें और बाएं हाथ फलक में उपयोगकर्ता मैपिंग की जांच करें। वैकल्पिक रूप से आप डेटाबेस –

+0

के खिलाफ लॉग इन [लॉगिन] के लिए उपयोगकर्ता [blah] चला सकते हैं, अंत में यह पता चला है कि मैंने डेटाबेस नाम गलत दर्ज किया है और यही कारण है कि आपका सुझाव पहले काम नहीं करता था और मुझे वह त्रुटि मिली। हालांकि यह दूसरों की मदद कर सकता है। – VVander

संबंधित मुद्दे