MongoDB उत्पादन क्लस्टर पर निर्मित इंडेक्स को अत्यंत सावधानी से संभालने की आवश्यकता है। हमने अपने पिछले ब्लॉग पोस्ट में से एक में मुद्दों का विस्तार से दस्तावेजीकरण किया है - MongoDB पर बिल्डिंग इंडेक्स के खतरे।
आपके डेटा के आकार के आधार पर, अग्रभूमि और पृष्ठभूमि बिल्ड दोनों आपके क्लस्टर को नीचे ला सकते हैं। तो, आप अपने उपयोगकर्ताओं को MongoDB CLI से गलती से ट्रिगर होने वाले इंडेक्स बिल्ड से कैसे रोकते हैं? संक्षिप्त उत्तर यह है कि आप नहीं कर सकते। हालांकि, आप अपने अधिकांश उपयोगकर्ताओं से "क्रिएटइंडेक्स" विशेषाधिकार को हटा सकते हैं ताकि वे गलती से सीएलआई से इंडेक्स बिल्ड को ट्रिगर न कर सकें। आपके सिस्टम में बहुत कम ऐसे उपयोगकर्ता होने चाहिए जिनके पास डेटाबेस में डेटा लिखने की पहुंच हो। इन उपयोगकर्ताओं में, और भी कम लोगों को अनुक्रमणिका बनाने की अनुमति होनी चाहिए। MongoDB भूमिकाओं का उपयोग करने के तरीके के बारे में एक प्राइमर के लिए, कृपया दस्तावेज़ीकरण देखें - उपयोगकर्ता और भूमिकाएँ प्रबंधित करें।
इसे लागू करने का सबसे अच्छा विकल्प है कि आप अपनी खुद की कस्टम भूमिका बनाएं और अपने उपयोगकर्ताओं के लिए 'CreateIndex' विशेषाधिकार को हटा दें। हालाँकि, हम हाथ से अनुमतियों की सूची नहीं बनाना चाहते थे क्योंकि यह प्रत्येक संदर्भ और संभवतः MongoDB संस्करण के लिए अलग होगा। हमने मौजूदा अंतर्निहित भूमिकाओं में से एक का उपयोग करने के लिए इस छोटी सी स्क्रिप्ट को एक साथ रखा, और इस भूमिका से 'क्रिएटइंडेक्स' विशेषाधिकार को हटा दिया। इस उदाहरण में, हम अंतर्निहित "रीडराइट" भूमिका का उपयोग कर रहे हैं और इस भूमिका से "क्रिएटइंडेक्स' विशेषाधिकार को हटा रहे हैं:
var privs = db.getRole('readWrite',{ showPrivileges: true }); privs.privileges.forEach(function (item, index) { var index = item.actions.indexOf("createIndex"); if (index !== -1) item.actions.splice(index, 1); }); db.createRole({role:"readWriteNoIndex",privileges:privs.privileges,roles:[]});
- कोड स्निपेट की सामग्री को createRole.js के रूप में सहेजें।
- नीचे दिए गए सिंटैक्स का उपयोग करके स्क्रिप्ट चलाएँ:
mongo -u <user> -p <password> <host>:27017/<db name> --authenticationDatabase admin createRole.js
एक बार भूमिका बन जाने के बाद, आप इस भूमिका का उपयोग उपयोगकर्ताओं को आगे बढ़ाने के लिए कर सकते हैं।
|