মঙ্গোতে প্রমাণীকরণ করা যায় না, "লেখক ব্যর্থ"


91

আমি এই দিকনির্দেশগুলি ব্যবহার করে মঙ্গোর জন্য একজন প্রশাসক ব্যবহারকারী তৈরি করেছি:

http://docs.mongodb.org/manual/tutorial/add-user-ad प्रशासক/

মঙ্গো ক্লায়েন্টের থেকে দেখে মনে হচ্ছে আমি প্রমাণীকরণ করতে পারি:

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

তবে আমি অন্য কোনওভাবে সংযোগ করতে পারি না। উদাহরণ স্বরূপ:

মঙ্গো-এডমিন-পি এসক্রিপেটসওয়ার্ড

ত্রুটি দেয়:

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

আমি auth = trueetc/mongod.conf

আমি কী মিস করছি?


4
সম্ভবত মংগো কেবলমাত্র লোকালহোস্ট থেকে সংযোগ গ্রহণের জন্য কনফিগার করা হয়েছে? কমপক্ষে আমার কম্পিউটার থেকে এটি অ্যাক্সেস করার চেষ্টা করার সময় আমাদের প্রোডাকশন মঙ্গদ্ব্ব উদাহরণটি ব্যবহার করে আমার সাথে ঘটেছে।
আক্কু

আমি মনে করি না, মঙ্গোদ হিসাবে একই মেশিন থেকে সংযোগ করার সময় আমি সেই ত্রুটি বার্তাটি পাই। এছাড়াও, এটি আমাকে ব্যবহারকারীর নাম / পাসওয়ার্ড সরবরাহ না করে এবং পরে db.auth (আমার প্রথম উদাহরণ) দিয়ে একটি ব্যবহারকারীর নাম / পাসওয়ার্ড সরবরাহ না করে সংযোগ করতে দেয়।
justkevin

PS: db.changeUserPassword("admin", "password")প্রতিটি ডাটাবেসের জন্য পাসওয়ার্ড পরিবর্তন করতে।
laggingreflex

সাহায্য করতে পারে stackoverflow.com/questions/47253584/...
DaveIdito

উত্তর:


105

প্রমাণীকরণ একটি ডাটাবেস স্তরে পরিচালিত হয়। আপনি যখন কোনও ডাটাবেস ব্যবহার করে সিস্টেমে সংযুক্ত হওয়ার চেষ্টা করেন, মঙ্গো আসলে আপনি সংগ্রহে প্রদত্ত শংসাপত্রগুলির জন্য পরীক্ষা করে <database>.system.users। সুতরাং, মূলত যখন আপনি "পরীক্ষার" সাথে সংযুক্ত হওয়ার চেষ্টা করছেন, এটি শংসাপত্রগুলির সন্ধান করে test.system.usersএবং একটি ত্রুটি প্রদান করে কারণ এটি সেগুলি খুঁজে পায় না (যেমন তারা সঞ্চিত রয়েছে admin.system.users)। সমস্ত ডিবি থেকে পড়ার এবং লেখার অধিকার থাকার অর্থ এই নয় যে আপনি তাদের সাথে সরাসরি সংযোগ করতে পারবেন।

আপনাকে প্রথমে শংসাপত্রগুলি ধারণ করে ডাটাবেসের সাথে সংযোগ স্থাপন করতে হবে। চেষ্টা করুন:

mongo admin -u admin -p SECRETPASSWORD

আরও তথ্যের জন্য, এই http://docs.mongodb.org/manual/references/privilege-documents/ দেখুন


4
নীচে যেমনটি উল্লিখিত হয়েছে, অন্য উত্তরে (তবে আমি এটি মিস করেছি, যেহেতু আমি কেবল শীর্ষ ভোটদানকারীদের দিকে
চেয়েছি)

হ্যাঁ, আপনি যদি ডাবল উদ্ধৃতি ব্যবহার করেন তবে বুদ্ধিমান ব্যাশ সম্ভবত সমস্ত ধরণের বাজে কাজ করবে।
মোডবুম

73

আমি এই ত্রুটিটিটিও পেয়েছি, আমার যা প্রয়োজন ছিল তা হল ডেটাবেস নির্দিষ্ট করা যেখানে ব্যবহারকারীর প্রমাণীকরণের ডেটা সংরক্ষণ করা হয়েছিল:

mongo -u অ্যাডমিন -p সেক্রেটিপাসওয়ার্ড --authentication ডেটাবেস অ্যাডমিন

আপডেট নভেম্বর 18 2017:

mongo admin -u admin -p

একটি ভাল সমাধান। মঙ্গো আপনাকে আপনার পাসওয়ার্ডের জন্য অনুরোধ করবে, আপনি শেল ইতিহাসে আপনার ক্লিয়ারটেক্সট পাসওয়ার্ডটি রাখবেন না যা কেবল ভয়ঙ্কর সুরক্ষা অনুশীলন।


4
হ্যাঁ, এই উত্তরটি কার্যকর! @ গিলোর উত্তরের সাথে এটি মিলিয়ে নীচের কমান্ডটি আমার পক্ষে কাজ করে: "মঙ্গো এমওয়াইডিবি -ইউ অ্যাডমিন
-

