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




iis-7 web-config (22)

उपयोगकर्ता IIS APPPOOL\ASP.NET v4.0 लिए डेटाबेस को अनुमति देने का एक और तरीका निम्नानुसार है।


  1. उपयोगकर्ता नाम और लॉगिन नाम के साथ नए उपयोगकर्ता को अपनी डिफ़ॉल्ट स्कीमा के साथ IIS APPPOOL\ASP.NET v4.0 के रूप में जोड़ें।
  2. मालिक स्कीमा और सदस्यता पर जाएं, db_datareader, db_datawriter जांचें

मेरे पास एक वेब प्रोजेक्ट है (सी # एएसपी.नेट, ईएफ 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 का उपयोग करके, मैन्युअल रूप से अनुमति सेट करना आवश्यक नहीं होना चाहिए।


मेरे पास यह समस्या थी और वास्तव में यह कुछ अलग-अलग कारण था - मेरे डेटाबेस में 'आईआईएस APPPOOL \ ASP.NET v4.0' उपयोगकर्ता था लेकिन यह अभी भी काम नहीं कर रहा था।

मैंने हाल ही में अपने SQL सर्वर इंस्टॉल को अपग्रेड कर दिया था और इस प्रक्रिया में उपयोगकर्ता लॉग इन से डिस्कनेक्ट हो गया था - इसलिए डाटाबेस -> सुरक्षा -> उपयोगकर्ताओं के तहत 'आईआईएस एपपूल \ एएसपी.नेट v4.0' था लेकिन कोई उपयोगकर्ता सुरक्षा में नहीं था -> लॉगिन।

सुरक्षा में लॉग इन 'आईआईएस APPPOOL \ ASP.NET v4.0' जोड़ा गया -> लॉगिन, SQL सर्वर स्वचालित रूप से डेटाबेस में उपयोगकर्ता को मैप किया गया (यह मैन्युअल रूप से किया जाना था) और समस्या ठीक हो गई।


पहचान स्थापित करना केवल यह काम मेरे पृष्ठों में बनाता है।


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

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


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

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

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


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

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


iis -> एप्लिकेशन पूल पर जाएं -> एप्लिकेशन में उपयोग किए गए अपने एप्लिकेशन पूल को ढूंढें

एप्लिकेशन के लिए उपयोग किए गए अपने एप्लिकेशन पूल का चयन करें, उन्नत सेटिंग्स का चयन करें

एप्लिकेशन पूल पहचान का चयन करें

स्थानीय सिस्टम के रूप में निर्मित का चयन करें और ठीक क्लिक करें


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

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

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

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

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


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

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

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

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

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

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

टॉम


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

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

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


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

User ID=xxx;Password=yyy

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

Trusted_Connection=true;

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

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

 Integrated Security = true;

या

 Integrated Security = SSPI;

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


यदि आप एक नया लॉगिन जोड़ते हैं, तो सुनिश्चित करें कि सर्वर गुणों (दाएं क्लिक -> गुण) / सुरक्षा के तहत, प्रमाणीकरण मोड दोनों sqlserver और विंडोज़ न केवल विंडोज़ पर सेट है।


आईआईएस में एपिकेशन होस्ट करते समय मुझे इसी तरह के मुद्दे का सामना करना पड़ा है

उपाय

मैं पूल पहचान बदलता हूं और इसका काम करता हूं

ApplicationPoolIdentity -> NetworkService

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

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

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

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

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


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

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


अगर आपके पास अपनी 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>

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


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


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

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

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

आईआईएस में

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

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

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


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

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

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