उपयोगकर्ता नाम और पासवर्ड के साथ MongoDB कैसे सुरक्षित करें


376

मैं अपने MongoDB उदाहरण के लिए उपयोगकर्ता नाम और पासवर्ड प्रमाणीकरण स्थापित करना चाहता हूं, ताकि कोई भी दूरस्थ पहुंच उपयोगकर्ता नाम और पासवर्ड मांगे। मैंने MongoDB साइट से ट्यूटोरियल की कोशिश की और निम्नलिखित किया:

use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');

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


अद्यतन यहाँ समाधान मैं का उपयोग कर समाप्त हो गया है

1) At the mongo command line, set the administrator:

    use admin;
    db.addUser('admin','123456');

2) Shutdown the server and exit

    db.shutdownServer();
    exit

3) Restart mongod with --auth

  $ sudo ./mongodb/bin/mongod --auth --dbpath /mnt/db/

4) Run mongo again in 2 ways:

   i) run mongo first then login:

        $ ./mongodb/bin/mongo localhost:27017
        use admin
        db.auth('admin','123456');

  ii) run & login to mongo in command line.

        $ ./mongodb/bin/mongo localhost:27017/admin -u admin -p 123456

उपयोगकर्ता नाम और पासवर्ड के लिए एक ही तरह से काम करेंगे mongodumpऔर mongoexport


4
इस MongDB संस्करण 2.2.x के लिए
टॉम Imrei

22
Mongo 3.0.4 में उपयोगकर्ता बनाने के लिए कमांड db.createUser () है
क्रोनोलोजस



1
बस स्पष्ट होने के लिए, यह तार पर गुजरने वाले बाइट्स को एन्क्रिप्ट नहीं करता है। यह केवल एक्सेस कंट्रोल के लिए है।
डैनियल एफ

जवाबों:


117

उपयोगकर्ता की स्थापना के बाद आपको विकल्प के mongodसाथ शुरू करने की आवश्यकता है --auth

MongoDB साइट से:

--authसुरक्षा को सक्षम करने के विकल्प के साथ डेटाबेस (मंगोल प्रक्रिया) चलाएँ । सर्वर शुरू करने से पहले आपने या तो एडमिन को एक यूजर जोड़ा होगा या --authलोकलहोस्ट इंटरफेस से पहला यूजर जोड़ा होगा।

MongoDB प्रमाणीकरण


1
मैंने कोशिश की है कि और उदाहरण के बाद। अब .. मैं सर्वर को फिर से शुरू करने के बाद इसे सेट कर सकता हूं --auth के साथ। हालाँकि, जब मैं लॉगिन करने की कोशिश करता हूं ((./ongo -u theadmin -p 12345) मैं विफल रहता हूं। मैं लॉगिन नहीं कर सकता।
मुरविनलाई

अगर इसके बाद भी आप कनेक्ट नहीं कर सकते हैं, तो ऐसा इसलिए है क्योंकि आप admindb पर कनेक्ट करने का प्रयास कर रहे हैं , दूसरे db का उपयोग करें और पुनः प्रयास करें। केवल एक उपयोगकर्ता Admin (AnyDatabase) पर कनेक्ट हो सकता है admin
22

80

वाह इतने सारे जटिल / भ्रामक जवाब यहाँ।

यह के रूप में है v3.4 के

संक्षिप्त जवाब।

1) एक्सेस कंट्रोल के बिना MongoDB शुरू करें।

mongod --dbpath /data/db

2) उदाहरण से कनेक्ट करें।

mongo

3) उपयोगकर्ता बनाएँ।

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)

4) MongoDB उदाहरण को रोकें और अभिगम नियंत्रण के साथ इसे फिर से शुरू करें।

mongod --auth --dbpath /data/db

5) उपयोगकर्ता के रूप में कनेक्ट और प्रमाणित करें।

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})

दीर्घ उत्तर: इसे पढ़ें यदि आप ठीक से समझना चाहते हैं।

यह वास्तव में सरल है। मैं निम्नलिखित को नीचे दूंगा https://docs.mongodb.com/manual/tutorial/enable-authentication/

यदि आप इस बारे में अधिक जानना चाहते हैं कि भूमिकाएँ वास्तव में यहाँ और अधिक क्या पढ़ती हैं: https://docs.mongodb.com/manual/reference/built-in-roles/

1) एक्सेस कंट्रोल के बिना MongoDB शुरू करें।

mongod --dbpath /data/db

2) उदाहरण से कनेक्ट करें।

mongo

3) उपयोगकर्ता व्यवस्थापक बनाएँ। निम्न adminप्रमाणीकरण डेटाबेस में एक उपयोगकर्ता व्यवस्थापक बनाता है । उपयोगकर्ता एक है dbOwnerसे अधिक some_dbडेटाबेस और नहीं से अधिक adminडेटाबेस, यह याद रखना महत्वपूर्ण है।

