मानगो में प्रमाणित नहीं किया जा सकता, "सामान्य विफल रहता है"


90

मैंने इन निर्देशों का उपयोग करते हुए मानगो के लिए एक व्यवस्थापक उपयोगकर्ता बनाया है:

http://docs.mongodb.org/manual/tutorial/add-user-administrator/

आम ग्राहक से ऐसा लगता है कि मैं प्रमाणित कर सकता हूं:

> use admin
switched to db admin
> db.auth('admin','SECRETPASSWORD');
1
>

लेकिन मैं किसी अन्य तरीके से कनेक्ट नहीं कर सकता। उदाहरण के लिए:

mongo -u admin -p SECRETPASSWORD

त्रुटि देता है:

JavaScript execution failed: Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.js:L228

मेरे पास auth = trueमें etc/mongod.conf

मैं क्या खो रहा हूँ?


1
हो सकता है कि मानगो को केवल लोकलहोस्ट से कनेक्शन स्वीकार करने के लिए कॉन्फ़िगर किया गया हो? कम से कम मेरे साथ ऐसा हुआ जब मैं अपने कंप्यूटर से इसे एक्सेस करने की कोशिश कर रहा था।
अक्कू

मुझे नहीं लगता कि, मैं उस त्रुटि संदेश को उसी मशीन से कनेक्ट करते समय मंगोड के रूप में प्राप्त करता हूं। इसके अलावा, यह मुझे उपयोगकर्ता नाम / पासवर्ड की आपूर्ति के बिना कनेक्ट करने देता है और फिर db.auth (मेरा पहला उदाहरण) के साथ उपयोगकर्ता नाम / पासवर्ड की आपूर्ति करता है।
जस्टकेविन

पुनश्च: db.changeUserPassword("admin", "password") प्रत्येक डेटाबेस के लिए पासवर्ड बदलने के लिए।
लैगिंगसर्प्लेक्स

मदद कर सकते हैं stackoverflow.com/questions/47253584/…
डेविटितो

जवाबों:


100

प्रमाणीकरण एक डेटाबेस स्तर पर प्रबंधित किया जाता है। जब आप डेटाबेस का उपयोग करके सिस्टम से कनेक्ट करने का प्रयास करते हैं, तो मूंगो वास्तव में आपके द्वारा संग्रह में प्रदान किए गए क्रेडेंशियल्स की जांच करता है <database>.system.users। इसलिए, मूल रूप से जब आप "परीक्षण" से जुड़ने की कोशिश कर रहे हैं, तो यह क्रेडेंशियल्स की तलाश करता है test.system.usersऔर एक त्रुटि देता है क्योंकि यह उन्हें नहीं मिल सकता है (जैसा कि वे संग्रहीत हैं admin.system.users)। सभी डीबी से पढ़ने और लिखने का अधिकार होने का मतलब यह नहीं है कि आप उनसे सीधे जुड़ सकते हैं।

आपको पहले क्रेडेंशियल रखने वाले डेटाबेस से कनेक्ट करना होगा। प्रयत्न:

mongo admin -u admin -p SECRETPASSWORD

अधिक जानकारी के लिए, इस http://docs.mongodb.org/manual/reference/privilege-documents/ की जाँच करें


4
जैसा कि नीचे भी उल्लेख किया गया है, एक अन्य उत्तर में (लेकिन मुझे यह याद आया, क्योंकि मैंने केवल शीर्ष मतदाताओं को देखा था) मुझे उपयोगकर्ता नाम और पासवर्ड के आसपास एकल उद्धरण जोड़ने की आवश्यकता थी , इससे पहले कि मैं लॉगिन कर
सकूं

हां, यदि आप दोहरे उद्धरण चिह्नों का उपयोग करते हैं, तो मुहावरेदार बैश संभवतः सभी प्रकार की गंदी चीजें करेंगे।
मूडबॉम

73

मुझे यह त्रुटि भी मिली, कि मुझे उस डेटाबेस को निर्दिष्ट करने की आवश्यकता थी जहाँ उपयोगकर्ता प्रमाणीकरण डेटा संग्रहीत किया गया था:

mongo -u admin -p SECRETPASSWORD --authenticationDatabase व्यवस्थापक

अपडेट 18 नवंबर 2017:

mongo admin -u admin -p

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


2
हां, यह जवाब काम करता है! @Gilo के उत्तर के साथ इसे जोड़ते हुए, निम्नलिखित कमांड मेरे लिए काम करती है: "mongo MYDB -u admin -p SECRETPASSWORD --authenticationDatabase admin"
त्सुंग-टिंग कुओ

38

आपको अपने मैंगो शेल को अपग्रेड करने की आवश्यकता हो सकती है। मेरे पास स्थानीय रूप से मोंगो शेल का संस्करण 2.4.9 था, और मुझे यह त्रुटि एक मोंगो 3 डेटाबेस से कनेक्ट करने की कोशिश कर रही थी। शेल संस्करण को 3 में अपग्रेड करने से समस्या हल हो गई।


7
जैसा कि डॉक्टर में कहा गया है: 3.0 से पहले के मोंगो शेल के संस्करण मोंगोबीडी के 3.0 परिनियोजन के साथ संगत नहीं हैं जो पहुंच नियंत्रण को लागू करते हैं। यदि आपके पास 3.0 MongoDB परिनियोजन है जिसे अभिगम नियंत्रण की आवश्यकता है, तो आपको मोंगो शेल के 3.0 संस्करणों का उपयोग करना होगा।
फिंच_पावर

32

मुझे पता है कि यह स्पष्ट लग सकता है, लेकिन मुझे भी काम करने से पहले u / n और p / w के आसपास एक ही उद्धरण का उपयोग करना था

mongo admin -u 'उपयोगकर्ता' -p 'पासवर्ड'


2
मैं आपके जवाब पर अड़ गया क्योंकि mongo -u <myuser> -p <mypasswdकाम नहीं कर रहा था। adminयहाँ फर्क क्यों पड़ता है?
ब्ल्यू

2
यह mongo को डेटाबेस एडमिन का उपयोग करने के लिए कहता है। यदि आप एक और डेटाबेस बनाते हैं, और उस डेटाबेस में उपयोगकर्ता को असाइन करते हैं, तो यह mongo होगा <other_database> -u उपयोगकर्ता -p पासवर्ड
Afriyandi Setiawan

बहुत बहुत धन्यवाद। यह वास्तव में अजीब है मैं कोई उद्धरण और दोहरे उद्धरण चिह्नों का उपयोग नहीं कर रहा था जो काम नहीं कर रहे थे। इतना मूर्खतापूर्ण है।
जंग

20

MongoDB 3.0 में, यह अब कई प्रमाणीकरण तंत्रों का समर्थन करता है।

  1. MongoDB चैलेंज और रिस्पांस (SCRAM-SHA-1) - डिफ़ॉल्ट रूप से 3.0 में
  2. MongoDB चैलेंज और प्रतिक्रिया (MONGODB-CR) - पिछले डिफ़ॉल्ट (<3.0)

यदि आपने नए 3.0 डेटाबेस के साथ नए उपयोगकर्ताओं को बनाया है, तो वे SCRAM-SHA-1 का उपयोग करके बनाए गए होंगे।

तो आपको उस प्रमाणीकरण के लिए सक्षम ड्राइवर की आवश्यकता होगी:

http://docs.mongodb.org/manual/release-notes/3.0-scram/#considerations-scram-sha-1-drivers

यदि आपके पास मौजूदा उपयोगकर्ता डेटा के साथ 2.x से डेटाबेस अपग्रेड किया गया है, तो वे अभी भी MONGODB-CR का उपयोग कर रहे हैं, और उपयोगकर्ता प्रमाणीकरण डेटाबेस को अपग्रेड करना होगा:

http://docs.mongodb.org/manual/release-notes/3.0-scram/#upgrade-mongodb-cr-to-scram

अब, SCRAM-SHA-1 के साथ बनाए गए उपयोगकर्ताओं के साथ MongoDB 3.0 से जुड़ने के लिए प्रमाणीकरण डेटाबेस (कमांड लाइन मोंगो क्लाइंट के माध्यम से) को निर्दिष्ट करना आवश्यक है, और ड्राइवर का उपयोग करते हुए अन्य तंत्र का उपयोग करना।

