Подтвердить что ты не робот

MongoDB: установить пользователя/пароль для доступа к db

Я пытаюсь установить пароль для mongodb, чтобы предотвратить доступ к db с пустым входом и проходом (устанавливается по умолчанию).

Я сервер statong mongo:

sudo ./mongod

Начальный клиент:

./mongo

Установка пароля:

use admin
db.addUser("root", "root")
exit

Вывод:

MongoDB shell version: 2.2.0
connecting to: test
> use admin
switched to db admin
> db.addUser("root", "root")
{
    "user" : "root",
    "readOnly" : false,
    "pwd" : "2a8025f0885adad5a8ce0044070032b3",
    "_id" : ObjectId("50c90b94e28c41a388104f64")
}
> exit

Hoever, wheh Я пытаюсь auth с пустыми учетными данными (я использую mViever admin UI), он все еще работает. В противном случае доступ с root/root невозможен. Что я делаю неправильно?

Также пытался запустить сервер mongo с параметром -auth, тот же результат:

./mongod -auth

UPD: после запуска с параметром -auth невозможно войти с любым пропуском. Получение:

Thu Dec 13 03:27:38 uncaught exception: error {
    "$err" : "unauthorized db:admin ns:admin.system.users lock type:1 client:127.0.0.1",
    "code" : 10057
}

Обновление: Я не знаю, что происходит...

> db.auth("root","root");
1
> ^C
bye

Он может войти в систему. Пусть перезапустите ./mongod --auth и ./mongo:

MacBook-Pro-Ilya:bin ilyarusanen$ ./mongo
MongoDB shell version: 2.2.2
connecting to: test
> db.auth("root","root")
Error: { errmsg: "auth fails", ok: 0.0 }
0
> db.test.insert({"yeah":"2342"})
Fri Dec 14 08:52:05 uncaught exception: getlasterror failed: { "errmsg" : "need to login", "ok" : 0 }
> use admin
switched to db admin
> db.addUser("root","root")
Fri Dec 14 08:52:14 uncaught exception: error {
    "$err" : "unauthorized db:admin ns:admin.system.users lock type:1 client:127.0.0.1",
    "code" : 10057
}
> db.auth("root","root")
1

Почему сначала он может войти? Почему после перезапуска монго не может войти? И почему после FAILED попытки addUser, он становится доступным для входа? Спасибо.

UPDATE2: MongoHub кажется auth ok. Однако из NodeJS я все еще не могу войти в систему: я использую такой код:

mongo_db.open(function(err,data){
  if(data){
    data.authenticate("root", "root",function(err2,data2){
         if(data2){
             console.log("Database opened");
         }
         else{
             console.log(err2);
         }
    });
  } else {
       console.log(err);
  }
});

И я получаю:

{ [MongoError: auth fails] name: 'MongoError', errmsg: 'auth fails', ok: 0 }

Но помните, что MongoHub с одинаковыми учетными данными работает нормально.

4b9b3361

Ответ 1

Из вашего комментария вы упомянули, что используете mViewer. Версия 0.9.1 mViewer не поддерживает аутентификацию. Согласно этой проблеме на mViewer GitHub, это разрешено в версии 0.9.2, целью которой было освобождение в октябре.

Перед запуском node с аутентификацией войдите в node и добавьте пользователя. Затем запустите node с помощью --auth и подключитесь к оболочке без mViewer.

На этом этапе вы можете подключиться к базе данных администратора и аутентифицировать пользователя admin:

use admin
db.auth('root', 'root')

Поскольку вы настроили администратора, который будет иметь доступ ко всем базам данных, вам необходимо пройти аутентификацию против базы данных администратора. Как только вы это сделаете, у вас будет доступ ко всем базам данных. Вы также сможете создавать новых пользователей в любой базе данных или создавать новых пользователей только для чтения для всех баз данных.

Если вы создаете нового пользователя, имеющего доступ только к одной базе данных, этому пользователю потребуется use эта база данных и db.auth(name, pass) против него.

Если вы создаете нового пользователя, который имеет доступ только для чтения ко всем базам данных, они будут use admin, а затем db.auth(name, pass) получить доступ только для чтения ко всем базам данных

Дополнительную информацию о настройке аутентификации можно найти здесь и более подробную информацию о настройке пользователей здесь

Примечание. Когда вы запускаете node без --auth, аутентификация не активируется. Это означает, что вы можете подключиться к оболочке и db.auth('root','root'), но она не будет делать ничего доступного. MongoDB не будет запрещать доступ к базам данных без опции командной строки --auth (--keyFile в заштрихованных настройках или наборах реплик)