2012-09-02 11 views
7

मेरी आवश्यकता है "हमारी डेटाबेस फ़ाइलों को लॉक करना इस तरह से किया जाता है कि हमारी आवेदन प्रक्रिया के भीतर से किए गए सभी कार्यों की अनुमति है, केवल तीसरा पार्टी आवेदन/सेवा का उपयोग अवरुद्ध है। " यह सुनिश्चित करने के लिए कि हमारे एप्लिकेशन के चलने के बाद तृतीय पक्ष सॉफ़्टवेयर हमारी किसी भी डेटाबेस फ़ाइलों को लॉक नहीं करता है, हमें इसे रोकने के लिए सभी डेटाबेस फ़ाइलों को स्पष्ट रूप से लॉक करना चाहिए।सी # से डीबी फाइलों को कैसे लॉक करें ताकि तृतीय पक्ष सॉफ़्टवेयर उन्हें एक्सेस नहीं कर सकें

पृष्ठभूमि: मैं डेस्कटॉप एप्लिकेशन और एसक्यूएल सीई डेटाबेस और एन-हाइबरनेट के रूप में काम कर रहा हूं। कुछ बार जब हमारा ऐप बैकअप सॉफ़्टवेयर जैसे तृतीय पक्ष सॉफ़्टवेयर को परेशान करता है जो अक्सर चलाएगा और उस समय सिस्टम बैकअप करेगा, तो यह हमारी डीबी फाइलों को लॉक करेगा।

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

मैंने फ़ाइल लॉक द्वारा नमूना के साथ प्रयास किया लेकिन एन-हाइबरनेटेड के माध्यम से कुछ डीबी ऑपरेशन करते समय यह मेरे ऐप में विफल रहा है। कृपया मेरी मदद करें यह वास्तव में असंभव है अगर कृपया मुझे बताएं।

+0

मुझे लगता है कि तीसरे पक्ष के सॉफ्टवेयर क्या करेंगे या नहीं करेंगे और यह अनुमान लगाने का सबसे अच्छा तरीका नहीं है; आपके परिदृश्य में, यदि उपयोगकर्ता आपके ऐप का उपयोग करते समय अपना बैकअप सॉफ़्टवेयर चला रहा है, और उसने ऐप की डेटाबेस फ़ाइल को अपनी बैकअप योजना में शामिल किया है, तो वह उम्मीद करता है कि डेटाबेस भी शामिल किया जाए, नहीं? यदि आप उपयोगकर्ता को सामने बताते हैं "आप इस ऐप को चलाने के दौरान डेटाबेस बैकअप नहीं ले सकते हैं" तो यह उनके लिए स्पष्ट है और यह असामान्य बात नहीं है। –

+0

मैं यहां स्टीफन से सहमत हूं: आपके एप्लिकेशन से लॉक करने की कोशिश करने के बजाय डीबी तक पहुंचने के लिए बेहतर क्या है। उदाहरण के लिए यदि आपका एप्लिकेशन लटकता है और फिर से शुरू करने की आवश्यकता है तो क्या होगा? क्या यह स्टार्टअप पर अनन्य लॉक प्राप्त करने में सक्षम होगा या क्या आप पुराने लटकने वाले फंस जाएंगे? क्या होता है यदि कुछ रिपोर्टिंग टूल या देव में एक नया संस्करण भी उत्पादन डेटाबेस से कनेक्ट करना चाहता है? डेटाबेस को बैकअप या एवी से बाहर रखा गया फ़ोल्डर में डालने के लिए संभवतः सबसे आसान है या जो भी इस समय ताले मिल रहा है। एक रखरखाव खिड़की है या अपने ऐप स्वयं बैकअप संभाल लें। – Mike

उत्तर

0

File.Open का उपयोग किए बिना लिखने के संचालन के लिए इसका उपयोग आमतौर पर फ़ाइल पर लॉक रखेगा। अन्य लोग लिखने में सक्षम नहीं होंगे, हालांकि वे अभी भी इसे पढ़ सकते हैं।

0

नया खाता/उपयोगकर्ता बनाएं। केवल इस उपयोगकर्ता को फ़ाइल अनुमति को ओवरराइट करें। और इस नए बनाए गए उपयोगकर्ता को अपने आवेदन का प्रतिरूपण करें। नतीजतन अन्य उपयोगकर्ता आपकी फाइल का उपयोग नहीं कर सकते हैं।

-1

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

+0

स्पष्ट रूप से SQLCE ने SQL सर्वर 2005 संस्करण के बाद से कम से कम डेस्कटॉप अनुप्रयोगों का समर्थन किया है। [प्रलेखन] (http://technet.microsoft.com/en-us/library/ms172417 (v = sql.90) .aspx) हालांकि, यह एक नई सुविधा होने पर अस्पष्ट है। – ErikHeemskerk