use admin
db.createUser(
  {
    user: "myDbOwner",
    pwd: "abc123",
    roles: [ { role: "dbOwner", db: "some_db" } ]
  }
)

या यदि आप एक ऐसा व्यवस्थापक बनाना चाहते हैं जो किसी भी डेटाबेस पर व्यवस्थापक है:

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

4) MongoDB उदाहरण को रोकें और अभिगम नियंत्रण के साथ इसे फिर से शुरू करें।

mongod --auth --dbpath /data/db

5) adminप्रमाणीकरण डेटाबेस के प्रति उपयोगकर्ता व्यवस्थापक के रूप में कनेक्ट और प्रमाणित करें, प्रमाणीकरण डेटाबेस की ओर नहीं some_dbउपयोगकर्ता व्यवस्थापक adminप्रमाणीकरण डेटाबेस में बनाया गया था , उपयोगकर्ता some_dbप्रमाणीकरण डेटाबेस में मौजूद नहीं है ।

use admin
db.auth("myDbOwner", "abc123")

अब आप एक के रूप में प्रमाणीकृत हैं dbOwnerअधिक some_dbडेटाबेस। तो अब अगर आप उस some_dbडेटाबेस की ओर सीधे पढ़ना / लिखना / सामान करना चाहते हैं जिसे आप इसे बदल सकते हैं।

use some_db
//...do stuff like db.foo.insert({x:1})
// remember that the user administrator had dbOwner rights so the user may write/read, if you create a user with userAdmin they will not be able to read/write for example.

भूमिकाओं पर अधिक: https://docs.mongodb.com/manual/reference/built-in-roles/

यदि आप अतिरिक्त उपयोगकर्ता बनाना चाहते हैं जो उपयोगकर्ता प्रशासक नहीं हैं और जो सामान्य उपयोगकर्ता हैं तो नीचे पढ़ना जारी रखें।

6) एक सामान्य उपयोगकर्ता बनाएं। यह उपयोगकर्ता नीचे some_dbप्रमाणीकरण डेटाबेस में बनाया जाएगा ।

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)

7) मानगो शेल से बाहर निकलें, फिर से कनेक्ट करें, उपयोगकर्ता के रूप में प्रमाणित करें।

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})

2
अंत में मुझे अंदाजा हो गया कि वास्तव में क्या हो रहा है।
mestarted


3
मुझे लगता है कि खुद को स्वीकार किए गए उत्तर SO पर ताज़ा हो सकते हैं। यह जुलाई 2017 के रूप में सबसे अधिक प्रासंगिक समाधान है।
एजर्ट

1
कृपया अपना उत्तर अपडेट करें! मुझे नहीं पता कि आपको userAdminAnyDatabase कहाँ से मिला है लेकिन यह काम नहीं करता है। भूमिका सभी dbs पर व्यवस्थापक पहुँच के लिए रूट है
आकाश वर्मा

@AakashVerma docs.mongodb.com/manual/reference/built-in-roles/… ;) इसके अलावा उन विकास उद्देश्यों के लिए उपयोग न करें जहां आपको पता है कि आप से समझौता नहीं किया जा सकता है! (tbh बस कभी रूट रूट का उपयोग न करें)
K - SO में विषाक्तता बढ़ रही है।

63

सबसे पहले, #auth=trueअपने मोंगॉड कॉन्फ़िगरेशन फ़ाइल (डिफ़ॉल्ट पथ) के साथ शुरू होने वाली लाइन को अन-कमेंट करें/etc/mongo.conf ) के । यह मोंगोडब के लिए प्रमाणीकरण सक्षम करेगा।

फिर, मोंगोडब को पुनरारंभ करें: sudo service mongod restart


10
डिफ़ॉल्ट पथ /etc/mongod.confनहीं है/etc/mongo.conf
मिथिला

2
या, पहले असहजता, फिर पुनरारंभ :)))
GioMac

2
अपडेट: अब सेवा को फिर से शुरू करें: sudo service mongodb पुनरारंभ
sharafjaffri

फ़ाइल का स्थान और नाम इस प्रकार है: /etc/mongodb.conf
HGMamaci

46

यह उत्तर मानगो 3.2.1 संदर्भ के लिए है

टर्मिनल 1:

$ mongod --auth

टर्मिनल 2:

db.createUser({user:"admin_name", pwd:"1234",roles:["readWrite","dbAdmin"]})

यदि आप बिना भूमिकाओं के जोड़ना चाहते हैं (वैकल्पिक):

db.createUser({user:"admin_name", pwd:"1234", roles:[]})

यह प्रमाणित करने के लिए कि क्या प्रमाणित है या नहीं:

