MongoDB Academy · पाठ

प्रमाणीकरण तंत्र: SCRAM और x.509

शिक्षार्थी SCRAM-SHA-256 प्रमाणीकरण सक्षम करेंगे, डेटाबेस उपयोगकर्ता बनाएँगे और आंतरिक क्लस्टर प्रमाणीकरण के लिए x.509 प्रमाणपत्र-आधारित प्रमाणीकरण कॉन्फ़िगर करेंगे।

पाठ 1, कुल 4 में से13 चरण

प्रमाणीकरण तंत्र: SCRAM और x.509, CoddyKit पर MongoDB Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह MongoDB Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। MongoDB Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

प्रमाणीकरण क्यों महत्वपूर्ण है

डिफ़ॉल्ट रूप से, नया इंस्टॉल किया गया MongoDB इंस्टेंस 0.0.0.0:27017 पर सुनता है और किसी प्रमाणीकरण की आवश्यकता नहीं होती। प्रमाणीकरण सक्षम किए बिना MongoDB को इंटरनेट पर खुला छोड़ने के कारण असंख्य वास्तविक सुरक्षा-उल्लंघन हुए हैं। प्रोडक्शन परिनियोजनों में प्रमाणीकरण हमेशा सक्षम होना चाहिए, ताकि केवल प्रमाणित उपयोगकर्ता और सेवाएँ ही कनेक्ट कर सकें। MongoDB कई प्रमाणीकरण तंत्रों का समर्थन करता है—दो सबसे महत्वपूर्ण SCRAM और x.509 प्रमाणपत्र हैं।

mongod में प्रमाणीकरण सक्षम करना

mongod.conf कॉन्फ़िगरेशन फ़ाइल में security.authorization: enabled जोड़कर (या कमांड लाइन पर --auth पास करके) प्रमाणीकरण सक्षम किया जाता है। सक्षम होने के बाद, कनेक्शन के हर प्रयास में मान्य क्रेडेंशियल देना आवश्यक होता है। किसी मौजूदा डिप्लॉयमेंट पर प्रमाणीकरण सक्षम करने से पहले हमेशा एक व्यवस्थापक उपयोगकर्ता बनाएँ — अन्यथा आप स्वयं को बाहर कर लेंगे।

# mongod.conf snippet
security:
  authorization: enabled

# Or start mongod with --auth flag
# mongod --auth --dbpath /data/db

पहला व्यवस्थापक उपयोगकर्ता बनाना

पहला उपयोगकर्ता बनाने के लिए, MongoDB के अनधिकृत मोड में रहते हुए बिना प्रमाणीकरण के (या लोकलहोस्ट अपवाद मोड में) उससे कनेक्ट करें। उसे userAdminAnyDatabase भूमिका दें, ताकि वह अतिरिक्त उपयोगकर्ता बना सके। इसके बाद --auth सक्षम करें और क्रेडेंशियल के साथ फिर से कनेक्ट करें। लोकलहोस्ट अपवाद केवल पहले उपयोगकर्ता के बनाए जाने तक ही बिना प्रमाणीकरण वाले लोकलहोस्ट कनेक्शन की अनुमति देता है।

// Connect without auth, create admin user first
use admin
db.createUser({
  user: 'adminUser',
  pwd: 'StrongPassword123!',
  roles: [
    { role: 'userAdminAnyDatabase', db: 'admin' },
    { role: 'readWriteAnyDatabase', db: 'admin' }
  ]
})

// Reconnect with auth
// mongosh 'mongodb://adminUser:StrongPassword123!@localhost:27017'

SCRAM: डिफ़ॉल्ट प्रमाणीकरण तंत्र

SCRAM (Salted Challenge Response Authentication Mechanism) MongoDB का डिफ़ॉल्ट पासवर्ड-आधारित प्रमाणीकरण प्रोटोकॉल है। MongoDB डिफ़ॉल्ट रूप से SCRAM-SHA-256 (नया और अधिक मज़बूत संस्करण) इस्तेमाल करता है। SCRAM वास्तविक पासवर्ड को नेटवर्क पर भेजने से बचाता है — क्लाइंट और सर्वर नमकीन हैश का उपयोग करके क्रिप्टोग्राफ़िक हैंडशेक करते हैं। क्लाइंट अपने-आप सर्वर द्वारा समर्थित सबसे मज़बूत SCRAM संस्करण चुन लेते हैं।

// Explicitly connect with SCRAM in Node.js
const { MongoClient } = require('mongodb')

const client = new MongoClient(
  'mongodb://myUser:myPassword@localhost:27017/mydb?authSource=admin',
  { authMechanism: 'SCRAM-SHA-256' }  // default, usually omitted
)

await client.connect()

न्यूनतम विशेषाधिकार के साथ अनुप्रयोग उपयोगकर्ता बनाना

