c# - उपयोगकर्ता 'आईआईएस APPPOOL \ ASP.NET v4.0' के लिए लॉगिन विफल




iis-7 web-config (18)

मेरे पास एक वेब प्रोजेक्ट है (सी # एएसपी.नेट, ईएफ 4, एमएस एसक्यूएल 2008 और आईआईएस 7) और मुझे इसे आईआईएस 7 में स्थानीय रूप से माइग्रेट करने की आवश्यकता है (फिलहाल कैसिनि के साथ ठीक काम करता है)।

स्थानीय रूप से आईआईएस में मेरे पास मेरी तैनाती के साथ मेरी Default Web Site । मेरी तैनाती और Default Web Site दोनों पूल एएसपी.NET v4.0 (सेटिंग्स के लिए छवि देखें) पूल लक्ष्य फ्रेमवर्क 4 पर मेरी वेब प्रोजेक्ट के रूप में हैं। साइट पर जाने पर, ब्राउज़र पृष्ठ नहीं दिखाता है और ब्राउज़र को इसके बजाय पृष्ठ डाउनलोड करने की अनुमति देता है।

मेरे पास स्थानीय रूप से आईआईएस पर चल रही अन्य परियोजनाएं हैं और वे बिना किसी समस्या के काम करते हैं (लेकिन वे इकाई फ्रेमवर्क का उपयोग नहीं करते हैं)।

इवेंट लॉगर का उपयोग करके मैं नीचे त्रुटियों को देखता हूं:

Exception information: 
    Exception type: EntityException 
    Exception message: The underlying provider failed on Open.
   at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)


    Login failed for user 'IIS APPPOOL\ASP.NET v4.0'.
       at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
       at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
       at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
       at System.Data.SqlClient.SqlConnection.Open()
       at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)

संबंधित सवाल

अद्यतन: आप इस प्रश्न पर संसाधनों में पढ़ सकते हैं कि एमएस एसक्यूएल 2008 पर अनुमतियां मैन्युअल रूप से उनके जवाब में समझाने के लिए अनुमति दी जानी चाहिए। आईआईएस 7.5 और एमएस एसक्यूएल 2008 आर 2 का उपयोग करके, मैन्युअल रूप से अनुमति सेट करना आवश्यक नहीं होना चाहिए।


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


अगर आपके पास अपनी web.config में आपकी कनेक्शन स्ट्रिंग जोड़ा गया है, तो सुनिश्चित करें कि "एकीकृत सुरक्षा = झूठी;" इसलिए यह web.config में निर्दिष्ट आईडी और पासवर्ड का उपयोग करेगा।

<connectionStrings>
    <add providerName="System.Data.SqlClient" name="MyDbContext" connectionString="Data Source=localhost,1433;Initial Catalog=MyDatabase;user id=MyUserName;Password=MyPassword;Trusted_Connection=true;Integrated Security=false;" />
</connectionStrings>

आप IIS7 -> अनुप्रयोग पूल -> उन्नत सेटिंग्स से ApplicationPoolIdentity बदल सकते हैं।

ApplicationPoolIdentity के तहत आपको स्थानीय सिस्टम मिल जाएगा। यह आपके एप्लिकेशन को NT AUTHORITY\SYSTEM तहत चलाएगा, जो डिफ़ॉल्ट रूप से डेटाबेस के लिए एक मौजूदा लॉगिन है।

संपादित करें: इस सुझाव को लागू करने से पहले आपको सुरक्षा प्रभावों को ध्यान में रखना और समझना चाहिए।


इस एसक्यूएल स्क्रिप्ट को चलाएं

IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool')
BEGIN
    CREATE LOGIN [IIS APPPOOL\DefaultAppPool] 
      FROM WINDOWS WITH DEFAULT_DATABASE=[master], 
      DEFAULT_LANGUAGE=[us_english]
END
GO
CREATE USER [WebDatabaseUser] 
  FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GO
EXEC sp_addrolemember 'db_owner', 'WebDatabaseUser'
GO

एकीकृत सुरक्षा का उपयोग न करें। User Id=yourUser; pwd=yourPwd; प्रयोग करें User Id=yourUser; pwd=yourPwd; User Id=yourUser; pwd=yourPwd;

यह समस्या हल करता है।


ऐसा लगता है कि यह SQL सर्वर से कनेक्शन खोलने का प्रयास करने में विफल रहा है।

