क्या किसी एप्लिकेशन के प्रत्येक उपयोगकर्ता के लिए एक अलग डेटाबेस खाते का उपयोग करना कभी अच्छा है?


13

मैं जिन एप्लिकेशन का उपयोग कर रहा हूं वे सर्वर आधारित हैं और कई उपयोगकर्ताओं के लिए एक डेटाबेस खाते का उपयोग करते हैं, एप्लिकेशन कोड को नियंत्रित करता है कि उपयोगकर्ता क्या कर सकता है, या एकल-उपयोगकर्ता।

क्या कोई सफल जटिल व्यावसायिक अनुप्रयोग हैं, जहां प्रत्येक व्यक्ति को अपने स्वयं के डेटाबेस खाते की आवश्यकता होती है, और डेटाबेस सर्वर को प्रत्येक उपयोगकर्ता को क्या करने की अनुमति दी जानी चाहिए और क्या नहीं करने के बारे में नीति नियमों को लागू करने पर भरोसा किया जाता है?

मैं उन अनुप्रयोगों के बारे में सोच रहा हूं जहां एक से अधिक लोग एक डेटाबेस में जानकारी के लिए योगदान करते हैं, और दूसरों द्वारा संग्रहीत जानकारी तक पहुंच सकते हैं - जैसे कि एक संगठन में सहयोगियों को जो सभी ग्राहक रिकॉर्ड तक पहुंचने की आवश्यकता होती है।

इस प्रकार के सेट अप के लिए भी कोई नाम है?


1
चलो इसे अपने सिर पर पलटें, मैं इसे कभी नहीं करने के लिए अच्छा अभ्यास करूँगा?
स्टीवटेक 26:16

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

@Stevetech ऐसा लगता है कि आपके प्रश्न का उत्तर "हाँ" है। क्या आप इसका पूर्ण उत्तर दे सकते हैं?
bdsl

जवाबों:


6

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

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

एक वेब एप्लिकेशन में डेटाबेस (जैसे पोर्ट 1433) आम तौर पर सीधे उजागर नहीं होता है ताकि आपके पास सुरक्षा का स्तर हो। भले ही वेब एप्लिकेशन सीधे डेटाबेस तक पहुंचता है, लेकिन उपयोगकर्ताओं के पास अभी भी डेटाबेस तक सीधी पहुंच नहीं है ।

अगर क्लाइंट एप्लीकेशन में लॉगइन और पासवर्ड है तो उसे हैक किया जा सकता है। यदि एक डोमेन आप एकीकृत सुरक्षा का उपयोग कर सकते हैं।

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

आपके पास एक मिश्रित मोड हो सकता है जहां कुछ संग्रहीत कार्यविधियाँ हैं, जिनका उपयोग व्यवस्थापक करते हैं और आप किस व्यवस्थापक को ट्रैक करना चाहते हैं। और आप सीधे रिपोर्ट का उपयोग करने वाले उपयोगकर्ताओं को केवल पहुंच प्रदान कर सकते हैं।


5

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

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

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

यहाँ छवि विवरण दर्ज करें

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

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


4

आपको जल्द से जल्द सबसे दानेदार स्तर पर सुरक्षा को लागू करना शुरू करना चाहिए। रोल्स इस संबंध में मदद करते हैं - लोगों को एक बार में कई टेबल तक पहुंच प्रदान करना एक बुरा सपना नहीं है।

हर किसी के लिए एकल खाता यहां और कहीं और सवालों का एक बड़ा स्रोत है - "रिकॉर्ड एक्स को हटा दिया गया था, मुझे यह कैसे पता चलेगा कि यह किसने किया?" - जवाब है आप नहीं कर सकते हैं - व्यक्तिगत खातों और लेखा परीक्षा के बिना ।

"ऑडिटिंग" से मेरा मतलब है कि जबकि यह सब बहुत अच्छी तरह से हर किसी के लिए एक खाता है, इसका मतलब यह नहीं है कि आपके पास सच्ची सुरक्षा है। यदि कहते हैं, मानव संसाधन तालिका में एक रिकॉर्ड हटा दिया जाता है, तो आप सभी को बता सकते हैं कि एचआर तालिका तक पहुंच वाले किसी व्यक्ति ने ऐसा किया है - यह x संख्या में लोग हैं।

