Como proteger o MongoDB com nome de usuário e senha


376

Desejo configurar a autenticação de nome de usuário e senha para minha instância do MongoDB, para que qualquer acesso remoto solicite o nome de usuário e a senha. Eu tentei o tutorial no site do MongoDB e fiz o seguinte:

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

Depois disso, saí e corri o mongo novamente. E não preciso de senha para acessá-lo. Mesmo se eu me conectar ao banco de dados remotamente, não será solicitado o nome de usuário e a senha.


ATUALIZAÇÃO Aqui está a solução que acabei usando

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

O nome de usuário e a senha funcionarão da mesma maneira para mongodumpe mongoexport.


4
isso por MongDB versão 2.2.x
— Tom Imrei

22
No Mongo 3.0.4, o comando para criar um usuário é db.createUser () .
— Chronologos

4
Por favor, siga este para criar um usuário administrador no MongoDB 3.0 docs.mongodb.org/v3.0/tutorial/add-user-administrator
— Sul Aga

3
Uma atualização para o MongoDB 3.0+: Como configurar a autenticação no MongoDB 3.0 .
— Dan Dascalescu 9/09/16

11
Só para esclarecer, isso não criptografa os bytes que passam pelo fio. É apenas para controle de acesso.
— 21717 Daniel

Respostas:


117

Você precisa começar mongodcom a --authopção depois de configurar o usuário.

No site do MongoDB:

Execute o banco de dados (processo mongod) com a --authopção de ativar a segurança. Você deve ter adicionado um usuário ao banco de dados admin antes de iniciar o servidor --authou adicionar o primeiro usuário a partir da interface localhost.

Autenticação MongoDB


11
Eu tentei isso e segui o exemplo. agora .. eu posso configurá-lo depois de reiniciar o servidor com --auth. No entanto, quando tento fazer login (./mongo -u theadmin -p 12345), falho. Não consigo entrar.
— 28411 murvinlai

Se depois disso você não conseguir se conectar, é porque você está tentando se conectar no adminbanco de dados, use outro banco de dados e tente novamente. Somente um userAdmin (AnyDatabase) pode se conectar admin.
— Vadorequest

80

Uau tantas respostas complicadas / confusas aqui.

Isso é a partir da v3.4 .

Resposta curta.

1) Inicie o MongoDB sem controle de acesso.

mongod --dbpath /data/db

2) Conecte-se à instância.

mongo

3) Crie o usuário.

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)

4) Pare a instância do MongoDB e inicie-a novamente com controle de acesso.

mongod --auth --dbpath /data/db

5) Conecte e autentique como o usuário.

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

Resposta longa: leia isto se quiser entender corretamente.

É realmente simples. Vou burlar o seguinte https://docs.mongodb.com/manual/tutorial/enable-authentication/

Se você quiser saber mais sobre o que as funções realmente fazem, leia mais aqui: https://docs.mongodb.com/manual/reference/built-in-roles/

1) Inicie o MongoDB sem controle de acesso.

mongod --dbpath /data/db

2) Conecte-se à instância.

mongo

3) Crie o administrador do usuário. A seguir, cria um administrador de usuário no adminbanco de dados de autenticação. O usuário é um dbOwnersobre o some_dbbanco de dados e NÃO sobre o adminbanco de dados, isso é importante lembrar.

use admin
db.createUser(
  {
    user: "myDbOwner",
    pwd: "abc123",
    roles: [ { role: "dbOwner", db: "some_db" } ]
  }
)

Ou se você deseja criar um administrador que seja administrador sobre qualquer banco de dados:

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

4) Pare a instância do MongoDB e inicie-a novamente com controle de acesso.

mongod --auth --dbpath /data/db

5) Conecte e autentique como administrador do usuário no adminbanco de dados de autenticação, NÃO no some_dbbanco de dados de autenticação. O administrador do usuário foi criado no adminbanco de dados de autenticação, o usuário não existe no some_dbbanco de dados de autenticação.

use admin
db.auth("myDbOwner", "abc123")

Agora você está autenticado como um dbOwnerover the some_dbdatabase. Então agora, se você deseja ler / escrever / fazer coisas diretamente no some_dbbanco de dados, pode mudar para ele.

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.

Mais sobre funções: https://docs.mongodb.com/manual/reference/built-in-roles/

Se você deseja criar usuários adicionais que não são administradores de usuários e que são apenas usuários normais, continue lendo abaixo.

6) Crie um usuário normal. Este usuário será criado no some_dbbanco de dados de autenticação abaixo.

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)

7) Saia do shell mongo, reconecte-se, autentique como o usuário.

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

2
Finalmente, tive uma idéia do que realmente está acontecendo.
— iniciada


3
Acho que desejo que as respostas aceitas possam ser atualizadas no SO. Esta é a solução mais relevante em julho de 2017.
— azatar 17/07/17

11
Atualize sua resposta! Não sei de onde você tirou userAdminAnyDatabase, mas não funciona. A função é raiz para acesso de administrador em todos os dbs.
— Aakash Verma

@AakashVerma docs.mongodb.com/manual/reference/built-in-roles/… ;) NUNCA USE ROOT, a menos que, para fins de desenvolvimento, você saiba que não pode ser comprometido! (tbh nunca usa raiz lol)
— K - A toxicidade no SO está crescendo.

63

Primeiro, #auth=truedescomente a linha que começa no arquivo de configuração do mongod (caminho padrão/etc/mongo.conf ). Isso habilitará a autenticação para o mongodb.

Em seguida, reinicie o mongodb: sudo service mongod restart


