sql यवस क्या डेटा की सुरक्षा को डेटाबेस पक्ष पर किया जाना चाहिए?




हिंदी में डेटाबेस डिजाइन की प्रक्रिया (7)

दुर्भाग्य से कोई "एक सच्चा जवाब" नहीं है आपको जो विकल्प चाहिए, वह कई कारकों पर निर्भर करता है, जैसे:

  • दिए गए समाधानों के साथ टीम की परिचितता (यानी यदि उनमें से बहुमत एसक्यूएल लेखन योग्य है, तो यह डेटाबेस में हो सकता है, हालांकि उनमें से अधिकतर सी # के साथ अधिक सहज है, यह कोड में होना चाहिए)
  • प्रत्येक पार्टी की "राजनीतिक शक्ति"
  • आदि

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

हम एक नए रूपरेखा स्थापित करने की प्रक्रिया में हैं और हमारे नए आंतरिक क्षुधा के लिए व्यवसाय करने का तरीका हमारा वर्तमान डिजाइन यह तय करता है कि हमारे डेटाबेस द्वारा सभी सुरक्षा तर्क को संभाला जाना चाहिए, और सभी जानकारी (और मेरा मतलब सभी) संग्रहीत प्रक्रियाओं के माध्यम से डेटाबेस में और बाहर जा रहे होंगे

सिद्धांत है, डेटा एक्सेस परत एक संग्रहीत कार्यविधि से जानकारी देता है और डेटाबेस को प्रमाणीकरण से गुजरता है। डेटाबेस उपयोगकर्ता भूमिका / अनुमतियों को निर्धारित करता है और तय करता है कि कार्य करने के लिए या नहीं (चाहे वह डेटा पुनः प्राप्त करना या अपडेट करना)

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

मैं, एक के लिए, एक आईडीई के रूप में पूरी तरह से कमी के एसक्यूएल प्रबंधन स्टूडियो का पता लगाएं मेरी मुख्य चिंता यह है कि हम कुछ बहुत ही कम निष्पादन लाभों के लिए हमारी संग्रहीत कार्यविधियों में कुछ व्यावसायिक तर्कों की गड़बड़ी को बनाए रखेंगे।

अभी, हम अपने ORM के लिए LINQ का उपयोग कर रहे हैं। यह हल्का और तेज लगता है, लेकिन सबसे अच्छा, इसकी वास्तव में आसान तेजी से विकसित करने में।

प्रदर्शन लाभ के लायक रखरखाव लागत क्या है? क्या हम खुद को सोचने में बेवकूफ बना रहे हैं, यहां तक ​​कि एक सुगम प्रदर्शन लाभ भी हो सकता है? या हम सिर्फ खुद के लिए एक दुःस्वप्न बना रहे हैं?

हमारा पर्यावरण:

  • आंतरिक, गैर-मिशन महत्वपूर्ण व्यावसायिक ऐप्स
  • सी # / एएसपी.नेट 3.5
  • विंडोज़ 2003
  • एमएस एसक्यूएल सर्वर 2005
  • करीब 500 उपयोगकर्ताओं के साथ 35 मध्यम आकार के वेब ऐप्स

आप इसे कर सकते हैं, लेकिन इसके खिलाफ विकसित होने और बनाए रखने के लिए एक बहुत बड़ा दर्द है। इसे किसी ऐसे व्यक्ति से ले लीजिए जो एक ऐसी परियोजना पर है जहां लगभग सभी व्यावसायिक तर्क संग्रहित प्रक्रियाओं में कोडित हैं।

सुरक्षा के लिए, एएसपी.एन.ई.टी. में उपयोगकर्ता और भूमिका प्रबंधन इसमें पकाया जाता है ताकि आप डेटाबेस को भ्रमण कर सकें, लेकिन क्या? बदले में यह सिस्टम और सत्यापन त्रुटियों को संभालने और डिबग करने के लिए अधिक परेशान हो जाता है क्योंकि उन्हें डेटाबेस से बुलबुला करना पड़ता है

यूनिट परीक्षण के लिए उपलब्ध चौखटे बहुत कम विकसित होते हैं, क्योंकि इकाई परीक्षण बहुत मुश्किल है।

उचित ऊप और डोमेन संचालित डिजाइन सभी लेकिन खिड़की से बाहर है।

और प्रदर्शन लाभ छोटे होने पर कोई भी हो सकता है हमने इस बारे में यहां बात की

मैं सुझाऊंगा कि यदि आप डेवलपर के रूप में अपनी विवेक को बचाने के लिए चाहते हैं तो आप डेटाबेस को दृढ़ता परत के रूप में रखने के लिए दांत और नाखून से लड़ते हैं


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

यह linq, C # में व्यावसायिक तर्क, और डेटा में प्रवेश को नियंत्रित करने वाले डेटाबेस में एक सामान्य प्रमाणीकरण परत की अनुमति देता है।


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

संग्रहीत कार्यविधियों के लिए आवेदन को लॉक करने के लिए एक अन्य लाभ यह है कि ऐप स्टैक के डाटाबेस कनेक्शन के पास विशेषाधिकारों को विशिष्ट संग्रहित प्रक्रिया कॉल में बंद कर सकते हैं और कुछ नहीं।

आपके आवेदन के लिए सुरक्षा तर्क में शामिल डीबीए होने के लिए एक लाभ यह है कि अलग-अलग ऐप की विशेषताओं और भूमिकाओं को डेटाबेस में दृश्यों में विभाजित किया जा सकता है, ताकि यदि गतिशील एसक्यूएल और सामान्य चयन बयान आवश्यक हो, तो एसक्यूएल ख़राबता से नुकसान विवश हो सकते हैं

इस के फ्लिप पक्ष, ज़ाहिर है, लचीलेपन खो दिया है। एक ORM स्पष्ट रूप से संग्रहीत कार्यप्रणाली मापदंडों पर डीबीए के साथ निरंतर बातचीत से विकसित करने के लिए तेजी से विकसित होने जा रहा है। और, जैसा कि संग्रहित प्रक्रियाओं पर दबाव बढ़ता है, यह अधिक से अधिक होने की संभावना है कि प्रक्रियाएं स्वयं गतिशील एसक्यूएल का सहारा लेंगी, जो एप द्वारा हमला करने के लिए एसक्यूएल बनने के रूप में ही कमजोर होगा।

यहां एक सुखी मध्यम मैदान है, और आपको इसे ढूंढने का प्रयास करना चाहिए। मैंने हाल ही में परियोजनाओं पर काम किया है जो काफी भयानक एसक्यूएल इंजेक्शन समस्याओं से बचाए गए थे क्योंकि डीबीए ने डेटाबेस, इसके कनेक्शन, और "कम से कम विशेषाधिकार" के लिए उसकी संग्रहीत प्रक्रियाओं को ध्यानपूर्वक विन्यस्त किया था, ताकि किसी एक डाटाबेस उपयोगकर्ता का उपयोग केवल उन लोगों के लिए किया जा सके जानना जरूरी है

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


यह सभी आपके मामले में निर्भर करता है कि एसपी मार्ग नहीं जाने और डीडीडी तरीके से सब कुछ करना (कोड में एक डोमेन मॉडल बनाना और उसका उपयोग करना) बेहतर नहीं है।

हालांकि, अगर आपके पास एक डाटाबेस है जिसे न केवल आपके आवेदन के द्वारा प्रयोग किया जाता है, लेकिन कई लोगों के द्वारा आपको शायद वेब सर्वर पर विचार करना चाहिए वैसे भी डेटाबेस को केवल एक स्तर के माध्यम से पहुंचा जा सकता है जो व्यावसायिक नियमों को लागू करता है और आप "गंदे" डेटा के साथ समाप्त होने जा रहे हैं और बाद में आपके डेटा को सिनिटाइज कर रहे हैं, इससे पहले कुछ व्यावसायिक नियमों को लिखना पहले से बहुत बड़ा दर्द है। एक अच्छा डेटाबेस में चेक-कंट्रिक्शन्स और अनुक्रमित सेट होने चाहिए, इसलिए इसमें कुछ व्यावसायिक नियम होंगे जो आप इसे पसंद करते हैं या नहीं।

और अगर आपको लाखों और अरबों रिकॉर्ड के साथ सौदा करना है, तो आपको एक अच्छा डीबी-आदमी है जो आपके लिए समस्या का समाधान करने में खुशी होगी।


मेरी राय यह है कि आवेदन को प्रमाणीकरण और प्राधिकरण को संभालना चाहिए। डेटाबेस की तरफ से आपको केवल आवश्यक डेटा के एन्क्रिप्शन को संभालना चाहिए।


ऐसा मत करो हमने हाल ही में बहुत खराब अनुभव किया था जब "डेटाबेस गुरु" ने किसी अन्य कंपनी को जाने का फैसला किया था प्रक्रियाओं में सभी तर्कों का रखरखाव सिर्फ भयानक है !!

हाँ, आप कुछ प्रदर्शन में सुधार करने जा रहे हैं, लेकिन यह इसके लायक नहीं है। वास्तव में, आंतरिक अनुप्रयोग में प्रदर्शन भी एक बड़ी चिंता नहीं है अच्छे सर्वरों में अधिक पैसा निवेश करें यह बंद का भुगतान करेगा





stored-procedures