आपको अपने सिस्टम में ट्रिगर्स की आवश्यकता होती है जो एक्शन एक्स का प्रदर्शन करने वाले व्यक्तिगत स्तर पर नज़र रखने में सक्षम होने के लिए कार्रवाई लॉग करते हैं (जब तक कि आपके पास आरडीबीएमएस नहीं है जैसे कि ओरेकल जहां इसे स्वचालित बनाया जा सकता है)।

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

शायद अगर आपने हमें अपना आरडीबीएमएस दिया, तो आप अपनी स्थिति के लिए अधिक विशिष्ट / प्रासंगिक सलाह प्राप्त कर सकते हैं?


मुझे नहीं लगता कि यह सीधे मेरी स्थिति से संबंधित है, मैं ज्यादातर जिज्ञासा से बाहर काम कर रहा था। मैं वेब एप्लिकेशन और MySQL के साथ काम करता हूं।
bdsl

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

1
बौद्धिक जिज्ञासा के साथ कुछ भी गलत नहीं है - आपकी पोस्ट का अच्छा स्वागत हुआ है। MySQL शायद सुरक्षा क्षमता में सबसे खराब है (जैसा कि यह कई अन्य में है ...), लेकिन मारियाडीबी उनके पास है और ओपन सोर्स भी है। टिप्पणी के जवाब में - आप जिस बारे में बात कर रहे हैं वह सबसे अच्छा अभ्यास नहीं है - यह सबसे खराब अभ्यास है।
वेरेस

1
@bdsl आप व्यवसाय अनुप्रयोग के साथ सर्वर को मिलाते हैं और यह भ्रम का एक स्रोत है। व्यावसायिक अनुप्रयोगों में डेस्कटॉप अनुप्रयोग शामिल हैं।
पापाराज़ो

1
@bdsl यदि आप डेस्कटॉप एप्लिकेशन को बाहर करने का मतलब नहीं रखते हैं तो टर्म सर्वर एप्लिकेशन का उपयोग करना बंद कर दें।
पापराज्जो

3

हाँ यही है। एक एकल शक्तिशाली उपयोगकर्ता के रूप में एक आवेदन से एक डेटाबेस से कनेक्ट करना कम से कम विशेषाधिकार के सिद्धांत का उल्लंघन है । यह अधिकांश SQL इंजेक्शन हमलों का मूल कारण है।

यह आमतौर पर अज्ञानता के कारण, सादगी के लिए, या कभी-कभी प्रदर्शन के लिए किया जाता है।

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

आप पंक्ति सुरक्षा, स्तंभ सुरक्षा और प्रतिरूपण / प्रॉक्सी प्रमाणीकरण (जो वास्तविक db उपयोगकर्ताओं + कनेक्शन पूलिंग का समर्थन करता है) का समर्थन करने वाला db सर्वर चुनना चाहते हैं

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


क्या Wordpress साइट के प्रत्येक उपयोगकर्ता को अलग-अलग क्रेडेंशियल के साथ डेटाबेस से कनेक्ट करना संभव है?
bdsl

@bdsl हाँ यह है।
नील मैकगिगन

1
क्या आप ऐसा करने के लिए किसी भी गाइड से लिंक कर सकते हैं? मुझे एक त्वरित खोज मिली और वह नहीं मिली। क्या इसका मतलब है कि वर्डप्रेस लॉगिन पेज डीबी में लॉग इन करने के लिए आवश्यक क्रेडेंशियल्स के लिए पूछता है?
bdsl

@ बीडीएसएल मेरी php बहुत जंग लगी है। यहां बताया गया है कि आप इसे स्प्रिंग (जावा) और पोस्टग्रेक्यूक्यू के साथ कैसे करेंगे। blog.databasepatterns.com/2015/03/…stackoverflow.com/questions/2998597/…
नील मैकगिन

1
Wordpress सिर्फ एक प्लगइन-आधारित प्रणाली का एक उदाहरण था। इसे खराब तरीके से सुरक्षा के दृष्टिकोण से बनाया गया है।
नील मैकगिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.