2010-04-13 14 views
6

के साथ काम करने के लिए ELMAH कैसे प्राप्त करूं मुझे अपने (कैसिनी) विकास सर्वर पर ईएलएमएएच काम कर रहा है, और इससे काफी खुश था, लेकिन अब मैं सब कुछ मेरे पास ले जाने की कोशिश कर रहा हूं उत्पादन सर्वर (आईआईएस 7), हनीमून खत्म होने की तरह दिखता है।मैं SQL सर्वर (अनुमति समस्याओं)

मुझे "gotcha" with IIS7 से पहले मिल गया है, जो दस्तावेज़ीकरण में स्पष्ट रूप से हाइलाइट किया जा सकता था, और यदि मैं केवल इन-मेमोरी लॉग का उपयोग करता हूं तो यह काम करता है।

हालांकि, मैं (के रूप में मैं अपने विकास सिस्टम पर करते हैं) यह एसक्यूएल सर्वर लॉग का उपयोग करने के लिए कोशिश कर रहा हूँ, और मैं की तर्ज पर एक त्रुटि हो रही है:

निष्पादन अनुमति ऑब्जेक्ट पर अस्वीकार कर दिया गया था ELMAH_GetErrorsXml

ठीक है, ठीक है। मुझे पता है कि डेटाबेस अनुमतियां कैसे प्रदान करें, लेकिन मैं वास्तव में यह समझने के लिए संघर्ष कर रहा हूं कि कौन सा उपयोगकर्ता और कौन सी संग्रहित प्रोसेस/टेबल मुझे एक्सेस प्रदान करने की आवश्यकता है।

जो चीज वास्तव में मुझे भ्रमित कर रही है वह यह है कि मुझे अपने विकास सर्वर पर काम करने के लिए ऐसा कुछ करने की ज़रूरत नहीं थी। एकमात्र अंतर जो मैं देख सकता हूं वह यह है कि मेरे विकास सर्वर पर यह एनटी प्राधिकरण \ IUSR के रूप में कनेक्ट होता है, जबकि मेरे उत्पादन सर्वर पर यह एनटी प्राधिकरण \ NETWORK सेवा के रूप में कनेक्ट होता है। (यह सिर्फ एक विश्वसनीय कनेक्शन का उपयोग कर रहा है, इसलिए मैंने इसे ऐसा करने के लिए स्पष्ट रूप से कॉन्फ़िगर नहीं किया है - मुझे लगता है कि यह वेब सर्वर के साथ करना है)। अद्यतन: मैंने तब से स्थापित किया है क्योंकि मैं कैसिनी का उपयोग कर रहा हूं, यह वास्तव में मेरे रूप में लॉग इन कर रहा था (एक व्यवस्थापक) और आईयूएसआर नहीं, जो बताता है कि मुझे कोई अनुमति समस्या क्यों नहीं मिली।

मेरे विकास सर्वर पर, आईयूएसआर खाता सार्वजनिक डेटाबेस भूमिका का सदस्य है, और आवश्यक डेटाबेस तक पहुंच है (फिर से "सार्वजनिक")। ऑब्जेक्ट-स्तरीय अनुमतियों का कोई स्पष्ट अनुदान नहीं है। [ऊपर अद्यतन देखें - यह अप्रासंगिक है]।

मेरे उत्पादन सर्वर पर, मैंने नेटवर्क सेवा को उसी तरह से जोड़ा है (सार्वजनिक डेटाबेस भूमिका, डेटाबेस के लिए स्पष्ट पहुंच "सार्वजनिक")। फिर भी, मुझे यह अनुमति त्रुटि मिलती है। क्यूं कर?!! [ऊपर अपडेट देखें - एकमात्र कारण मैं एक त्रुटि त्रुटि प्राप्त नहीं है क्योंकि मैं व्यवस्थापक के रूप में चल रहा हूं]।

और, ज़ाहिर है, अगर यह तथ्य स्थानीय रूप से काम करता है तो बस "भाग्य" है, मुझे यह जानने की आवश्यकता होगी कि कौन से एसपी/टेबल तक पहुंच प्रदान की जाए। मेरा अनुमान सभी 3 एसपी और तालिका नहीं होगा, लेकिन यह कुछ दस्तावेज देखने के लिए अच्छा होगा (फिर से) यह स्पष्ट करता है।

उत्तर

6

क्या आप web.config में पूर्ण कनेक्शनस्ट्रिंग के साथ ELMAH प्रदान कर रहे हैं? यदि ऐसा है, तो आपको पता होना चाहिए कि डीबी उपयोगकर्ता को अनुमति देने के लिए क्या सही है?

<elmah> 
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah" /> 
</elmah> 

<connectionStrings> 
    <add name="elmah" connectionString="Data Source=XXX;Initial Catalog=XXX;User Id=XXX;Password=XXX;" providerName="System.Data.SqlClient" /> 
</connectionStrings> 
+1

@Eric: मैं एक विश्वसनीय कनेक्शन का उपयोग कर रहा हूं, इसलिए उपयोगकर्ता वास्तव में उस मशीन के आधार पर भिन्न होता है जिस पर यह चल रहा है। अगर मुझे स्पष्ट अनुमति देना है, तो ठीक है, मैं यह कर सकता हूं। यह पुष्टि करने के लिए धन्यवाद कि यह केवल 3 एसपी है। अपने आप को कौन से उपयोगकर्ता से अपनाने के लिए, मैं डेटाबेस भूमिका तैयार करूंगा, और सुनिश्चित कर सकता हूं कि उपयुक्त उपयोगकर्ता (शायद नेटवर्क सेवा) भूमिका का सदस्य है।यह एक शर्म की बात है कि ईएलएमएएच सेटअप के हिस्से के रूप में भूमिकाएं नहीं बनाता है (जैसे SQL सर्वर के लिए एएसपी.NET सदस्यता प्रदाता, उदाहरण के लिए)। यह भी दयालु है कि वे ऐसा करने की आवश्यकता का जिक्र नहीं करते हैं! –

11

USER_NAME उपयोगकर्ता की अनुमति पर अमल देने की जरूरत एसक्यूएल का उदाहरण: और हाँ, अनुमति तीन ELMAH संग्रहित प्रक्रियाओं पर अमल करने ...

यहाँ एक विन्यास है कि मैं का उपयोग किया है है होगा

GRANT EXECUTE ON ELMAH_GetErrorsXml TO USER_NAME 
GRANT EXECUTE ON ELMAH_GetErrorXml TO USER_NAME 
GRANT EXECUTE ON ELMAH_LogError TO USER_NAME