Cómo proteger MongoDB con nombre de usuario y contraseña


Quiero configurar la autenticación de nombre de usuario y contraseña para mi instancia de MongoDB, para que cualquier acceso remoto solicite el nombre de usuario y contraseña. Probé el tutorial desde el sitio de MongoDB e hice lo siguiente:

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

Después de eso, salí y corrí mongo de nuevo. Y no necesito contraseña para acceder a ella. Incluso si me conecto a la base de datos de forma remota, no se me solicita el nombre de usuario y la contraseña.


ACTUALIZAR Aquí está la solución que terminé 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

El nombre de usuario y la contraseña funcionarán de la misma manera para mongodump y mongoexport.

Author: Prashant Pokhriyal, 2011-02-03

12 answers

Debe iniciar mongod con la opción --auth después de configurar el usuario.

Del Sitio MongoDB:

Ejecute la base de datos (proceso mongod) con la opción --auth para habilitar seguridad. Debe haber agregado un usuario a la base de datos de administración antes iniciar el servidor con --auth, o añadir el primer usuario desde el interfaz localhost.

Autenticación MongoDB

 98
Author: Alexandru Petrescu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-10 18:57:07

Primero, des-comente la línea que comienza con #auth=true en su archivo de configuración mongod (ruta predeterminada /etc/mongo.conf). Esto habilitará la autenticación para mongodb.

Luego, reinicie mongodb: sudo service mongod restart

 53
Author: Shnkc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-26 10:35:57

Esta respuesta es para Mongo 3.2.1 Referencia

Terminal 1:

$ mongod --auth

Terminal 2:

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

Si desea agregar sin roles (opcional):

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

Para comprobar si está autenticado o no:

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

Debería darte:

1

Else:

Error: Authentication failed.
0
 41
Author: Sdembla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-10 01:14:38

Wow tantas respuestas complicadas / confusas aquí.

Esto es a partir de v3.4.

Respuesta Corta.

1) Inicie MongoDB sin control de acceso.

mongod --dbpath /data/db

2) Conectarse a la instancia.

mongo

3) Crea el usuario.

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

4) Detenga la instancia de MongoDB e inicie de nuevo con control de acceso.

mongod --auth --dbpath /data/db

5) Conectarse y autenticarse como usuario.

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

Respuesta larga: Lea esto si desea correctamente entender.

Es realmente simple. Voy a silenciar a los siguientes https://docs.mongodb.com/manual/tutorial/enable-authentication /

Si desea obtener más información sobre lo que los roles realmente hacen, lea más aquí: https://docs.mongodb.com/manual/reference/built-in-roles/

1) Inicie MongoDB sin control de acceso.

mongod --dbpath /data/db

2) Conectarse a la instancia.

mongo

3) Cree el administrador de usuarios. Lo siguiente crea un administrador de usuario en la base de datos de autenticación admin. El usuario es un dbOwner sobre la base de datos some_db y NO sobre la base de datos admin, esto es importante de recordar.

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

O si desea crear un administrador que sea administrador sobre cualquier base de datos:

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

4) Detenga la instancia de MongoDB e inicie de nuevo con control de acceso.

mongod --auth --dbpath /data/db

5) Conectarse y autenticarse como el administrador de usuarios hacia la base de datos de autenticación admin, NO hacia la some_db base de datos de autenticación. El administrador de usuarios fue creado en la base de datos de autenticación admin, el usuario no existe en la base de datos de autenticación some_db.

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

Ahora se autentica como dbOwner sobre la base de datos some_db. Así que ahora si desea leer / escribir / hacer cosas directamente hacia la base de datos some_db puede cambiar a ella.

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.

Más sobre roles: https://docs.mongodb.com/manual/reference/built-in-roles /

Si desea hacer usuarios adicionales que no son administradores de usuarios y que son solo usuarios normales, siga leyendo a continuación.

6) Crea un usuario normal. Este usuario será creado en la base de datos de autenticación some_db abajo.

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

7) Salga del shell de mongo, vuelva a conectarse, autenticarse como el usuario.

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
 41
Author: Karl Morrison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-31 09:33:02

Aquí hay un código javascript para agregar usuarios.

  1. Inicio mongod con --auth = true

  2. Acceda a la base de datos admin desde mongo shell y pase el archivo javascript.

    Mongo admin " Nombre de archivo.js "

    " Nombre de archivo.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. Ahora que se ha completado la adición de usuarios, podemos verificar el acceso a la base de datos desde mongo shell

 26
Author: Bharadvaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-23 00:10:01

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

Edite el archivo de configuración de mongo;

sudo nano /etc/mongod.conf

Añadir la línea:

security.authorization : enabled

Reinicie el servicio

sudo service mongod restart

Saludos

 10
Author: alicanozkara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-23 11:33:26

Primero ejecute MongoDB en la terminal usando

mongod

Ahora ejecute mongo shell use los siguientes comandos

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

Reinicie la instancia de MongoDB con control de acceso.

mongod --auth

Ahora authenticate desde la línea de comandos usando

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

Lo leí de

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

 5
Author: PRAVESH kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-11 19:19:35

Tendrá que cambiar a la base de datos en la que desea que el usuario (no a la base de datos admin) ...

use mydatabase

Consulte esta publicación para obtener más ayuda ... http://learnmongo.com/posts/quick-tip-mongodb-users /

 3
Author: Justin Jenkins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-04 21:29:38

Creación de usuarios con contraseña para una base de datos específica para asegurar el acceso a la base de datos:

use dbName

db.createUser(
   {
     user: "dbUser",
     pwd: "dbPassword",
     roles: [ "readWrite", "dbAdmin" ]
   }
)
 3
Author: Hasib Kamal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-13 11:55:04

Estos pasos funcionaron en mí:

  1. escriba mongod port port 27017 en cmd
  2. luego conéctese al shell de mongo: mongo port puerto 27017
  3. crear el usuario admin : usar admin db.CreateUser( { usuario: "myUserAdmin", pwd: "abc123", roles: [{role: "userAdminAnyDatabase", db: "admin" } ] } )
  4. desconecte el shell de mongo
  5. reinicie el mongodb: mongod port auth port port 27017
  6. iniciar shell mongo : mongo port port 27017-u "myUserAdmin" - p " abc123 "authentic authenticationDatabase "admin"
  7. Para autenticarse después de la conexión, Conecte el shell de mongo al mongod: mongo port puerto 27017
  8. cambiar a la base de datos de autenticación : usar admin db.auth ("myUserAdmin"," abc123 "
 2
Author: Kevin Niasta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-18 08:58:03

Después de crear un nuevo usuario, por favor, no se olvide de grant read/write/root permiso al usuario. puede probar el

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

 0
Author: Haisheng Yu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-08 09:05:23

La mejor práctica para conectarse a MongoDB de la siguiente manera:

  1. Después de la instalación inicial,

    use admin

  2. A continuación, ejecute el siguiente script para crear admin user

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

El siguiente script creará el usuario admin para la base de datos.

  1. Inicie sesión en la base de datos.administración usando

    mongo -u YourUserName -p YourPassword admin

  2. Después de iniciar sesión, puede crear N número de la base de datos con la misma credencial de administrador o diferente repitiendo el 1 a 3.

Esto le permite crear diferentes usuarios y contraseñas para la colección diferente que crea en MongoDB

 0
Author: Balaji.J.B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-22 08:29:58