आपको IIS APPPOOL\ASP.NET v4.0 लिए SQL सर्वर में लॉगिन जोड़ने और डेटाबेस को अनुमति प्रदान करने की आवश्यकता है।

एसएसएमएस में, सर्वर के तहत, सुरक्षा का विस्तार करें, फिर लॉग इन राइट क्लिक करें और "नया लॉगिन ..." चुनें।

नए लॉगिन संवाद में, ऐप पूल को लॉगिन नाम के रूप में दर्ज करें और "ठीक" पर क्लिक करें।

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


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

आईआईएस ने सुरक्षा में सुधार के लिए ऐप पूल पहचान की शुरुआत की। आप डिफ़ॉल्ट ऐप पूल पहचान के तहत वेबसाइट चला सकते हैं, या अपने नाम के साथ एक नया ऐप पूल बना सकते हैं, या अपने खाते के साथ एक नया ऐप पूल बना सकते हैं जो उपयोगकर्ता खाते (आमतौर पर डोमेन खाता) के अंतर्गत चलता है।

नेटवर्क की स्थितियों में (जो Azure में नहीं हैं) आप एक सक्रिय निर्देशिका डोमेन उपयोगकर्ता खाते के तहत एक नया ऐप पूल चला सकते हैं; मैं इसे मशीन खाते पर पसंद करता हूं। ऐसा करने से डाटाबेस समेत नेटवर्क संसाधनों के लिए दानेदार सुरक्षा और दानेदार पहुंच मिलती है। प्रत्येक वेबसाइट एक अलग ऐप पूल पर चलती है (और उनमें से प्रत्येक अपने डोमेन उपयोगकर्ता खाते के अंतर्गत चलता है)।

सभी कनेक्शन स्ट्रिंग्स में विंडोज इंटीग्रेटेड सिक्योरिटी का उपयोग करना जारी रखें। SQL सर्वर में, डोमेन उपयोगकर्ताओं को लॉग इन के रूप में जोड़ें और प्रति वेबसाइट आधार पर डेटाबेस, टेबल, एसपी इत्यादि को अनुदान अनुमति दें। वेबसाइट 1 द्वारा उपयोग किए गए डीजी 1 में उपयोगकर्ता 1 के लिए लॉगिन है क्योंकि वेबसाइट 1 ऐप पूल पर उपयोगकर्ता 1 के रूप में चलता है।

विजुअल स्टूडियो से निर्मित डीबी (जैसे लोकलडीबी) और अंतर्निहित वेब सर्वर से उत्पादन वातावरण में तैनाती के साथ एक चुनौती इस तथ्य से निकलती है कि डेवलपर के उपयोगकर्ता एसआईडी और उसके एसीएल का उपयोग सुरक्षित उत्पादन वातावरण में नहीं किया जाना चाहिए। माइक्रोसॉफ्ट तैनाती के लिए उपकरण प्रदान करता है। लेकिन खराब डेवलपर को दयालु करें जो स्थानीय डीबी और स्थानीय वेब सर्वर के साथ नए आसान वीएस आईडीई में बस बॉक्स से बाहर काम करने के लिए सब कुछ आदी है, क्योंकि इन उपकरणों को उस डेवलपर के लिए उपयोग करना मुश्किल होगा, खासतौर पर ऐसे डेवलपर के लिए जो SysAdmin और DBAdmin समर्थन की कमी है या उनके विशेष ज्ञान। फिर भी ऊपर उल्लिखित एंटरप्राइज़ नेटवर्क की स्थिति से Azure पर तैनाती आसान है।


जैसा कि बताया गया है, विंडोज प्रमाणीकरण का उपयोग न करें, SQL सर्वर प्रमाणीकरण का उपयोग करें

इसके अलावा यदि आपने "सर्वर कनेक्शन" संवाद का उपयोग करके कनेक्शन बनाया है, तो web.config में कनेक्शन जांचना सुनिश्चित करें। ऐसा लगता है कि आपने कनेक्शन बनाया / संशोधित किया है और इसे web.config में विश्वसनीय कनेक्शन के रूप में संग्रहीत किया गया है। बस इस प्रमाणीकरण का उपयोग करें

<add name="MyDBConnectionString" connectionString="Data Source=localhost;Initial Catalog=Finantial;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient"/>

जो त्रुटि को ठीक करना चाहिए।


मुझे ApplicationPoolIdentity से नफरत है। मैं हमेशा ऐपपूल पर खाता के रूप में एक विंडोज उपयोगकर्ता खाता सेट करता हूं।

