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

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

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

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


UPDATE 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 forma para o mongodump e o mongoexport .

Você precisa iniciar o mongod com a opção --auth depois de configurar o usuário.

Do site do MongoDB:

Execute o database (processo mongod) com a opção --auth para ativar a segurança. Você deve ter adicionado um usuário ao database admin antes de iniciar o servidor com --auth ou include o primeiro usuário da interface localhost.

Autenticação do MongoDB

Primeiro, descomente a linha que começa com #auth=true no seu arquivo de configuração mongod (caminho padrão /etc/mongo.conf ). Isso permitirá a autenticação do mongodb.

Em seguida, reinicie o mongodb: sudo service mongod restart

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ê quiser 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-lhe:

 1 

outro :

 Error: Authentication failed. 0 

Uau tantas respostas complicadas / confusas aqui.

Isso é a partir da v3.4 .

Resposta curta.

1) Inicie o MongoDB sem controle de access.

 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 o controle de access.

 mongod --auth --dbpath /data/db 

5) Conecte e autentique como 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 você quiser entender corretamente.

É muito simples. Vou mudo o seguinte para baixo https://docs.mongodb.com/manual/tutorial/enable-authentication/

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

1) Inicie o MongoDB sem controle de access.

 mongod --dbpath /data/db 

2) Conecte-se à instância.

 mongo 

3) Crie o administrador do usuário. O seguinte cria um administrador de usuário no database de autenticação do admin . O usuário é um dbOwner sobre o database some_db e não sobre o database admin , isso é importante lembrar.

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

Ou se você quiser criar um administrador que seja admin em qualquer database:

 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 o controle de access.

 mongod --auth --dbpath /data/db 

5) Conecte-se e autentique-se como administrador do usuário em relação ao database de autenticação do admin , NÃO em relação ao database de autenticação do some_db . O administrador do usuário foi criado no database de autenticação do admin , o usuário não existe no database de autenticação do some_db .

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

Agora você está autenticado como um dbOwner no database do some_db . Então agora se você quiser ler / escrever / fazer coisas diretamente no database do some_db você 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 sejam administradores de usuários e que sejam apenas usuários normais, continue lendo abaixo.

6) Crie um usuário normal. Este usuário será criado no database de autenticação do some_db abaixo.

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

7) Saia da shell mongo, reconecte, autentique como usuário.

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

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

  1. Comece o mongod com --auth = true

  2. Acesse o database admin do shell mongo e passe o arquivo 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. Agora a adição do usuário está completa, podemos verificar o access ao database do shell mongo

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

Edite o arquivo de configurações do mongo;

 sudo nano /etc/mongod.conf 

Adicione a linha:

 security.authorization : enabled 

Reinicie o serviço

 sudo service mongod restart 

Saudações

Primeiro execute mongoDB no terminal usando

 mongod 

Agora execute o shell do mongo use os seguintes comandos

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

Reinicie a instância do MongoDB com o controle de access.

 mongod --auth 

Agora autentique-se a partir da linha de comando usando

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

Eu li isso de

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

Você precisa mudar para o database que você quer que o usuário (não o admin db) …

use mydatabase

Veja este post para mais ajuda … http://learnmongo.com/posts/quick-tip-mongodb-users/

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

Essas etapas funcionaram comigo:

  1. escrever mongod –port 27017 no cmd
  2. em seguida, conecte-se ao shell mongo: mongo –port 27017
  3. crie o usuário admin: use admin db.createUser ({usuário: “myUserAdmin”, pwd: “abc123”, roles: [{role: “userAdminAnyDatabase”, db: “admin”}]})
  4. desconectar shell mongo
  5. reinicie o mongodb: mongod –auth –port 27017
  6. iniciar shell mongo: mongo –port 27017 -u “myUserAdmin” -p “abc123” –authenticationDatabase “admin”
  7. Para autenticar depois de conectar, conecte o shell mongo ao mongod: mongo –port 27017
  8. alterne para o database de autenticação: use admin db.auth (“myUserAdmin”, “abc123”

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

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

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

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

    use admin

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

    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 admin para o database.

  1. faça o login no db.admin usando

    mongo -u YourUserName -p YourPassword admin

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

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