db.auth("admin_name", "1234")

यह आपको देना चाहिए:

1

अन्य :

Error: Authentication failed.
0

2
2.4 जैसे पुराने संस्करण db.addUser
arviman

मुझे use adminपहले टाइप करना था createUserअन्यथा यह एक त्रुटि देता था।
गुयेलम एफ।

28

यहां उपयोगकर्ताओं को जोड़ने के लिए एक जावास्क्रिप्ट कोड है।

  1. शुरू mongodके साथ--auth = true

  2. Mongo खोल से व्यवस्थापक डेटाबेस तक पहुँचें और जावास्क्रिप्ट फ़ाइल पास करें।

    mongo admin "Filename.js"

    "Filename.js"

    // Adding admin user
    db.addUser("admin_username", " admin_password");
    // Authenticate admin user
    db.auth("admin_username ", " admin_password ");
    // use  database code from java script
    db = db.getSiblingDB("newDatabase");
    // Adding newDatabase database user  
    db.addUser("database_username ", " database_ password ");
  3. अब उपयोगकर्ता जोड़ पूरा हो गया है, हम डेटाबेस को मोंगो शेल से एक्सेस करने की पुष्टि कर सकते हैं


1
किसी फ़ाइल में उपयोगकर्ता नाम और पासवर्ड सेट करना बहुत सुरक्षित नहीं लगता है।
तलाश

जावास्क्रिप्ट। "जावा स्क्रिप्ट" नहीं।
कैमिलो मार्टिन

जावास्क्रिप्ट फ़ाइल का उद्देश्य यहाँ क्या है?
रवि

@CamiloMartin जावास्क्रिप्ट, "जावास्क्रिप्ट" नहीं।
मैडब्रिक्स

14

https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization

मोंगो सेटिंग फ़ाइल संपादित करें;

sudo nano /etc/mongod.conf

लाइन जोड़ें:

security.authorization : enabled

सेवा को पुनरारंभ करें

sudo service mongod restart

सादर


2
मुझे समझ नहीं आता कि हर कोई इसका उल्लेख क्यों नहीं करता। यह इतना महत्वपूर्ण है
जॉन

10

पहले टर्मिनल पर mongoDB चलाएं

mongod

अब कमांडों के बाद मैंगो शेल का उपयोग करें

    use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

एक्सेस कंट्रोल के साथ MongoDB इंस्टेंस को फिर से शुरू करें।

mongod --auth

अब कमांड लाइन का उपयोग करके खुद को प्रमाणित करें

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

मैं इसे पढ़ता हूं

https://docs.mongodb.com/manual/tutorial/enable-authentication/


1
मैंने एक उपयोगकर्ता को परिभाषित किया, रूट के साथ, फिर अधिक से अधिक जोड़ें जब तक मैं आपको MongoDB Enterprise > db.system.users.find() { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SC RAM-SHA-1" : { "iterationCount" : 10000, "salt" : "k96PCEflidMY5seVju+gAw==", "s toredKey" : "CabQTnJtny7cv0wT5X8oX9QOn3A=", "serverKey" : "RJyCdnlIhyIfj2+d44L61 bYK+MU=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "dbAdmin", "db" : "admin" }, { "role" : "userAdmin", "db" : "admin" }, { "role" : "root", "db" : "admin" } ] }
ढूंढता

मैं भी db.changeUserPassword () का इस्तेमाल किया, या किसी भी बात यह थी, उसके बाद भी, जब मैं db.auth फोन ( 'व्यवस्थापक', 'मेरे पास') या जिस तरह से आप यह किया है, यह प्रमाणीकरण उपयोगकर्ता व्यवस्थापक के लिए असफल कहते हैं
डेडमैनएन

rootसंचालन की पहुँच प्रदान करने के लिए भूमिका का उपयोग करें और निम्नलिखित भूमिकाओं के सभी संसाधनों को संयुक्त करें ... भूमिका मूल
लाओद मुहम्मद अल फतिह

8

यह मैंने उबंटू 18.04 पर किया है:

$ sudo apt install mongodb
$ mongo
> show dbs
> use admin
> db.createUser({  user: "root",  pwd: "rootpw",  roles: [ "root" ]  })  // root user can do anything
> use lefa
> db.lefa.save( {name:"test"} )
> db.lefa.find()
> show dbs
> db.createUser({  user: "lefa",  pwd: "lefapw",  roles: [ { role: "dbOwner", db: "lefa" } ]  }) // admin of a db
> exit
$ sudo vim /etc/mongodb.conf
auth = true
$ sudo systemctl restart mongodb
$ mongo -u "root" -p "rootpw" --authenticationDatabase  "admin"
> use admin
> exit
$ mongo -u "lefa" -p "lefapw" --authenticationDatabase  "lefa"
> use lefa
> exit

