कोर्स
जैसे-जैसे इस डिजिटल युग में अधिक लोग ऑनलाइन आ रहे हैं, सुरक्षा सुनिश्चित करने और अनुप्रयोगों व सिस्टम्स की पहुँच प्रबंधन के लिए अनुमतियाँ और रोल निर्धारित करने की ज़रूरत बढ़ गई है। रोल-आधारित एक्सेस कंट्रोल एक प्राधिकरण मॉडल है जिसका उपयोग उपयोगकर्ताओं के पूर्व-परिभाषित रोल्स के आधार पर संसाधनों की पहुँच नियंत्रित करने के लिए किया जाता है।
MongoDB के RBAC मॉडल में, क्रियाएँ रोल्स के रूप में अभिव्यक्त होती हैं, जिन्हें उपयुक्त उपयोगकर्ताओं को सौंपा जाता है। उदाहरण के लिए, कई व्यक्तिगत अनुमतियाँ देने के बजाय, आप एक ही रोल (जैसे, dbAdmin) असाइन कर सकते हैं, जिसमें स्वतः ही परिभाषित अनुमतियों का सेट शामिल होता है (जैसे, डेटाबेस की कलेक्शंस पर read)। यह मॉडल उपयोगकर्ता पहुँच को स्केलेबल तरीके से प्रबंधित करना आसान बनाता है।
MongoDB में RBAC सक्षम करना
कोर RBAC मॉडल में, डिफ़ॉल्ट रूप से पहुँच अस्वीकृत रहती है, यानी किसी रोल के बिना उपयोगकर्ता संसाधनों तक नहीं पहुँच सकते। उपयोगकर्ताओं को एक से अधिक रोल असाइन किए जा सकते हैं, और प्रत्येक रोल में कुछ क्षमताओं तक पहुँच के लिए विशिष्ट विशेषाधिकार या अनुमतियाँ हो सकती हैं।
RBAC के मूल सिद्धांत
यहाँ RBAC के बारे में कुछ मुख्य अवधारणाएँ दी गई हैं:
उपयोगकर्ता
RBAC मॉडल में, उपयोगकर्ता वह इकाई है जिसे एक या एक से अधिक रोल दिए जाते हैं, जो डेटाबेस संसाधनों और कार्यों तक उसकी पहुँच निर्धारित करते हैं। यदि कोई रोल असाइनमेंट नहीं है, तो उपयोगकर्ता सिस्टम तक पहुँच नहीं पाएगा। सिस्टम तक पहुँच पाने के लिए उपयोगकर्ताओं को प्रमाणीकरण करना होगा और कम से कम एक रोल असाइन होना चाहिए।
रोल्स
MongoDB स्व-प्रबंधित डिप्लॉयमेंट्स और MongoDB Atlas दोनों के लिए बिल्ट-इन रोल्स और विशेषाधिकार प्रदान करता है। कुछ सामान्य बिल्ट-इन रोल्स हैं read, readWrite, और dbAdmin/atlasAdmin। डेटाबेस एडमिन रोल्स को अन्य किसी भी डेटाबेस उपयोगकर्ता रोल की तुलना में अधिक विशेषाधिकार प्राप्त होते हैं, जिनमें अन्य रोल्स के विशेषाधिकारों का प्रबंधन करने का अधिकार भी शामिल है।
यदि ये बिल्ट-इन रोल्स इच्छित विशेषाधिकारों का सेट प्रदान नहीं करते, तो MongoDB उपयोगकर्ता-परिभाषित रोल्स बनाने और संशोधित करने के तरीके उपलब्ध कराता है।
एक रोल उपयोगकर्ता को सौंपे गए विशेषाधिकारों का एक सेट होता है।
उदाहरण के लिए, “read” रोल में केवल पढ़ने के विशेषाधिकार हो सकते हैं, “admin” रोल में पढ़ने और लिखने के विशेषाधिकार हो सकते हैं, जबकि “owner” रोल को किसी विशेष आइटम (जैसे डेटाबेस, दस्तावेज़ आदि) पर पढ़ने, लिखने और मिटाने के विशेषाधिकार मिल सकते हैं। कोई रोल संसाधनों पर निर्दिष्ट क्रियाएँ करने के विशेषाधिकार देता है। प्रत्येक विशेषाधिकार या तो रोल में स्पष्ट रूप से निर्दिष्ट होता है या किसी अन्य रोल से विरासत में मिलता है, या दोनों।
उपयोगकर्ता-परिभाषित रोल्स / कस्टम रोल्स
MongoDB कई बिल्ट-इन रोल्स प्रदान करता है जिनका उपयोग प्रशासक MongoDB सिस्टम की पहुँच नियंत्रित करने के लिए कर सकते हैं। हालाँकि, यदि मौजूदा रोल्स आपके विशिष्ट विशेषाधिकारों का वर्णन नहीं कर पाते, तो आप डेटाबेस में नए रोल परिभाषित कर सकते हैं और उपयोगकर्ताओं को असाइन कर सकते हैं — यही कस्टम रोल है। admin डेटाबेस में बनाए गए रोल्स को छोड़कर, कोई रोल केवल अपने ही डेटाबेस पर लागू विशेषाधिकार शामिल कर सकता है और केवल अपने ही डेटाबेस के अन्य रोल्स से विरासत ले सकता है।
नया रोल बनाने के लिए, db.createRole() मेथड का उपयोग करें, privileges एरे में विशेषाधिकार और roles एरे में विरासतित रोल्स निर्दिष्ट करें।
MongoDB किसी रोल की अद्वितीय पहचान के लिए डेटाबेस नाम और रोल नाम के संयोजन का उपयोग करता है, और सभी रोल जानकारी को admin डेटाबेस की admin.system.roles कलेक्शन में संग्रहीत करता है।
उदाहरण: यह उदाहरण एक कस्टम रोल (sales_attendant) बनाता है जो केवल sales_db डेटाबेस की sales कलेक्शन में दस्तावेज़ सम्मिलित (insert) कर सकता है।
use sales
db.createRole(
{
role: "sales_attendant",
privileges: [
{
resource: { db: "sales_db", collection: "sales" },
actions: [ "insert" ]
}
],
roles: []
}
)
बिल्ट-इन रोल्स
बिल्ट-इन रोल्स पूर्व-निर्मित रोल्स होते हैं जिन्हें उपयोगकर्ताओं को असाइन किया जाता है, ताकि वे किसी डेटाबेस में कलेक्शंस पर पढ़ने और लिखने जैसे संचालन कर सकें। बिल्ट-इन रोल्स के उदाहरण हैं read, write, readWrite, dbAdmin, और readAnyDatabase।
- read और readWrite (डेटाबेस-स्तरीय पहुँच): ये रोल्स एक निर्दिष्ट डेटाबेस के भीतर सभी non-system कलेक्शंस पर क्रमशः केवल-पढ़ने या पढ़ने/लिखने के संचालन की अनुमति देते हैं।
- dbAdmin: यह रोल किसी विशिष्ट डेटाबेस के प्रबंधन हेतु आवश्यक प्रशासनिक अधिकार प्रदान करता है, जैसे इंडेक्स और कलेक्शंस बनाना, हटाना और संशोधित करना। यह विकास टीमों या डेटाबेस मेंटेनेंस स्क्रिप्ट्स के लिए उपयुक्त है।
- clusterAdmin (संचालनात्मक पहुँच): यह एक उच्च-विशेषाधिकार रोल है, जो प्रायः संचालन (DevOps/Ops) कर्मियों के लिए आरक्षित होता है। यह पूरे MongoDB डिप्लॉयमेंट के प्रबंधन के लिए आवश्यक अनुमतियाँ देता है, जिनमें आवधिक बैकअप बनाना, रेप्लिका सेट्स को कॉन्फ़िगर करना और शार्डिंग शामिल हैं।
विशेषाधिकार (permissions)
विशेषाधिकार क्रियाओं का एक सेट होता है (जैसे, find, insert) जो किसी क्षमता पर अनुमत होते हैं।
उदाहरण के लिए, यदि क्षमता है “ग्राहक को उनके मौजूदा बैलेंस की जानकारी देना,” तो उपयोगकर्ता के विशेषाधिकार (मान लीजिए बैंक टेलर) केवल-पढ़ने तक सीमित हो सकते हैं। यदि क्षमता बैंक खाते की ट्रांज़ैक्शनल सीमा बढ़ाना है, तो विशेषाधिकार पढ़ने और लिखने के हो सकते हैं।
विरासतित विशेषाधिकार
कोई रोल एक या अधिक मौजूदा रोल्स (उनके सभी विशेषाधिकारों सहित) सम्मिलित कर सकता है। उदाहरण के लिए, dbAdmin रोल में read, write और update रोल्स (जो अपने आप में व्यक्तिगत रोल्स हो सकते हैं) शामिल हो सकते हैं, जो उसके विशेषाधिकारों के साथ आते हैं।
संसाधन
संसाधन एक डेटाबेस, कलेक्शन, कलेक्शंस का समूह, या क्लस्टर हो सकता है।
लीस्ट प्रिविलेज सिद्धांत लागू करना
आधुनिक डेटाबेस सुरक्षा में, लीस्ट प्रिविलेज (PoLP) का सिद्धांत अत्यंत महत्वपूर्ण है। यह सिद्धांत कहता है कि प्रत्येक उपयोगकर्ता को केवल उतनी ही न्यूनतम अनुमतियाँ दी जानी चाहिए, जितनी उसके आवश्यक कार्यों के निष्पादन के लिए आवश्यक हैं।
श्रेष्ठ अभ्यास का एक उदाहरण: एक वैश्विक readWrite उपयोगकर्ता के बजाय, एप्लिकेशन-विशिष्ट उपयोगकर्ता बनाएँ। उदाहरण के लिए, यदि आपका inventory सर्विस सिर्फ app_data डेटाबेस के साथ इंटरैक्ट करता है, तो एप्लिकेशन उपयोगकर्ता को केवल उसी एक डेटाबेस पर readWrite एक्सेस दिया जाना चाहिए। यह विभाजन किसी समझौता-ग्रस्त सर्विस को अन्य डेटाबेस (जैसे billing या users) तक अनधिकृत पहुँच पाने से रोकता है।
कोड उदाहरण:
लीस्ट-प्रिविलेज उपयोगकर्ता बनाना। यह उदाहरण एक उपयोगकर्ता (branch_manager) बनाता है, जिसकी पढ़ने/लिखने की पहुँच सख्ती से bank_data डेटाबेस तक सीमित है।
use admin
db.createUser(
{
user: "branch_manager",
pwd: passwordPrompt(),
roles: [
{ role: "readWrite", db: "bank_data" }
]
}
)
श्रेष्ठ अभ्यास
- पहले से स्पष्ट रूप से परिभाषित रोल्स और नीतियाँ बनाएँ और असाइन करें।
- कड़ी सुरक्षा सुनिश्चित करने के लिए लीस्ट प्रिविलेज सिद्धांत का पालन करें।
- जहाँ संभव हो बिल्ट-इन रोल्स का उपयोग करें; असाइन किए गए रोल्स का समय-समय पर ऑडिट करें ताकि विसंगतियाँ पकड़ी जा सकें।
FAQs
MongoDB में RBAC क्या है?
रोल-आधारित एक्सेस कंट्रोल उपयोगकर्ता पहुँच प्रबंधन के लिए प्रयुक्त एक सुरक्षा नियंत्रण है।
बिल्ट-इन रोल और कस्टम रोल में क्या अंतर है?
बिल्ट-इन रोल पूर्व-निर्मित रोल होता है जिसे उपयोगकर्ताओं को असाइन किया जाता है ताकि वे किसी डेटाबेस की कलेक्शंस पर पढ़ने और लिखने जैसे कार्य कर सकें, जबकि कस्टम रोल उपयोगकर्ता-परिभाषित रोल होता है जो आपके इच्छित विशिष्ट विशेषाधिकारों का वर्णन करता है।
लीस्ट प्रिविलेज सिद्धांत महत्वपूर्ण क्यों है?
यह इसलिए महत्वपूर्ण है क्योंकि यह सुनिश्चित करता है कि उपयोगकर्ताओं को उनके आवश्यक कार्यों को करने के लिए न्यूनतम आवश्यक अनुमतियाँ ही दी जाएँ।
यदि आप चाहते हैं कि स्टोर मैनेजर किसी विशेष डेटाबेस से केवल डेटा पढ़ और लिख सके, तो आप कौन-सा रोल असाइन करेंगे?
readWrite
कस्टम रोल बनाने के लिए कौन-सा कमांड उपयोग किया जाता है?
db.createRole()
Afi, MongoDB में डेवलपर्स की पैरवी करती हैं, जहाँ वह Django और Python पर केंद्रित रहते हुए ट्यूटोरियल्स, वार्ताओं और सामुदायिक सहभागिता के माध्यम से इंजीनियरों को आधुनिक डेटा तकनीकों के साथ निर्माण करने में मदद करती हैं। Python और वेब के लिए Microsoft MVP के रूप में मान्यता प्राप्त, वह Django Software Foundation के बोर्ड में सेवा देती हैं और DjangoCon US 2025 की प्रोग्राम चेयर हैं। Afi, Black Python Devs की रीजनल एग्जीक्यूटर भी हैं, साथ ही सक्रिय ओपन-सोर्स योगदानकर्ता और अंतरराष्ट्रीय वक्ता हैं।
