asp.net - इवेंट लॉग पर लिखते समय System.Security.SecurityException




windows iis-7 (15)

web.config में नीचे आज़माएं

 <system.web>

<trust level="Full"/>

</system.web>

मैं सर्वर 2003 (और आईआईएस 6) से सर्वर 2008 (आईआईएस 7) से एक एएसपी.NET ऐप पोर्ट करने की कोशिश करने पर काम कर रहा हूं।

जब मैं ब्राउज़र पर पेज को आज़माकर देखता हूं तो मुझे यह मिलता है:

/ 'अनुप्रयोग में सर्वर त्रुटि

सुरक्षा अपवाद

विवरण: एप्लिकेशन ने सुरक्षा नीति द्वारा अनुमत ऑपरेशन करने का प्रयास किया। इस एप्लिकेशन को आवश्यक अनुमति देने के लिए कृपया अपने सिस्टम प्रशासक से संपर्क करें या कॉन्फ़िगरेशन फ़ाइल में एप्लिकेशन के ट्रस्ट स्तर को बदलें।

अपवाद विवरण: सिस्टम.Security.SecurityException: स्रोत नहीं मिला था, लेकिन कुछ या सभी ईवेंट लॉग की खोज नहीं की जा सकी। पहुंच योग्य लॉग: सुरक्षा

स्रोत त्रुटि:

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

स्टैक ट्रेस:

[सुरक्षा अपवाद: स्रोत नहीं मिला था, लेकिन कुछ या सभी ईवेंट लॉग खोज नहीं पाए जा सका। पहुंच योग्य लॉग: सुरक्षा।]

System.Diagnostics.EventLog.FindSourceRegistration (स्ट्रिंग स्रोत, स्ट्रिंग मशीननाम, बूलियन केवल पढ़ने के लिए) +562 सिस्टम। डायग्नोस्टिक्स.इवेंटलॉग। सोर्सएक्सिस्ट्स (स्ट्रिंग स्रोत, स्ट्रिंग मशीननाम) +251

[स्निप]

ये वे चीजें हैं जिन्हें मैंने कोशिश करने और हल करने के लिए किया है:

  1. कुंजी " HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Security कुंजी" पूर्ण "अनुमति दें। यह काम किया। लेकिन स्वाभाविक रूप से मैं इसे उत्पादन में नहीं कर सकता। इसलिए मैंने कुछ मिनटों के लिए ऐप चलाने के बाद "हर कोई" अनुमति हटा दी और त्रुटि फिर से दिखाई दी।

  2. मैंने उन्नत लॉग के साथ इंस्टॉलेशन के दौरान एप्लिकेशन लॉग और सुरक्षा लॉग में स्रोत बनाया (और मैंने सत्यापित किया कि यह regedit के माध्यम से मौजूद है) लेकिन त्रुटि बनी रही।

  3. मैंने ऐप को web.config फ़ाइल (और appcmd.exe का उपयोग करके) में एक पूर्ण ट्रस्ट स्तर दिया लेकिन इसका कोई फायदा नहीं हुआ।

क्या किसी के पास अंतर्दृष्टि है कि यहां क्या किया जा सकता है?