हर अनुप्रयोग सेवा का अपना MongoDB उपयोगकर्ता होना चाहिए, जिसके पास केवल आवश्यक अनुमतियाँ हों। केवल-पठन वाली रिपोर्टिंग सेवा के पास विशिष्ट डेटाबेस पर केवल read भूमिका होनी चाहिए। अधिक लेखन वाले API के पास केवल readWrite होना चाहिए। अनुप्रयोग खातों को root या dbOwner देना न्यूनतम विशेषाधिकार के सिद्धांत का उल्लंघन करता है और सुरक्षा-भंग के प्रभाव को बढ़ाता है।

// Read-only reporting user
use myApp
db.createUser({
  user: 'reportingSvc',
  pwd: 'SecurePass!456',
  roles: [{ role: 'read', db: 'myApp' }]
})

// API service user with read/write access
db.createUser({
  user: 'apiSvc',
  pwd: 'AnotherPass!789',
  roles: [{ role: 'readWrite', db: 'myApp' }]
})

x.509 प्रमाणपत्र-आधारित प्रमाणीकरण

x.509 प्रमाणपत्र क्रिप्टोग्राफ़िक कुंजी युग्मों का उपयोग करके पासवर्ड की तुलना में अधिक मज़बूत प्रमाणीकरण प्रदान करते हैं। क्लाइंट उपयोगकर्ता नाम/पासवर्ड के बजाय किसी विश्वसनीय Certificate Authority (CA) द्वारा हस्ताक्षरित प्रमाणपत्र प्रस्तुत करता है। MongoDB प्रमाणपत्र के Subject Distinguished Name (DN) को MongoDB उपयोगकर्ता से संबद्ध करता है। आंतरिक क्लस्टर सदस्य प्रमाणीकरण के लिए यह पसंदीदा तंत्र है (रेप्लिका सेट नोड एक-दूसरे को प्रमाणित करते हैं)।

mongod.conf में x.509 कॉन्फ़िगर करना

x.509 सक्षम करने के लिए आपको TLS (अंतर्निहित परिवहन) कॉन्फ़िगर करना होगा और इंट्रा-क्लस्टर प्रमाणीकरण के लिए security.clusterAuthMode: x509 सेट करना होगा। क्लाइंट प्रमाणीकरण के लिए net.tls.CAFile को अपने CA प्रमाणपत्र पर सेट करें, ताकि MongoDB क्लाइंट प्रमाणपत्रों की पुष्टि कर सके। इसके लिए CA बनाना, प्रत्येक सदस्य और क्लाइंट के लिए प्रमाणपत्रों पर हस्ताक्षर करना और उन्हें सुरक्षित रूप से वितरित करना आवश्यक है।

# mongod.conf for x.509 client + cluster auth
net:
  tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/server.pem
    CAFile: /etc/ssl/ca.pem

security:
  authorization: enabled
  clusterAuthMode: x509

x.509 प्रमाणपत्र से संबद्ध उपयोगकर्ता बनाना

x.509 क्लाइंट प्रमाणीकरण का उपयोग करते समय MongoDB उपयोगकर्ता नाम क्लाइंट प्रमाणपत्र के Subject DN से बिल्कुल मेल खाना चाहिए। उपयोगकर्ता को $external डेटाबेस में बनाएँ (नियमित admin या अनुप्रयोग डेटाबेस में नहीं), क्योंकि क्रेडेंशियल की पुष्टि MongoDB के आंतरिक क्रेडेंशियल संग्रह द्वारा नहीं, बल्कि प्रमाणपत्र द्वारा बाहरी रूप से की जाती है।

// Create user mapped to certificate Subject DN
use $external
db.createUser({
  user: 'CN=apiService,OU=services,O=MyCompany,L=Istanbul,C=TR',
  roles: [{ role: 'readWrite', db: 'myApp' }]
})

// Connect using certificate in Node.js
const client = new MongoClient('mongodb://localhost:27017', {
  tls: true,
  tlsCertificateKeyFile: '/etc/ssl/client.pem',
  tlsCAFile: '/etc/ssl/ca.pem',
  authMechanism: 'MONGODB-X509'
})

SCRAM और x.509 की तुलना

SCRAM को सेट अप करना आसान है — उपयोगकर्ता नाम/पासवर्ड वाला उपयोगकर्ता बनाएँ और कनेक्ट करें। यह अधिकांश अनुप्रयोग सेवाओं और डेवलपर पहुँच के लिए उपयुक्त है। x.509 अधिक जटिल है (इसके लिए PKI अवसंरचना आवश्यक है), लेकिन यह अधिक मज़बूत आश्वासन देता है: बदलने या लीक होने वाले पासवर्ड नहीं होते, तुरंत पहुँच रद्द करने के लिए प्रमाणपत्र निरस्तीकरण सूचियाँ (CRL) होती हैं, और उच्च-सुरक्षा परिवेशों में रेप्लिका सेट सदस्य प्रमाणीकरण के लिए यह अनिवार्य है।