10
caminho padrão /etc/mongod.confnão é/etc/mongo.conf
— Mithril

2
ou, em primeiro lugar,
— remova o

2
Atualização: Agora reinicie o serviço com: sudo service mongodb restart
— sharafjaffri

local e nome do arquivo de configuração é como: /etc/mongodb.conf
— HGMamaci

46

Esta resposta é para o Mongo 3.2.1 Reference

Terminal 1:

$ mongod --auth

Terminal 2:

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

se você deseja adicionar sem funções (opcional):

db.createUser({user:"admin_name", pwd:"1234", roles:[]})

para verificar se autenticado ou não:

db.auth("admin_name", "1234")

deve dar a você:

1

outro :

Error: Authentication failed.
0

2
versões mais antigas, tais como 2,4 usaria db.addUser
— arviman

Eu tive que digitar use adminantes, createUsercaso contrário, deu um erro.
— Guillaume F.

28

Aqui está um código javascript para adicionar usuários.

  1. Comece mongodcom--auth = true

  2. Acesse o banco de dados do administrador do mongo shell e passe o arquivo javascript.

    mongo admin "Nome do arquivo.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. Agora que a adição do usuário está completa, podemos verificar o acesso ao banco de dados a partir do mongo shell


11
Definir nome de usuário e senha em um arquivo não parece muito seguro.
— Explorando

Javascript. Não é "script java".
— Camilo Martin

qual é o objetivo do arquivo javascript aqui?
— Ravi

@CamiloMartin JavaScript, não "Javascript".
— Madbreaks 04/03


10

Primeiro execute o mongoDB no terminal usando

mongod

agora execute o mongo shell use os seguintes comandos

    use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

Reinicie a instância do MongoDB com controle de acesso.

mongod --auth

Agora, autentique-se na linha de comando usando

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

Eu li isso

https://docs.mongodb.com/manual/tutorial/enable-authentication/


11
i definido um usuário, com raiz, em seguida, adicionar mais e mais até que eu encontrá-lo, MongoDB Enterprise > db.system.users.find() { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SC RAM-SHA-1" : { "iterationCount" : 10000, "salt" : "k96PCEflidMY5seVju+gAw==", "s toredKey" : "CabQTnJtny7cv0wT5X8oX9QOn3A=", "serverKey" : "RJyCdnlIhyIfj2+d44L61 bYK+MU=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "dbAdmin", "db" : "admin" }, { "role" : "userAdmin", "db" : "admin" }, { "role" : "root", "db" : "admin" } ] }ainda autenticação falhar
— deadManN

Eu até usei db.changeUserPassword (), ou qualquer coisa que fosse, mesmo depois disso, quando chamo db.auth ('admin', 'my pass') ou da maneira que você fez isso, diz que a autenticação falhou para o usuário admin
— deadManN

Use rootrole para fornecer acesso às operações e a todos os recursos das seguintes funções combinadas ... role root
— Laode Muhammad Al Fatih

8

Foi o que fiz no 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

8

Você pode mudar /etc/mongod.conf .

Antes

#security:

Depois de

security:
    authorization: "enabled"

Então sudo service mongod restart


5

Siga as etapas abaixo em ordem

  • Crie um usuário usando a CLI
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
  • Habilite a autenticação, como você faz isso com base no seu sistema operacional; se você estiver usando o Windows, pode simplesmente, mongod --authno caso do Linux, editar o /etc/mongod.confarquivo para adicionarsecurity.authorization : enabled e reiniciar o serviço mongd.
  • Para conectar via CLI mongo -u "admin" -p "admin123" --authenticationDatabase "admin". É isso aí

Você pode conferir este post para entrar em mais detalhes e aprender a se conectar a ele usando o mangusto.


4

Criação de usuário com senha para um banco de dados específico para proteger o acesso ao banco de dados:

use dbName

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


3

Essas etapas funcionaram em mim:

  1. escrever mongod --port 27017 no cmd
  2. em seguida, conecte-se ao mongo shell: mongo --port 27017
  3. crie o usuário admin: use admin db.createUser ({user: "myUserAdmin", pwd: "abc123", funções: [{role: "userAdminAnyDatabase", db: "admin"}]}))
  4. desconectar o shell mongo
  5. reinicie o mongodb: mongod --auth --port 27017
  6. inicie o shell mongo: mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
  7. Para autenticar após a conexão, conecte o shell mongo ao mongod: mongo --port 27017
  8. alterne para o banco de dados de autenticação: use admin db.auth ("myUserAdmin", "abc123"

3

A melhor prática para se conectar ao mongoDB da seguinte maneira:

  1. Após a instalação inicial,

    use admin

  2. Em seguida, execute o seguinte script para criar usuário administrador

    db.createUser( { user: "YourUserName", pwd: "YourPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "clusterAdmin", db: "admin" } ] })

o script a seguir criará o usuário administrador para o banco de dados.

  1. efetue login no db.admin usando

    mongo -u YourUserName -p YourPassword admin

  2. Após o login, você pode criar um número N do banco de dados com a mesma credencial de administrador ou diferente, repetindo 1 a 3.

Isso permite criar usuário e senha diferentes para a coleção diferente que você cria no MongoDB


Depois disso, vá para sudo nano /etc/mongod.conf e coloque esta linha security.authorization: enabled, você pode ver o link de referência aqui: stackoverflow.com/a/57384027/3904109
— DragonFire

2

Depois de criar um novo usuário, não se esqueça da grant read/write/rootpermissão do usuário. você pode tentar o

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.