8

आप बदल सकते हैं /etc/mongod.conf

इससे पहले

#security:

उपरांत

security:
    authorization: "enabled"

फिर sudo service mongod restart


5

नीचे दिए गए चरणों का पालन करें

  • CLI का उपयोग करके एक उपयोगकर्ता बनाएं
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
  • प्रमाणीकरण सक्षम करें, आप अपने OS के आधार पर कैसे भिन्न होते हैं, यदि आप खिड़कियों का उपयोग कर रहे हैं, तो आप बस mongod --authलिनक्स के मामले में /etc/mongod.confजोड़ सकते हैं जिसे आप जोड़ने के लिए फ़ाइल को संपादित कर सकते हैंsecurity.authorization : enabled और फिर मूंग सेवा को पुनः आरंभ कर सकते हैं।
  • क्ली के माध्यम से कनेक्ट करने के लिए mongo -u "admin" -p "admin123" --authenticationDatabase "admin"। बस

आप अधिक जानकारी में जाने के लिए और मोंगोज़ का उपयोग करके इससे जुड़ने के बारे में जानने के लिए इस पोस्ट को देख सकते हैं।


4

डेटाबेस एक्सेस को सुरक्षित करने के लिए एक विशिष्ट डेटाबेस के लिए पासवर्ड के साथ उपयोगकर्ता निर्माण:

use dbName

db.createUser(
   {
     user: "dbUser",
     pwd: "dbPassword",
     roles: [ "readWrite", "dbAdmin" ]
   }
)

4

आपको उस डेटाबेस पर स्विच करना होगा जिसे आप उपयोगकर्ता को चाहते हैं (व्यवस्थापक db पर नहीं) ...

use mydatabase

अधिक मदद के लिए इस पोस्ट को देखें ... https://web.archive.org/web/20140316031938/http://learnmongo.com/posts/quick-tip-mongodb-users/


क्योंकि db = db.getSiblingDB ("newDatabase") सेट करने की आवश्यकता नहीं है;
ओज़ान बेराम

3

इन चरणों ने मुझ पर काम किया:

  1. cmd पर mongod --port 27017 लिखें
  2. फिर मोंगो शेल से कनेक्ट करें: मोंगो --पोर्ट 27017
  3. उपयोगकर्ता व्यवस्थापक बनाएं: व्यवस्थापक db.createUser का उपयोग करें ({उपयोगकर्ता: "myUserAdmin", pwd: "abc123", भूमिकाएँ: [{भूमिका: "userAdminAnyDatabase", db: "admin"}}))
  4. डिस्कनेक्ट मूंग खोल
  5. मोंगोडब को फिर से शुरू करें: मोंगॉड - ऑथ --पोर्ट 27017
  6. mongo शेल शुरू करें: mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
  7. कनेक्ट करने के बाद प्रमाणित करने के लिए, मोंगो शेल को मोंगोड से कनेक्ट करें: मोंगो --पोर्ट 27017
  8. प्रमाणीकरण डेटाबेस पर स्विच करें: व्यवस्थापक db.auth ("myUserAdmin", "abc123" का उपयोग करें

3

MongoDB से कनेक्ट करने के लिए सबसे अच्छा अभ्यास निम्नानुसार है:

  1. प्रारंभिक स्थापना के बाद,

    use admin

  2. फिर व्यवस्थापक उपयोगकर्ता बनाने के लिए निम्न स्क्रिप्ट चलाएँ

    db.createUser( { user: "YourUserName", pwd: "YourPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "clusterAdmin", db: "admin" } ] })

निम्न स्क्रिप्ट DB के लिए व्यवस्थापक उपयोगकर्ता बनाएगा।

  1. का उपयोग कर db.admin में लॉग इन करें

    mongo -u YourUserName -p YourPassword admin

  2. लॉगिन के बाद, आप 1 से 3 को दोहराकर एक ही व्यवस्थापक क्रेडेंशियल या भिन्न के साथ एन नंबर डेटाबेस बना सकते हैं।

यह आपको MongoDB में आपके द्वारा बनाए जा रहे विभिन्न संग्रह के लिए अलग-अलग उपयोगकर्ता और पासवर्ड बनाने की अनुमति देता है


इसके बाद sudo nano /etc/mongod.conf पर जाएं और इस पंक्ति को security.authorization: enable करें, आप यहां संदर्भ लिंक देख सकते हैं: stackoverflow.com/a/57384027/3904109
ड्रैगनफ़ास्ट

2

नया उपयोगकर्ता बनाने के बाद, कृपया उपयोगकर्ता को grant read/write/rootअनुमति देना न भूलें । आप कोशिश कर सकते हैं

cmd: db.grantRolesToUser('yourNewUsername',[{ role: "root", db: "admin" }])

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.