पीएस: यह इस question का पालन है। मैंने दिए गए उत्तरों का पालन किया लेकिन कोई फायदा नहीं हुआ (ऊपर # 2 देखें)।


इसके लिए एक स्पष्ट रूप से स्पष्ट समाधान प्रतीत होता है कि मुझे अभी तक एक बड़ा नकारात्मक पक्ष नहीं दिख रहा है, कम से कम जहां अपने स्वयं के इवेंट स्रोत बनाने के लिए प्रशासनिक अधिकार प्राप्त करना व्यावहारिक नहीं है: पहले से मौजूद एक का उपयोग करें।

जिन दोनों का मैंने उपयोग करना शुरू कर दिया है वे "नेट रनटाइम" और "एप्लिकेशन त्रुटि" हैं, जिनमें से दोनों प्रतीत होते हैं कि वे अधिकांश मशीनों पर उपस्थित होंगे।

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

परिणामस्वरूप कोड समाप्त होता है जैसे:

EventLog.WriteEntry(
    ".Net Runtime", 
    "Some message text here, maybe an exception you want to log",
    EventLogEntryType.Error
    );

बेशक, चूंकि हमेशा एक मौका होता है कि आप ऐसी मशीन पर हैं जिनके पास किसी भी कारण से उन ईवेंट स्रोत नहीं हैं, तो शायद आप इसे विफल होने के मामले में try {} catch{} पकड़ें try {} catch{} लपेटें और चीजों को और खराब कर दें, लेकिन घटनाएं हैं अब बचाया जा सकता है।


जब आप System.Diagnostics.EventLog.WriteEntry ("SourceName", "ErrorMessage", EventLogEntryType.Error) का उपयोग करते हैं, तो regEdit में HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ eventlog \ अनुप्रयोग के तहत उपयोग किए जाने वाले स्रोत नाम के साथ एक नई कुंजी बनाने की आवश्यकता होती है ;

तो मूल रूप से आपके उपयोगकर्ता को कुंजी बनाने की अनुमति नहीं है। एप्लिकेशन पूल में पहचान मान से उपयोग कर रहे उपयोगकर्ता के आधार पर निम्न कार्य कर सकते हैं उन्नत सेटिंग्स:

  1. RegEdit चलाएं और HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ eventlog पर जाएं
  2. EventLog कुंजी और चयन अनुमतियों में राइट क्लिक करें ... विकल्प 3. अपने उपयोगकर्ता को पूर्ण नियंत्रण पहुंच के साथ जोड़ें।

    यदि आप " नेटवर्क सेवा " का उपयोग कर रहे हैं तो नेटवर्क सेवा उपयोगकर्ता जोड़ें

    यदि आप usinf "ApplicationPoolIdentity" हैं IIS APPPOL {अपने ऐप पूल का नाम} जोड़ें (उपयोगकर्ता को खोजते समय स्थानीय मशीन स्थान का उपयोग करें)।

    यदि आप "लोकलसिस्टम" का उपयोग कर रहे हैं तो सुनिश्चित करें कि उपयोगकर्ता के पास व्यवस्थापकीय अनुमतियां हैं। यह भेद्यता के लिए सिफारिश नहीं है।

  3. HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ eventlog \ Security के लिए चरण 1 से 3 के चरणों को दोहराएं

विजुअल स्टूडियो के साथ डिबगिंग के लिए मैं "नेटवर्क सेवा" (यह एएसपी.नेट उपयोगकर्ता है) का उपयोग करता है और जब साइट प्रकाशित होती है तो मैंने "AppicationPoolIdentity" का उपयोग किया।


मुझे वीएस -2010 (एक्सपी के तहत वीएस -2008 से अपग्रेड किया गया) के तहत विकसित एक कंसोल प्रोग्राम के साथ एक बहुत ही समान समस्या थी, मेरा प्रोग्राम कुछ लॉगिंग करने के लिए एनएलआईबी का उपयोग करता है। त्रुटि को निकाल दिया गया क्योंकि एंटरलिब को एक नया इवेंट स्रोत पंजीकृत करने की अनुमति नहीं थी।

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

(आप http://www.blackwasp.co.uk/EventLog_3.aspx भी उल्लेख कर सकते हैं, इससे मेरी मदद मिली


मेरे लिए 'नेटवर्क सेवा' के लिए 'रीड' अनुमतियां देने के लिए पूरी 'EventLog' शाखा में काम किया।


मैं आईआईएस पर काम नहीं कर रहा हूं, लेकिन मेरे पास एक ऐसा एप्लीकेशन है जो 2K8 बॉक्स पर एक ही त्रुटि फेंकता है। यह 2 के 3 बॉक्स पर ठीक काम करता है, आंकड़े पर जाएं।

मेरा संकल्प एप्लिकेशन को उन्नत अधिकार देने के लिए "व्यवस्थापक के रूप में चलाएं" था और सब कुछ खुशी से काम करता है। मुझे आशा है कि यह आपको सही दिशा में ले जाने में मदद करेगा।

विंडोज 2008 अधिकार / अनुमति / ऊंचाई विंडोज 2003, गार से वास्तव में अलग है।


मैं एक ही मुद्दे में भाग गया, लेकिन मुझे सुरक्षा के लिए नीचे जाने की बजाय, एक स्तर ऊपर जाना था और HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog \ key पर सभी को पूर्ण पहुंच देना पड़ा, जिसने मेरे लिए समस्या को मंजूरी दे दी।


मैंने इसी तरह की समस्या को मारा - मेरे मामले में स्रोत < , > अक्षर शामिल थे। 64 बिट मशीनें नए भी लॉग-एक्सएमएल बेस का उपयोग कर रही हैं जो मैं कहूंगा और ये वर्ण (स्ट्रिंग से सेट) अमान्य एक्सएमएल बनाते हैं जो अपवाद का कारण बनता है। तर्कसंगत रूप से यह माइक्रोसॉफ्ट मुद्दा पर विचार करना चाहिए - स्रोत (नाम / स्ट्रिंग) को सही तरीके से संभालना नहीं।


विंडोज 7 64 बिट्स पर एक ही समस्या। व्यवस्थापक के रूप में चलाएं समस्या हल हो गई।


वीएस के भीतर एक ऐप चलाने के दौरान मुझे यह समस्या थी। मुझे बस इतना करना था कि प्रोग्राम को प्रशासक के रूप में एक बार चलाया जाए, फिर मैं वीएस के भीतर से भाग सकता था।

व्यवस्थापक के रूप में चलाने के लिए, बस विंडोज एक्सप्लोरर में अपने डीबग फ़ोल्डर पर नेविगेट करें। प्रोग्राम पर राइट-क्लिक करें और व्यवस्थापक के रूप में चलाएं चुनें।


समाधान इवेंटलॉग / सुरक्षा कुंजी पर "नेटवर्क सेवा" खाता पढ़ने की अनुमति देना था।


समाधान को पुनर्निर्माण मेरे लिए काम किया


हमारे सभी 2008 सर्वरों के साथ एक समान समस्या थी। सुरक्षा लॉग ने जीपीओ की वजह से पूरी तरह से काम करना बंद कर दिया, जिसने समूह प्रमाणीकृत उपयोगकर्ताओं को लिया और कुंजी HKLM\System\CurrentControlSet\Services\EventLog\security से अनुमति को पढ़ा

माइक्रोसॉफ्ट की सिफारिश के प्रति इसे वापस रखकर इस मुद्दे को सही किया गया। मुझे संदेह है कि उच्च प्रमाणीकृत उपयोगकर्ताओं को उच्च स्तर पर पढ़ने से आपकी समस्या भी ठीक हो जाएगी।


हाय मैं एक ही समस्या में भाग गया जब मैं एक एप्लीकेशन विकसित कर रहा था और इसे रिमोट पीसी पर स्थापित करना चाहता था, मैंने इसे निम्नलिखित करके तय किया:

1) गोटो अपनी रजिस्ट्री, पता लगाएँ: HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application (??? YOUR_SERVICE_OR_APP_NAME ???)

ध्यान दें कि "(??? YOUR_SERVICE_OR_APP_NAME ???)" आपका एप्लिकेशन सेवा नाम है जैसा आपने इसे .NET परिनियोजन बनाया था, उदाहरण के लिए, यदि आपने अपना नया एप्लिकेशन "मेरा नया ऐप" नाम दिया है तो कुंजी होगी: HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application \ मेरा नया ऐप

नोट 2: आप जिस ईवेंट को लिख रहे हैं, उसके आधार पर, आप अपने DEV बॉक्स, \ Application \ (ऊपर उल्लिखित), या (\ System) या (\ Security) पर भी जा सकते हैं, इस पर निर्भर करता है कि आपका एप्लिकेशन किस घटना में लिख रहा है , (\ अनुप्रयोग) हर समय ठीक होना चाहिए।

2) उपरोक्त कुंजी पर होने के कारण, मेनू से; "फ़ाइल" -> "निर्यात करें" का चयन करें, और फिर फ़ाइल को सहेजें। (नोट: यह आपकी आवश्यक रजिस्ट्री सेटिंग्स बनाएगा जब एप्लिकेशन को इवेंट व्यूअर में लिखने के लिए इस कुंजी तक पहुंचने की आवश्यकता होगी), तर्क के लिए नई फ़ाइल एक .REG फ़ाइल होगी, इसे "मेरा नया ऐप.रेग "