$> मोंगू-यू USER -p PASSWORD --authenticationDatabase व्यवस्थापक

इस स्थिति में, "व्यवस्थापक" डेटाबेस, जो डिफ़ॉल्ट भी है, को प्रमाणित करने के लिए उपयोग किया जाएगा।


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

मोंगो-जावा-चालक-3.2.2.jar 2. MongoCredential.createCredential को MongoCredential.createMongoCRCredential बदल दिया करने के लिए 1. बदल दिया मोंगो-जावा-चालक-2.12.3.jar: यह मेरा मामला था
nikolai.serdiuk

ओह। डेवलपर्स के लिए हमें "अमान्य प्रमाणीकरण विधि" जैसी बेहतर त्रुटि देना कितना कठिन होगा
बायरन व्हिटलॉक

13

ऐसा प्रतीत होता है कि समस्या यह है कि मानगो डॉक्स में वर्णित विधि के माध्यम से बनाए गए उपयोगकर्ता के पास डिफ़ॉल्ट डेटाबेस (परीक्षण) से जुड़ने की अनुमति नहीं है, भले ही वह उपयोगकर्ता "userAdminAnyDatabase" और "dbbminAnyDatabase" भूमिकाओं के साथ बनाया गया हो।


एक ही मुद्दा है। वे परीक्षण के बजाय डिफ़ॉल्ट रूप में व्यवस्थापक DB का उपयोग करने का एक तरीका हो सकता है
Idan Shechter

13

इसने मेरी समस्या तय कर दी:

टर्मिनल शेल पर जाएं और टाइप करें mongo

फिर टाइप करें use db_name

फिर टाइप करें:

 db.createUser(
   {
     user: "mongodb",
     pwd: "dogmeatsubparflavour1337",
     roles: [ { role: "dbOwner", db: "db_name" } ]
   }
 )

भी आज़माएं: db.getUsers()

त्वरित नमूना:

const MongoClient = require('mongodb').MongoClient;

// MongoDB Connection Info
const url = 'mongodb://mongodb:dogmeatsubparflavour1337@stackoverflow.com:27017/?authMechanism=DEFAULT&authSource=db_name';
// Additional options: https://docs.mongodb.com/manual/reference/connection-string/#connection-string-options

// Use Connect Method to connect to the Server
MongoClient.connect(url)
  .then((db) => {
    console.log(db);
    console.log('Casually connected correctly to server.');
    // Be careful with db.close() when working asynchronously
    db.close();
  })
  .catch((error) => {
    console.log(error);
  });

2
जोड़ने के लिए: 1. पहले mongodb सुपरडामिन के साथ व्यवस्थापक डेटाबेस में प्रवेश करें: mongo 'mongodb://localhost:27017/admin' -u admin -p 2. फिर लक्ष्य डेटाबेस पर स्विच करें: > use targetDb 3. फिर उपयोगकर्ता जोड़ें> db.createUser(...)
daniel.widyanto

3

एक और संभावना: जब आपने उपयोगकर्ता को बनाया है, तो आप गलती से useएक डेटाबेस को छोड़कर admin, या आपके इच्छित अन्य के अलावा हो सकते हैं । आपको --authenticationDatabaseउस डेटाबेस पर सेट करना होगा जिसे उपयोगकर्ता वास्तव में बनाया गया था।

mongodbमें डाल रहा है test, जब आप खोल खोल डिफ़ॉल्ट रूप से डेटाबेस है, तो आप लिखने के लिए आवश्यकता होगी --authenticationDatabase testबजाय --authenticationDatabase adminअगर आप गलती से किया गया useing testजब तुम भाग गया db.createUser(...)

मान लें कि आपके पास मशीन है जो मोंगोडब इंस्टेंस को चला रही है, तो आप प्राधिकरण को निष्क्रिय कर सकते हैं /etc/mongod.conf(टिप्पणी authorizationजो सुरक्षा के तहत नेस्टेड है), और फिर अपने सर्वर को पुनरारंभ करें, और फिर चलाएं:

mongo
show users