38

আপনার নিজের মোঙ্গো শেলটি আপগ্রেড করতে হতে পারে। আমার স্থানীয়ভাবে মোঙ্গো শেলটির ২.৪.৯ সংস্করণ ছিল এবং আমি একটি মঙ্গো 3 ডাটাবেসের সাথে সংযোগের চেষ্টা করার সময় এই ত্রুটিটি পেয়েছি। শেল সংস্করণটি 3 এ আপগ্রেড করা সমস্যার সমাধান করে।


7
দস্তাবেজে বর্ণিত হয়েছে: মঙ্গো শেলের ভার্সনগুলি 3.0 এর আগে মঙ্গোডিবির 3.0 মোতায়েনের সাথে সামঞ্জস্যপূর্ণ নয় যা অ্যাক্সেস নিয়ন্ত্রণ প্রয়োগ করে। আপনার যদি একটি 3.0 মঙ্গোডিবি মোতায়েন থাকে যার অ্যাক্সেস নিয়ন্ত্রণের প্রয়োজন হয় তবে আপনাকে অবশ্যই মঙ্গো শেলের 3.0 সংস্করণ ব্যবহার করতে হবে।
ফিঞ্চ_পাওয়ারগুলি

33

আমি জানি এটি সুস্পষ্ট বলে মনে হতে পারে তবে এটি কাজ করার আগে আমাকে ইউ / এন এবং পি / ডাব্লু এর চারপাশে একটি একক উদ্ধৃতিও ব্যবহার করতে হয়েছিল

মঙ্গো অ্যাডমিন-ইউ 'ইউজার' -পি 'পাসওয়ার্ড'


4
আমি আপনার উত্তরে হোঁচট খেয়েছিলাম কারণ mongo -u <myuser> -p <mypasswdকাজ করছিল না। কেন adminএখানে একটি পার্থক্য আছে?
blz

4
এটি মঙ্গোকে ডেটাবেস অ্যাডমিন ব্যবহার করতে বলে। যদি আপনি অন্য ডাটাবেস, এবং যে ডাটাবেসের নির্ধারিত ব্যবহারকারী তৈরি, তাহলে এটি হতে হবে মোঙ্গো <another_database> -u ব্যবহারকারী -p পাসওয়ার্ড
Afriyandi Setiawan

তোমাকে অনেক ধন্যবাদ. এটি সত্যই অদ্ভুত যে আমি কোনও উদ্ধৃতি এবং ডাবল উদ্ধৃতি ব্যবহার করছি না এটি কাজ করছে না। এতো বোকা।
মরিচা

20

মঙ্গোডিবি 3.0-এ, এটি এখন একাধিক প্রমাণীকরণ প্রক্রিয়া সমর্থন করে।

  1. মঙ্গোডিবি চ্যালেঞ্জ অ্যান্ড রেসপন্স (এসসিআরএএম-এসএএইএ -১) - 3.0 এ ডিফল্ট
  2. মঙ্গোডিবি চ্যালেঞ্জ এবং প্রতিক্রিয়া (মঙ্গোডবি-সিআর) - পূর্ববর্তী ডিফল্ট (<3.0)

আপনি যদি নতুন ব্যবহারকারী তৈরি করা একটি নতুন 3.0 ডেটাবেস দিয়ে শুরু করে থাকেন তবে এসসিআরএএমএইচএএমএইচএএলএ -1 ব্যবহার করে সেগুলি তৈরি করা হত।

সুতরাং আপনার সেই প্রমাণীকরণের যোগ্য ড্রাইভার দরকার হবে:

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

আপনার যদি বিদ্যমান ব্যবহারকারীর ডেটা দিয়ে 2.x থেকে কোনও ডাটাবেস আপগ্রেড করা থাকে তবে তারা এখনও মঙ্গোডবি-সিআর ব্যবহার করবে এবং ব্যবহারকারী প্রমাণীকরণ ডাটাবেসটি আপগ্রেড করতে হবে:

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

এখন, এসসিআরএএম-এসএএএএ -1 এর সাথে তৈরি ব্যবহারকারীদের সাথে মঙ্গোডিবি 3.0 এর সাথে সংযোগ স্থাপনের জন্য প্রমাণীকরণ ডাটাবেস নির্দিষ্ট করতে হবে (কমান্ড লাইন মোঙ্গো ক্লায়েন্টের মাধ্যমে), এবং ড্রাইভার ব্যবহার করা হলে অন্যান্য পদ্ধতি ব্যবহার করতে হবে।

।> মঙ্গো -উ ইউজার-পি পাসওয়ার্ড - প্রমাণীকরণ ডেটাবেস অ্যাডমিন

এই ক্ষেত্রে, "অ্যাডমিন" ডাটাবেস, যা ডিফল্টও প্রমাণীকরণের জন্য ব্যবহৃত হবে।


