Как обезопасить MongoDB с помощью имени пользователя и пароля - PullRequest
347 голосов
/ 03 февраля 2011

Я хочу настроить аутентификацию имени пользователя и пароля для моего экземпляра MongoDB, чтобы при любом удаленном доступе запрашивались имя пользователя и пароль.Я попробовал туториал с сайта MongoDB и сделал следующее:

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

После этого я вышел и снова запустил mongo.И мне не нужен пароль для доступа к нему.Даже если я подключаюсь к базе данных удаленно, у меня не запрашивается имя пользователя и пароль.


ОБНОВЛЕНИЕ Вот решение, которое я в итоге использовал

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.

Ответы [ 14 ]

103 голосов
/ 03 февраля 2011

Вам нужно запустить mongod с параметром --auth после настройки пользователя.

С сайта MongoDB:

Запустите базу данных (процесс mongod) с опцией --auth, чтобы включить безопасность. Вы должны либо добавить пользователя в базу данных администратора до запуск сервера с --auth или добавление первого пользователя из локальный интерфейс.

Аутентификация MongoDB

61 голосов
/ 21 марта 2017

Ух ты так много сложных / запутанных ответов здесь.

Это по состоянию на 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({})
60 голосов
/ 04 ноября 2013

Сначала удалите комментарий в строке, начинающейся с #auth=true в вашем файле конфигурации mongod (путь по умолчанию /etc/mongo.conf). Это включит аутентификацию для mongodb.

Затем перезапустите mongodb: sudo service mongod restart

43 голосов
/ 24 января 2016

Этот ответ для Mongo 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
26 голосов
/ 20 ноября 2012

Вот код JavaScript для добавления пользователей.

  1. Запуск mongod с --auth = true

  2. Доступ к базе данных администратора из оболочки mongoи передайте файл JavaScript.

    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. Теперь добавление пользователя завершеномы можем проверить доступ к базе данных из оболочки mongo

11 голосов
/ 23 октября 2016

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

Редактировать файл настроек Монго;

sudo nano /etc/mongod.conf

Добавить строку:

security.authorization : enabled

Перезапустить службу

sudo service mongod restart

Привет

8 голосов
/ 07 декабря 2016

Первый запуск 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/

3 голосов
/ 17 декабря 2017

Создание пользователя с паролем для конкретной базы данных для безопасного доступа к базе данных:

use dbName

db.createUser(
   {
     user: "dbUser",
     pwd: "dbPassword",
     roles: [ "readWrite", "dbAdmin" ]
   }
)
3 голосов
/ 03 февраля 2011

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

use mydatabase

Для получения дополнительной помощи см. Этот постhttps://web.archive.org/web/20140316031938/http://learnmongo.com/posts/quick-tip-mongodb-users/

2 голосов
/ 04 марта 2019

Выполните следующие шаги в порядке

  • Создание пользователя с помощью CLI
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
  • Включите аутентификацию, чем она отличается, в зависимости от вашей ОС, если вы используете Windows, вы можете просто mongod --auth, в случае с Linux вы можете отредактировать файл /etc/mongod.conf, добавив security.authorization : enabled, а затем перезапустить службу mongd.
  • Для подключения через cli mongo -u "admin" -p "admin123" --authenticationDatabase "admin". Вот и все

Вы можете проверить этот пост , чтобы углубиться в детали и научиться подключаться к нему с помощью mongoose.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...