और आपको ऐसा कुछ मिल सकता है:

{
    "_id" : "test.myusername",
    "user" : "myusername",
    "db" : "test",
    "roles" : [
        {
            "role" : "dbOwner",
            "db" : "mydatabasename"
        }
    ],
    "mechanisms" : [
        "SCRAM-SHA-1",
        "SCRAM-SHA-256"
    ]
}

ध्यान दें कि dbमान बराबर होता है test। ऐसा इसलिए है क्योंकि जब मैंने उपयोगकर्ता बनाया था, तो मैं पहले नहीं चला था use adminया use desiredDatabaseName। इसलिए आप उपयोगकर्ता को हटा सकते हैं db.dropUser("myusername")और फिर अपने इच्छित डेटाबेस के तहत दूसरा उपयोगकर्ता बना सकते हैं जैसे:

use desiredDatabaseName
db.createUser(...)

उम्मीद है कि इस सामान के साथ एक noob के रूप में मेरी स्थिति में था जो किसी की मदद करता है।


3

MYSQl और अधिकांश RDBMS के विपरीत, MongoDB का एक अलग सेटअप है।

यह पहले से सेटअप किए गए इनबिल्ट बेसिक रिसोर्स यूज़र के साथ नहीं आता है। आपको मैन्युअल रूप से सेटअप करने की आवश्यकता है। आपको Mongo.conf पर जाने और प्राधिकरण को सक्षम करने की आवश्यकता है, कृपया इसे सावधानीपूर्वक सक्षम करें ताकि ऐसा करने में विफल रहने पर आपके मोंगो इंस्टेंस को शुरू करने में त्रुटि हो। आप तब जांच लें कि आपका मैंगो सर्वर शुरू हुआ या नहीं।

अगला चरण उपयोगकर्ता के रूप में मानगो में प्राधिकरण सक्षम करना है: -

हमें एक उपयोगकर्ता बनाने की जरूरत है, जिसमें रूट एक्सेस हो और मोंगो ऑर्टिकल कॉन्फिगर में बदलाव हो।

व्यवस्थापक DB पर स्विच करें: -

use admin

रूट प्रिविलेज के साथ उपयोगकर्ता बनाएं: -

 db.createUser({user:"admin",
                     pwd:"admin",
                    roles:[{role:"root",
                             db:"admin"
                            }] });

प्राधिकरण सक्षम करने के लिए अपना mongo.conf बदलें: -

security:
    authorization: "enabled"

MongoDB में सेटअप स्‍थिति के लिए कृपया चरण दर चरण इस गाइड से गुजरें।


2

यह एक विशिष्ट मामले की तरह है, लेकिन अगर किसी को मेरी समस्या यहाँ मिलती है:

MongoHQ में, यह आपको "पासवर्ड" नामक फ़ील्ड दिखाएगा, लेकिन यह वास्तव में पासवर्ड का केवल हैश है। आपको एक नया उपयोगकर्ता जोड़ना होगा और पासवर्ड कहीं और संग्रहीत करना होगा (क्योंकि MongoHQ आपको यह नहीं दिखाएगा)।


2

मोंगो शेल में लॉगिन करने का उचित तरीका है

मोंगो लोकलहोस्ट: 27017 -u 'uuuuu' -p '> xxxxxx' --authenticationDatabase dbname


1

आप भी इसे आजमा सकते हैं: -

mongo localhost:27017/admin -u admin -p SECRETPASSWORD

में मिल गया इस पोस्ट

यहाँ स्पष्ट रूप से लोकलहोस्ट कुछ अन्य होस्ट हो सकते हैं और / व्यवस्थापक कुछ अन्य डेटाबेस हो सकते हैं जिन पर प्रमाणीकरण लागू किया गया है


0

जहाँ हम mongo सर्वर से कनेक्ट कर रहे हैं, उस क्लाइंट के mongo संस्करण की जाँच करें।

मेरा मामला, मोंगो सर्वर संस्करण Mongo4.0.0 का था, लेकिन मेरा ग्राहक 2.4.9 संस्करण का था। मोंगो क्ली को अपडेट करने के लिए मोंगो वर्जन को अपडेट करें।

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