जैसा कि एड्रिफ्ट कहते हैं, यह डेटाबेस सुरक्षा समस्या की तरह लगता है। तो एक एनटी यूजर अकाउंट बनाएं, इसे एएसपी.नेट वी 4.0 ऐपपूल को असाइन करें और फिर इसे वेबसाइट फ़ोल्डर और एसक्यूएल में प्रासंगिक टेबल पर अनुमति दें।


मेरे पास यह संदेश था और मैं वेब सर्वर पर विंडोज प्रमाणीकरण का उपयोग करता हूं।

मैं चाहता था कि वर्तमान में प्रमाणीकृत वेब उपयोगकर्ता को ऐप पूल में निर्दिष्ट IIS APPPOOL \ ASP.NET v4 उपयोगकर्ता का उपयोग करने के बजाय डेटाबेस के विरुद्ध प्रमाणित किया जाए।

मुझे web.config में निम्न दर्ज करके पाया गया यह मेरे लिए तय किया गया है:

<system.web>
  <identity impersonate="true" />
</system.web>

https://msdn.microsoft.com/en-us/library/bsz5788z.aspx

मैं एसक्यूएल डीबी में ऐपपूल उपयोगकर्ता नाम बनाने या बस एसक्यूएल एथ्यू का उपयोग करने के बारे में अन्य उत्तर देखता हूं। यदि आप एसक्यूएल के अंदर व्यक्तिगत विंडोज उपयोगकर्ताओं को कैप्चर या सुरक्षित नहीं करना चाहते हैं तो दोनों सही होंगे।

टॉम


मैं एएसपी.NET वेब एपीआई परीक्षण एक ही समस्या में भाग गया

विकसित वेब। SQL Server 2012 एक्सप्रेस में बनाया गया विजुअल स्टूडियो 2013 एक्सप्रेस डेटाबेस में बनाया गया आईआईएस एक्सप्रेस (काम कर रहे) में निर्मित का उपयोग करके संशोधित परीक्षण आईआईएस लोकल (गुण पृष्ठ - वेब विकल्प से) का उपयोग करने के लिए संशोधित फिडलर के साथ रैन टेस्ट प्राप्त त्रुटि - डेटाबेस खोलने में असमर्थ प्रदाता के लिए .... 'APPPOOL \ DefaultAppPool' का हवाला देते हुए

समाधान जो काम किया।

आईआईएस में

एप्लिकेशन पूल 'DefaultAppPool' पर क्लिक करें पहचान करें = 'ApplicationPoolIdentity' सेट .NET Framework = v4.0 (भले ही मेरा ऐप 4.5 था)

एसक्यूएल सर्वर प्रबंधन स्टूडियो में

सुरक्षा फ़ोल्डर पर राइट क्लिक करें (SQL सर्वर इंजन के तहत सभी टेबल पर लागू होता है) उपयोगकर्ता पर राइट क्लिक करें और 'आईआईएस APPPOOL \ DefaultAppPool' जोड़ें 'अनुदान' कॉलम पर securables में उन विकल्पों को चेक करें जिन्हें आप देना चाहते हैं। उपर्युक्त के बारे में यदि आप एक डीबीए हैं तो शायद आप जानते हैं और उन विकल्पों को नियंत्रित करना चाहते हैं। यदि आप मेरे जैसे हैं डेवलपर बस अपनी वेब एपीआई सेवा का परीक्षण करना चाहता है जो एमवीसी शैली में ईएफ 6 के माध्यम से SQL सर्वर तक पहुंचने के लिए होता है तो बस सबकुछ जांचें। :) हाँ मुझे पता है लेकिन यह काम किया।


मैंने SQL सर्वर प्रोफाइलर (एसएसएमएस => टूल्स मेनू में उपलब्ध) का उपयोग किया और वहां देखा (जब आईआईएस ने डेटाबेस से कनेक्ट करने का प्रयास किया) कि मेरा आईआईएस उपयोगकर्ता किसी कारण से एनटी प्राधिकरण \ IUSR था, इस प्रश्न में उत्तर में अनुशंसित सभी चरणों का कोई फर्क नहीं पड़ता । तो मैंने उस उपयोगकर्ता को SQL सर्वर में जोड़ा, और यह काम किया ...


मैंने बिल्कुल ठीक किया @JeffOgata ने कहा लेकिन मुझे त्रुटि मिली:

Windows NT user or group 'IIS APPPOOL\ASP.NET v4.0' not found. Check the name again. (Microsoft SQL Server, Error: 15401)

