Access
 sql >> डेटाबेस >  >> RDS >> Access

MongoDB में भूमिका-आधारित अभिगम नियंत्रण बनाना

MongoDB में भूमिका-आधारित एक्सेस कंट्रोल बनाना

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

मुझे हाल ही में MongoDB संस्करण 2.6 में पेश की गई उपयोगकर्ता-परिभाषित भूमिकाओं का पता लगाने का मौका मिला है। इस लेख में, हम MongoDB उपयोगकर्ता-परिभाषित भूमिकाओं पर चर्चा करेंगे और कुछ कस्टम भूमिकाओं को परिभाषित करेंगे जो आपको उपयोगी लग सकती हैं।

  1. MongoDB में भूमिकाएं बनाएं

    MongoDB में उपयोगकर्ता द्वारा परिभाषित भूमिका बनाना काफी सरल है। आप एक नई भूमिका बनाने के लिए createRole कमांड का उपयोग कर सकते हैं, और जेनेरिक क्रिएट रोल सिंटैक्स इस प्रकार है:

    
    {
       createRole: "<role name>",
       privileges: [{
          resource: { <resource> },
          actions: [ "<action>",] },
       ],
       roles: [
          { role: "<role>", db: "<database>" } | "<role>",],
       writeConcern: <write concern document>
    }
    
    

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

    आइए क्रिएट रोल सिंटैक्स के प्रमुख घटकों पर चलते हैं।

  2. भूमिका विशेषाधिकार

    एक विशेषाधिकार जोड़कर और अपने कार्यों और संसाधनों को परिभाषित करके उपयोगकर्ता द्वारा परिभाषित भूमिका के लिए अनुमतियां बनाएं:

    विशेषाधिकार कार्रवाइयां

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

    
    privileges:
    [
       {resource: {db: "mydb", collection: "" },
       actions: [ “find”,”insert”,”update” ] }
    ]
    
    

    विशेषाधिकार संसाधन

    संसाधन दस्तावेज़ उस दायरे को निर्दिष्ट करता है जिस पर आपकी विशेषाधिकार कार्रवाइयां लागू होंगी, और विभिन्न ग्रैन्युलैरिटी पर निम्नानुसार सेट की जा सकती हैं:

    a. संग्रह

    संसाधन को संसाधन पर सेट किया जा सकता है:{db: "<db-name>", collection: "<collection name>" } केवल उस विशेष संग्रह को निर्दिष्ट कार्रवाइयां प्रदान करने के लिए।

    b. डेटाबेस

    संसाधन को संग्रह पैरामीटर को खाली छोड़कर किसी विशेष डेटाबेस पर सेट किया जा सकता है। संसाधन स्ट्रिंग संसाधन:{db: "<db-name>", collection: "<collection name>" } पूरे डेटाबेस के दायरे को सेट करता है।

    c. डेटाबेस में एकल संग्रह

    संसाधन को संसाधन का उपयोग करके एक विशेष संग्रह पर सेट किया जा सकता है:{db: ", collection: "<collection name>" } सभी डेटाबेस पर संग्रह की अनुमति देने के लिए। यह अनुमति केवल व्यवस्थापक डेटाबेस पर बनाई गई भूमिका में जोड़ी जा सकती है।

    d. डेटाबेस में एकाधिक संग्रह

    संसाधन को db और संग्रह पैरामीटर दोनों को छोड़कर सभी डेटाबेस में सभी संग्रह (सिस्टम संग्रह को छोड़कर) पर सेट किया जा सकता है खाली। संसाधन:{db: "", collection: "" } . यह संसाधन, ऊपर वाले की तरह, केवल व्यवस्थापक डेटाबेस पर बनाई गई भूमिका पर ही दिया जा सकता है।

    e. क्लस्टर-व्यापी संसाधन

    संसाधन का उपयोग करके क्लस्टर-व्यापी संसाधन निर्दिष्ट किया जा सकता है:{ cluster : true } . इस क्लस्टर-व्यापी संसाधन का उपयोग सिस्टम की स्थिति को निर्दिष्ट करने के लिए किया जाता है, जैसे शटडाउन replSetReconfig किसी विशेष दस्तावेज़ पर अनुमति देने के बजाय।

    f. सभी संसाधन

    इस दायरे का उपयोग असाधारण परिस्थितियों के अलावा किसी और चीज के लिए करने की अनुशंसा नहीं की जाती है। {anyResource: true } दायरे को सभी संसाधनों पर सेट करने के लिए इस्तेमाल किया जा सकता है।

  3. भूमिकाएं

    इनबिल्ट रोल्स को कस्टम रोल में भी जोड़ा जा सकता है। जब भूमिकाओं:[] पैरामीटर का उपयोग करके एक अंतर्निहित भूमिका जोड़ी जाती है, तो यह कस्टम भूमिका में अंतर्निहित भूमिका की अनुमतियों को जोड़ता है।

    यहां भूमिका पैरामीटर का एक उदाहरण दिया गया है:

    
    roles: [{ role: "read", db: "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;db name&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;"}]
    
    

    इस उदाहरण में, कस्टम भूमिका परिभाषित डेटाबेस पर "रीड" भूमिका की सभी अनुमतियों को इनहेरिट करेगी। यदि कोई भूमिका डेटाबेस db1 पर इनहेरिट की जाती है, तो कस्टम भूमिका या तो डेटाबेस db1 पर या व्यवस्थापक डेटाबेस पर बनाई जा सकती है।

    चिंता लिखें

    लिखने की चिंता MongoDB से अनुरोधित पावती के स्तर को परिभाषित करती है, और डेटाबेस से लेखन पावती को नियंत्रित करने के लिए इस्तेमाल किया जा सकता है। ध्यान दें कि भूमिका बनाते समय एक लिखित चिंता की आवश्यकता नहीं होती है। लेखन चिंता में फ़ील्ड w, j और wtimeout शामिल हो सकते हैं:

    W  -  चिंता लिखें

    फ़ील्ड W का उपयोग यह बताने के लिए किया जा सकता है कि लेखन को कितनी बार प्रचारित किया गया है।

    J  -  चिंता लिखें

    फ़ील्ड J को यह निर्धारित करने के लिए सेट किया जा सकता है कि क्या लेखन पत्रिका को लिखा गया है।

    Wtimeout  -  चिंता लिखें

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

  4. भूमिकाएं सौंपना

    कस्टम भूमिकाएं db विशिष्ट होती हैं, और केवल उसी डेटाबेस में एक उपयोगकर्ता को असाइन की जा सकती हैं।

    मान लें कि हमने डेटाबेस "db1" पर "myrole" की भूमिका बनाई है। हम निम्नलिखित कमांड का उपयोग करके डेटाबेस पर एक उपयोगकर्ता बना सकते हैं:

    
    Use db1
    
    db.createUser({"user" : "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;user&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;",pwd: "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;password&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;","roles" : [{"role" : "myrole", "db" : "db1"}]})
    
    

    उपयोगकर्ता प्रबंधन के बारे में अधिक जानकारी के लिए, MongoDB में उपयोगकर्ता प्रबंधन पर दर्शन की यह पोस्ट देखें।

  5. कस्टम उपयोगकर्ता भूमिकाएं

    आइए कुछ कस्टम भूमिकाओं पर चलते हैं जो उपयोगी हो सकती हैं।

    एकल डीबी - अनुमतियां पढ़ें, डालें और अपडेट करें

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

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

    दायरे के लिए, मान लें कि मेरे पास "db1" नाम का एक db है, जिस पर मैंने उपरोक्त अनुमतियां सेट की हैं। क्रिएट कमांड कुछ इस तरह दिखेगा:

    
    Use db1.
    
    db.createRole(
    
    {
    
    createRole: "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;role-name&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;",
    
    privileges: [
    
    { resource: { db: "db1", collection: "" },
    
    actions: [ "insert","update","createIndex", "createCollection" ] }
    
    ],
    
    roles: [{ role: "read", db: "db1"}]
    
    })
    
    

    उपरोक्त कमांड <role-name> के साथ एक भूमिका बनाएगा डेटाबेस में db1. एक उपयोगकर्ता जिसे उपरोक्त भूमिका द्वारा अनुमति दी गई है, उसके पास "निकालें" विशेषाधिकार कार्रवाई नहीं होगी। साथ ही, ध्यान दें कि db.collection.findAndModify(), db.collection.mapReduce() और  db.collection.aggregate() विधियों को पूरी तरह से नहीं चलाया जा सकता क्योंकि उन्हें हटाने के विशेषाधिकार की आवश्यकता होती है।

    सभी DB - पढ़ें, डालें और अनुमतियां अपडेट करें

    हम सभी DB पर रीड, क्रिएट और अपडेट विशेषाधिकार प्रदान करने के लिए व्यवस्थापक डेटाबेस पर एक भूमिका बना सकते हैं जो ऊपर वाले के समान है। यह भूमिका व्यवस्थापक डीबी पर बनाई जानी चाहिए और बाद के उपयोगकर्ता को भी व्यवस्थापक डीबी पर बनाया जाना चाहिए।

    इस भूमिका के लिए, मानक पठन भूमिका का उपयोग करने के बजाय, हम readAnyDatabase भूमिका से अनुमतियां प्राप्त कर सकते हैं। रोल क्रिएट कुछ इस तरह दिखेगा:

    
    Use admin.
    
    db.createRole(
    
    {
    
    createRole: "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;role-name&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;",
    
    privileges: [
    
    { resource: { db: "", collection: "" },
    
    actions: [ "insert","update","createIndex", "createCollection" ] }
    
    ],
    
    roles: [{ role: "readAnyDatabase", db: "admin"}]
    
    })
    
    

    लेखक की भूमिकाएं लिखें चिंता के साथ

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

    
    Use admin.
    
    db.createRole(
    
    {
    
    createRole: "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;role-name&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;",
    
    privileges: [ ],
    
    roles: [{ role: "readWriteAnyDatabase", db: "admin"}],
    
    writeConcern: { w: “majority”, j: false, wtimeout: 300 }
    
    })
    
    

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक्सेस से किन उद्योगों को सबसे ज्यादा फायदा होता है?

  2. चेतावनी:कार्यालय संस्करण 2204 एक्सेस एप्लिकेशन को तोड़ सकता है

  3. एक्सेस में डेटाबेस डायग्राम कैसे बनाएं

  4. Azure SQL डेटाबेस में माइग्रेट करने के शीर्ष 5 लाभ

  5. हेयर सैलून डेटाबेस प्रोजेक्ट