3) प्रोडक्शन पर तैनाती करते समय, सर्वर के सिस्टम के एडमिनिस्ट्रेटर (एसए) से परामर्श लें, एप्लिकेशन के साथ "माई न्यू ऐप.आरईजी" फाइल को सौंपें, और एसए से यह आरईजी फ़ाइल स्थापित करने के लिए कहें, एक बार (व्यवस्थापक के रूप में) यह होगा अपने applicaion के लिए कुंजी बनाएँ।

4) अपना आवेदन चलाएं, इसे इस कुंजी के अलावा किसी और चीज तक पहुंचने की आवश्यकता नहीं है।

समस्या अब हल होनी चाहिए।

कारण:

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

मुझे उम्मीद है कि यह इसे हल करने में मदद करता है।


EventLog/Security कुंजी (जैसे Firenzi और royrules22 द्वारा सुझाए गए अनुसार) पर Network Service पढ़ने की अनुमति देने के लिए http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx से निर्देशों का पालन करें

  1. रजिस्ट्री संपादक खोलें:
    1. फिर Start चयन Start
    2. regedt32 या regedit दर्ज regedt32
  2. निम्न कुंजी पर नेविगेट / विस्तार करें:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security

  3. इस प्रविष्टि पर राइट क्लिक करें और अनुमतियां चुनें

  4. Network Service उपयोगकर्ता जोड़ें

  5. इसे पढ़ने की अनुमति दें

अद्यतन: उपरोक्त चरण डेवलपर मशीनों पर ठीक हैं, जहां आप एप्लिकेशन इंस्टॉल करने के लिए तैनाती प्रक्रिया का उपयोग नहीं करते हैं।
हालांकि यदि आप अपने आवेदन को अन्य मशीनों पर तैनात करते हैं, तो SailAvid's और निकोल कैलिनोउ के उत्तरों में सुझाए गए इंस्टॉलेशन के दौरान इवेंट लॉग स्रोतों को पंजीकृत करने पर विचार करें।

मैं PowerShell फ़ंक्शन का उपयोग कर रहा हूं (Octopus Deploy.ps1 में कॉल करना)

function Create-EventSources() {
    $eventSources = @("MySource1","MySource2" )
    foreach ($source in $eventSources) {
            if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {
                [System.Diagnostics.EventLog]::CreateEventSource($source, "Application")
            }
    }
}




event-log