मैंने फिर से अपना त्रुटि संदेश देखा और कहा कि Login failed for user 'IIS APPPOOL\DefaultAppPool'.

IIS APPPOOL\DefaultAppPool नामक उपयोगकर्ता जोड़ने के बाद सब कुछ काम किया।


यदि कनेक्शन स्ट्रिंग में आपने निर्दिष्ट किया है:

User ID=xxx;Password=yyy

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

Trusted_Connection=true;

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

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

 Integrated Security = true;

या

 Integrated Security = SSPI;

क्योंकि डेटाबेस प्रमाणीकरण डेटाबेस सर्वर से कनेक्ट करने के लिए उपयोग किया जाएगा। यहां अधिक जानकारी


रिकॉर्ड के लिए, यदि आपको स्थानीय डीबी से SQLEXPRESS में स्विच करने के बाद यह त्रुटि आती है, तो सुनिश्चित करें कि डेटाबेस पहले से ही SQLEXPRESS । आप प्रबंधन स्टूडियो में इसे सत्यापित कर सकते हैं।

SQLEXPRESS from LocalDB पर स्विच करने के बाद Entity Framework का उपयोग करते समय मुझे भी यही समस्या थी। मुझे Update-Database कमांड चलाया गया था। मैं उसके बाद सफलतापूर्वक कनेक्ट करने में सक्षम था।


सबसे पहले आपको यह स्पष्ट करने की आवश्यकता है कि क्या आप विंडोज प्रमाणीकरण का उपयोग कर रहे हैं और आप अपने कनेक्शन स्ट्रिंग में किसी भी उपयोगकर्ता नाम पासवर्ड का उल्लेख नहीं कर रहे हैं:

जब आप लोकलहोस्ट के माध्यम से अपना कोड चलाते हैं तो क्या होता है: जब आप अपना एचसीएफ परीक्षण क्लाइंट लोकहोस्ट से चलाते हैं, तो यह डेटाबेस में संवाद करने में सक्षम होगा क्योंकि स्थानीय डीबग मोड एप्लिकेशन आपके खाते की सेवा द्वारा डेटाबेस को कॉल कर रहा है। इसलिए इसका डेटाबेस तक पहुंच है क्योंकि devenv.exe आपके उपयोगकर्ता खाते के अंतर्गत चल रहा है।

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

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

नीचे विंडोज प्रमाणीकरण डब्ल्यूसीएफ के लिए कदम हैं: • ओपन आईआईएस (विंडोज़ + आर (रन) फिर inetmgr टाइप करें, फिर ठीक क्लिक करें) • कनेक्शन के तहत अपने पीसी नाम पर डबल क्लिक करें • एप्लिकेशन पूल पर क्लिक करें • अपना ऐप पूल (DefaultAppPool) चुनें • फिर नीचे दाईं ओर स्थित क्रियाएं उन्नत सेटिंग्स पर क्लिक करें: • प्रक्रिया मॉडल अनुभाग पर जाएं और • पहचान पर क्लिक करें। • अब लोकलसिस्टम का चयन करें।

अब अपना एसक्यूएल सर्वर प्रबंधन स्टूडियो खोलें: ओपन रन-> फिर एसएसएमएस टाइप करें, फिर एसएसएमएस में ठीक दबाएं, अपने विंडोज प्रमाणीकरण खाते का उपयोग करके लॉगिन करें। खुला सुरक्षा टैब लॉग इन टैब का विस्तार करें, तो आप अपना खाता देख पाएंगे।

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

Trusted_Connection = सही जोड़ें; आपके कनेक्शन स्ट्रिंग में संपत्ति। इसे सहेजें और वेब सेवा को तैनात करें। ऐप पूल पुनरारंभ करें।

आप अब डेटाबेस को कनेक्ट करने में सक्षम होंगे।


सुरक्षा के तहत "हर कोई" जोड़ें। यदि आपने डेटाबेस और डेटाबेस में लॉग इन करने वाले उपयोगकर्ता जोड़े हैं, तो यह कुछ ऐसा है जो आप गायब हैं। उम्मीद है की यह मदद करेगा।


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

वह संदेश भी प्रकट होता है यदि डेटाबेस मौजूद नहीं है!

सुनिश्चित करें कि आपके कनेक्शन स्ट्रिंग में कोई गलत वर्तनी नहीं है, सही सर्वर उदाहरण इत्यादि को इंगित कर रहा है।