पासवर्ड बदलना और उपयोगकर्ता अपडेट करना

MongoDB db.updateUser() प्रदान करता है, जिससे खाता हटाकर फिर से बनाए बिना किसी मौजूदा उपयोगकर्ता का पासवर्ड बदला जा सकता है। Atlas में क्रेडेंशियल को Atlas UI या API के माध्यम से बदलें। पासवर्ड बदलते समय, कनेक्टिविटी टूटने की अवधि से बचने के लिए पहले अपने अनुप्रयोग की कनेक्शन स्ट्रिंग अपडेट करें। कनेक्शन स्ट्रिंग URI पर्यावरण चर का उपयोग करें, ताकि पासवर्ड बदलने के लिए केवल env अपडेट और अनुप्रयोग को फिर से शुरू करना पड़े।

// Rotate password for an existing user
use admin
db.updateUser('apiSvc', {
  pwd: 'NewStrongerPassword!2024'
})

// Or use changeUserPassword shorthand
db.changeUserPassword('apiSvc', 'NewStrongerPassword!2024')

उपयोगकर्ताओं को देखना और हटाना

अपने MongoDB उपयोगकर्ताओं का नियमित रूप से ऑडिट करें। किसी डेटाबेस के सभी उपयोगकर्ताओं की सूची बनाने के लिए db.getUsers() और किसी विशिष्ट खाते का विवरण देखने के लिए db.getUser('name') इस्तेमाल करें, जिसमें उन्हें दी गई भूमिकाएँ भी शामिल हैं। पुराने या संदिग्ध खातों को db.dropUser() से तुरंत हटाएँ। Atlas में Database Access पैनल का Users अनुभाग सभी क्लस्टरों के उपयोगकर्ताओं की केंद्रीकृत सूची प्रदान करता है।

// List all users in current database
use myApp
db.getUsers()

// Get details of a specific user
db.getUser('apiSvc')

// Remove a user
db.dropUser('oldReportingService')

त्वरित जाँच

इस पाठ में MongoDB और NoSQL डेटाबेस की अवधारणाओं की अपनी समझ जाँचें।

पाठ का पुनरावलोकन

इस पाठ में आपने सीखा: SCRAM-SHA-256 MongoDB का डिफ़ॉल्ट पासवर्ड-आधारित प्रमाणीकरण तंत्र है और अधिकांश अनुप्रयोग उपयोग मामलों के लिए उपयुक्त है, x.509 प्रमाणपत्र अधिक मज़बूत क्रिप्टोग्राफ़िक प्रमाणीकरण प्रदान करते हैं और क्लस्टर-सदस्य के आंतरिक प्रमाणीकरण के लिए पसंद किए जाते हैं, तथा उपयोगकर्ता हमेशा न्यूनतम विशेषाधिकार वाली भूमिकाओं के साथ बनाए जाने चाहिए — अनुप्रयोग खातों के पास कभी भी व्यवस्थापक-स्तर की अनुमतियाँ नहीं होनी चाहिए। आगे हम भूमिका-आधारित पहुँच नियंत्रण पर चर्चा करेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ JavaScript सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
30
पाठ
120

अक्सर पूछे जाने वाले प्रश्न

क्या “प्रमाणीकरण तंत्र: SCRAM और x.509” पाठ निःशुल्क है?

हाँ—“प्रमाणीकरण तंत्र: SCRAM और x.509” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और MongoDB Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। MongoDB Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“प्रमाणीकरण तंत्र: SCRAM और x.509” में मैं क्या सीखूँगा?

शिक्षार्थी SCRAM-SHA-256 प्रमाणीकरण सक्षम करेंगे, डेटाबेस उपयोगकर्ता बनाएँगे और आंतरिक क्लस्टर प्रमाणीकरण के लिए x.509 प्रमाणपत्र-आधारित प्रमाणीकरण कॉन्फ़िगर करेंगे। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ MongoDB Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या MongoDB Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर MongoDB Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“प्रमाणीकरण तंत्र: SCRAM और x.509” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस MongoDB Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर MongoDB Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. प्रमाणीकरण तंत्र: SCRAM और x.509
  2. भूमिका-आधारित अभिगम नियंत्रण: अंतर्निर्मित और कस्टम भूमिकाएँ
  3. स्थिर डेटा का एन्क्रिप्शन और ट्रांज़िट में TLS
  4. क्लाइंट-साइड फ़ील्ड-स्तरीय एन्क्रिप्शन
← MongoDB Academy पर वापस जाएँ