আচরণের এই পরিবর্তনটি গুরুত্বপূর্ণ, কারণ মঙ্গোডিবি-র একটি নতুন সংস্করণ এবং পাইমোঙ্গোর একটি পুরাতন সংস্করণ মিশ্রিত করার সময় এটি আমাকে ছড়িয়ে দিয়েছে। আপনার মঙ্গো উদাহরণটি নিশ্চিত করতে হবে এবং সমস্ত মঙ্গো ক্লায়েন্ট আপ টু ডেট রয়েছে।
i_grok

মোঙ্গো জাভা-চালক-3.2.2.jar 2. MongoCredential.createCredential করার MongoCredential.createMongoCRCredential পরিবর্তিত 1. পরিবর্তিত মোঙ্গো জাভা-চালক-2.12.3.jar এই আমার ক্ষেত্রে ছিল
nikolai.serdiuk

উঃ "অবৈধ প্রমাণীকরণ পদ্ধতি" এর মতো উন্নততর ত্রুটি আমাদের বিকাশকারীদের পক্ষে দেওয়া কত কঠিন হবে
বায়রন হুইটলক

15

এটি আমার সমস্যাটি স্থির করেছে:

টার্মিনাল শেল এ গিয়ে টাইপ করুন 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);
  });

4
যোগ করতে: 1. প্রথমে মংডোব সুপ্রেডমিনের সাথে অ্যাডমিন ডাটাবেসে লগইন করুন: mongo 'mongodb://localhost:27017/admin' -u admin -p 2. তারপরে লক্ষ্য ডাটাবেসে স্যুইচ করুন: > use targetDb 3. তারপরে ব্যবহারকারী যুক্ত করুন> db.createUser(...)
daniel.widyanto

13

এটা তোলে প্রদর্শিত সমস্যা হল পদ্ধতি মোঙ্গো ডক্স বর্ণিত মাধ্যমে তৈরি করা একটি ব্যবহারকারী ডিফল্ট ডেটাবেস (টেস্ট) সাথে সংযোগ স্থাপনের জন্য অনুমতি নেই যে ব্যবহারকারী "userAdminAnyDatabase" এবং "dbAdminAnyDatabase" ভূমিকা মাধ্যমে তৈরি করা হয়েছে এমনকি যদি হয়।


একই সমস্যা আছে।
এগুলি

3

আরেকটি সম্ভাবনা: আপনি যখন ব্যবহারকারীটি তৈরি করেছেন, আপনি সম্ভবত দুর্ঘটনাক্রমে বা আপনি যা চেয়েছিলেন সেটি ব্যতীত useঅন্য কোনও ডেটাবেস যুক্ত করেছেন admin--authenticationDatabaseআপনাকে সেই ডাটাবেসটিতে সেট করতে হবে যা ব্যবহারকারী প্রকৃতপক্ষে তৈরি হয়েছিল।

mongodbtestশেলটি খোলার সময় আপনাকে ডিফল্টরূপে আপনাকে ডাটাবেসে রেখে দেবে বলে মনে হচ্ছে আপনি দৌড়ানোর সময় ভুলবশত ইঙ্গিত --authenticationDatabase testনা করে বরং আপনাকে লিখতে হবে--authenticationDatabase adminusetestdb.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(...)

আশা করি এটি এই স্টাফটির সাথে নুব হিসাবে আমার পদে থাকা কাউকে সহায়তা করে।


2

এটি একটি নির্দিষ্ট ক্ষেত্রে, তবে যদি কেউ আমার সমস্যাটি নিয়ে আসে তবে:

মঙ্গোএইচকিউ-তে, এটি আপনাকে "পাসওয়ার্ড" নামে একটি ক্ষেত্র দেখাবে, তবে এটি আসলে পাসওয়ার্ডের হ্যাশ। আপনাকে একটি নতুন ব্যবহারকারী যুক্ত করতে হবে এবং পাসওয়ার্ড অন্য কোথাও সংরক্ষণ করতে হবে (কারণ মঙ্গোএইচকিউ আপনাকে এটি দেখায় না)।


2

মঙ্গো শেলটিতে লগইন করার সঠিক উপায়

মঙ্গো লোকালহোস্ট: 27017 -u 'uuuuu' -p '> এক্সএক্সএক্সএক্সএক্সএক্সএক্স' - অরথ্যান্টিফিকেশন ডেটাবেস ডিবি নাম


1

আপনি এটি ব্যবহার করে দেখতে পারেন: -

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

এটি এই পোস্টে পাওয়া গেছে

এখানে স্পষ্টতই লোকালহোস্ট অন্য কোনও হোস্ট হতে পারে এবং / অ্যাডমিন এমন কিছু অন্যান্য ডাটাবেস হতে পারে যার উপর প্রমাণীকরণ প্রয়োগ করা হয়েছে


0

আমরা যেখান থেকে মঙ্গো সার্ভারের সাথে সংযোগ করছি তার ক্লায়েন্টের মঙ্গো সংস্করণটি পরীক্ষা করুন।

আমার ক্ষেত্রে, মঙ্গো সার্ভারটি সংস্করণ মঙ্গো ৪.০.০ ছিল তবে আমার ক্লায়েন্টটি ২.৪.৯ সংস্করণে ছিল। মোঙ্গো ক্লিপ আপডেট করতে মঙ্গো সংস্করণ আপডেট করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.