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.

murvinlai
fonte
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

Alexandru Petrescu
fonte
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({})
K - A toxicidade no SO está crescendo.
fonte
2
Finalmente, tive uma idéia do que realmente está acontecendo.
iniciada
stackoverflow.com/questions/41615574/…
K - A toxicidade no SO está aumentando.
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

Shnkc
fonte
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
Sdembla
fonte
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

Bharadvaj
fonte
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/

PRAVESH kumar
fonte
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
Jinmin
fonte
8

Você pode mudar /etc/mongod.conf .

Antes

#security:

Depois de

security:
    authorization: "enabled"

Então sudo service mongod restart

deusxmachine
fonte
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.

rahil471
fonte
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" ]
   }
)
Hasib Kamal
fonte
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"
Kevin Niasta
fonte
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

Balaji.JB
fonte
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" }])

Haisheng Yu
fonte