इसे करने के और भी तरीके हैं। यह इस बात पर निर्भर करता है कि आपको लगता है कि आपके कनेक्शन स्ट्रिंग के बाद कौन आ रहा है और उनके पास किस प्रकार की पहुंच और कौशल स्तर होंगे। कनेक्शन स्ट्रिंग वहीं है, कहीं न कहीं, चाहे आप उसे छिपाने की कोशिश ही क्यों न करें।
यह जानते हुए कि कनेक्शन स्ट्रिंग को हैक किया जा सकता है, मैं हमेशा मानता हूं कि इसे हैक कर लिया जाएगा और दूसरे छोर पर सावधानी बरतें।
हम यह सुनिश्चित करने के लिए डीबी सर्वर पर कई चीजें करते हैं कि भले ही कनेक्शन स्ट्रिंग को समझौता किया गया हो, डेटा अभी भी सुरक्षित है।
- कनेक्शन स्ट्रिंग से जुड़े उपयोगकर्ता के पास सर्वर पर लगभग शून्य अनुमतियां हैं। उनके पास केवल एक ही अनुमति है कि SCHEMA पर EXECUTE और CONTROL जिसमें संग्रहीत कार्यविधियाँ हैं।
- फ्रंट एंड की एकमात्र पहुंच संग्रहित प्रक्रियाओं के माध्यम से है। हम सामने वाले को कभी भी SQL स्ट्रिंग्स भेजने की अनुमति नहीं देते हैं।
- डेटा को निष्पादन योग्य की तुलना में एक अलग स्कीमा में रखा जाता है, डेटा स्कीमा में कनेक्शन स्ट्रिंग से जुड़े उपयोगकर्ता के पास शून्य अनुमतियां होती हैं, वे इसे नहीं देख सकते हैं, इसे सूंघ नहीं सकते हैं या इसे स्पर्श नहीं कर सकते हैं।
- संग्रहीत कार्यविधियाँ नो-लॉगिन उपयोगकर्ता को अनुमतियाँ प्रदान करती हैं जिनके पास खरीद को निष्पादित करने के लिए पर्याप्त अनुमतियाँ हैं। ('नो-लॉगिन यूजर' के रूप में निष्पादित)
यह वह सब है जो हम कर सकते हैं। हमें कनेक्शन स्ट्रिंग को कहीं किसी तरह से उजागर होने से रोकने का कोई तरीका नहीं मिला है।
एलेक्स ने नीचे पूछे गए सवाल के जवाब में। (टिप्पणी के लिए बहुत लंबा)
टिप्पणी। निम्नलिखित MS SQL सर्वर के लिए है, यह अन्य DBMS सिस्टम पर लागू हो सकता है लेकिन मैं किसी अन्य के लिए पुष्टि नहीं कर सकता।
एक डेटाबेस में स्कीमा होता है, स्कीमा में डेटाबेस ऑब्जेक्ट जैसे टेबल, दृश्य, संग्रहीत कार्यविधियाँ होती हैं। schmea आपको डेटा बेस ऑब्जेक्ट्स को बंद करने की अनुमति देता है, उदाहरण के लिए, यदि आपके पास टेबल का एक समूह था जिसे किसी को देखने की अनुमति थी, तो वे एक सामान्य स्कीमा में जा सकते थे, यदि आपके पास पेरोल जानकारी थी जिसे आपको सुरक्षित करने की आवश्यकता थी तो आप डाल सकते थे कि एक पेरोल स्कीमा में। फिर आप उनके अंदर मौजूद वस्तुओं के प्रकार के आधार पर SCHEMA पर विभिन्न सुरक्षा उपाय कर सकते हैं। ग्राफिकली वे हार्ड ड्राइव पर फ़ोल्डर्स की तरह दिखते हैं और उनके नीचे सभी डेटाबेस ऑब्जेक्ट होते हैं। जब आप अपने सर्वर को सक्रिय करते हैं, तो कई स्कीमा होते हैं जो स्वचालित रूप से निर्मित होते हैं। आप जिस चीज से सबसे ज्यादा परिचित हैं, वह DBO schmea होगी। यदि आपके व्यवस्थापक ने इसे आपके डिफ़ॉल्ट स्कीमा के रूप में सेट किया है, तो हो सकता है कि आपको इसकी जानकारी न हो।
हम जो करते हैं वह सभी डेटा को डेटा स्कीमा में रखना है, इसका मतलब है कि केवल टेबल की अनुमति है। इसलिए अगर हमारे पास पेरोल डेटाबेस होता तो डेटा टेबल डेटापेरोल नामक स्कीमा में चले जाते।
एक संग्रहित प्रक्रिया SQL कोड का एक ब्लॉक, या ब्लॉक है जिसे डेटाबेस सर्वर कॉल करने पर चला सकता है। यह डेटा की तालिका, या एकल मान लौटा सकता है। इसे C# में एक विधि के रूप में सोचें।
संग्रहीत कार्यविधियों में इनपुट और रिटर्न पैरामीटर होते हैं जो SQL कोड में उपयोग किए जाते हैं। Paramatarized संग्रहीत कार्यविधियाँ SQL इंजेक्शन हमलों के खिलाफ एक मजबूत बचाव हैं।
हमारा प्रोटोकॉल कहता है कि संग्रहीत कार्यविधियाँ और दृश्य सभी 'प्रोग' से पहले एक स्कीमा में संग्रहीत हैं। तो पेरोल डेटाबेस के मामले में वे सभी ऑब्जेक्ट जो डेटा नहीं हैं, प्रोगपेरोल स्कीमा के अंदर हैं।
कनेक्शन स्ट्रिंग द्वारा परिभाषित उपयोगकर्ता के पास केवल 'प्रोग' स्कीमा पर नियंत्रण और निष्पादन अनुमतियां होती हैं। यह उन्हें संग्रहीत प्रक्रिया को कॉल करने की अनुमति देता है। कनेक्शन स्ट्रिंग द्वारा परिभाषित उपयोगकर्ता को अन्य सभी अनुमतियों से वंचित किया जाता है। इस उपयोगकर्ता को हर जगह सभी अनुमतियों से भी वंचित किया गया है। संग्रहीत कार्यविधि में, डेटा तक पहुँचने की अनुमति किसी लॉगिन नहीं उपयोगकर्ता को दी जाती है जिसके पास EXECUTE AS कमांड का उपयोग करके 'डेटा' स्कीमा से डेटा पुनर्प्राप्त करने की अनुमति होती है।
सामने के छोर में कोई sql नहीं है। सभी फ्रंट एंड प्रोग्रामर जानते हैं कि संग्रहीत प्रक्रियाओं का नाम क्या है, पैरामीटर और रिटर्न प्रकार और मान।
इस तरह, भले ही हमलावर आपके प्रोग्राम से कनेक्शन स्ट्रिंग को छेड़ने का प्रबंधन करता है, फिर भी उनके पास आपके डेटाबेस में कुछ भी करने में सक्षम होने के लिए बहुत काम है क्योंकि उनके पास जो उपयोगकर्ता है वह केवल एक संग्रहीत प्रक्रिया को निष्पादित कर सकता है।पी>
अगर आपको पता नहीं है कि इनमें से कोई भी सामान क्या है तो आपको वास्तव में आपके लिए अपना सिस्टम सेट करने के लिए एक डीबी प्रोग्रामर प्राप्त करने की आवश्यकता है।