Как защитить MongoDB с именем пользователя и паролем

Я хочу настроить аутентификацию имени пользователя и пароля для моего экземпляра 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.

Ответ 1

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

С сайта MongoDB:

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

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

Ответ 2

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

Это значение 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) Выйдите из оболочки mongo, повторно подключитесь, выполните аутентификацию как пользователь.

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

Ответ 3

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

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

Ответ 4

Этот ответ для Mongo 3.2.1 Reference

Терминал 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

else:

Error: Authentication failed.
0

Ответ 5

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

  • Запустите mongod с помощью --auth = true

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

Ответ 7

Сначала запустите 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/

Ответ 9

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

use dbName

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

Ответ 10

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

  • Создайте пользователя с помощью 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.

Ответ 11

Эти шаги сработали на меня:

  1. напишите mongod --port 27017 на cmd
  2. затем подключитесь к оболочке монго: монго --port 27017
  3. создать пользователя admin: использовать админ db.createUser( { пользователь: "myUserAdmin", pwd: "abc123", role: [{role: "userAdminAnyDatabase", db: "admin"}] } )
  4. отключить оболочку монго
  5. перезапустите mongodb: mongod --auth --port 27017
  6. начать монго оболочки: mongo --port 27017 -u "myUserAdmin" -p "abc123" --auth enticationDatabase "admin"
  7. Для проверки подлинности после подключения, подключите оболочку mongo к mongod: монго --port 27017
  8. переключиться на базу данных аутентификации: использовать админ db.auth("myUserAdmin", "abc123"

Ответ 12

после создания нового пользователя, не забудьте оставить grant read/write/root разрешение для пользователя. вы можете попробовать

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

Ответ 13

Рекомендуется подключаться к 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" } ] })

следующий скрипт создаст администратора для БД.

  1. войти в db.admin используя

    mongo -u YourUserName -p YourPassword admin

  2. После входа в систему вы можете создать N номеров базы данных с одинаковыми учетными данными администратора или другими, повторив шаги от 1 до 3.

Это позволяет вам создать другого пользователя и пароль для другой коллекции, которую вы создаете в MongoDB

Ответ 14

Это то, что я сделал в Ubuntu 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

Ответ 15

Вы можете изменить /etc/mongod.conf.

Перед

#security:

После

security:
    authorization: "enabled"

Тогда sudo service mongod restart