MongoDB ¿cuáles son el usuario y la contraseña predeterminados?

103

Estoy usando la misma cadena de conexión en local y producción. Cuando la cadena de conexión esmongodb://localhost/mydb

¿Cuál es el nombre de usuario y la contraseña? ¿Es seguro mantenerlo de esta manera?

Juan Pablo Fernandez
fuente

Respuestas:

210

De forma predeterminada, mongodb no tiene control de acceso habilitado, por lo que no hay un usuario o contraseña predeterminados.

Para habilitar el control de acceso, use la opción de línea de comando --autho la configuración del archivo de configuración security.authorization.

Puede utilizar el siguiente procedimiento o consultar Habilitación de autenticación en los documentos de MongoDB.

Procedimiento

  1. Inicie MongoDB sin control de acceso.

    mongod --port 27017 --dbpath /data/db1
    
  2. Conéctese a la instancia.

    mongo --port 27017
    
  3. Cree el administrador de usuarios.

    use admin
    db.createUser(
      {
        user: "myUserAdmin",
        pwd: "abc123",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      }
    )
    
  4. Reinicie la instancia de MongoDB con control de acceso.

    mongod --auth --port 27017 --dbpath /data/db1
    
  5. Autentíquese como administrador de usuarios.

    mongo --port 27017 -u "myUserAdmin" -p "abc123" \
      --authenticationDatabase "admin"
    
Camilo Silva
fuente
17
Si el usuario se crea con el rol userAdminAnyDatabase, será imposible crear una base de datos. Por lo tanto, la sección de roles debería ser: roles: [{role: "root", db: "admin"}]
georgeos
4
Por favor, vincule la publicación original del Manual de MongoDB
Nathan Cho
1
si desea encontrar el uso de dbpath: grep dbPath /etc/mongod.conf
rckd
13

Además de lo que ya mencionó @Camilo Silva, si quieres dar acceso libre para crear bases de datos, leer, escribir bases de datos, etc, pero no quieres crear un rol de root, puedes cambiar el 3er paso con lo siguiente:

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, 
             { role: "dbAdminAnyDatabase", db: "admin" }, 
             { role: "readWriteAnyDatabase", db: "admin" } ]
  }
)
Razvan Dumitru
fuente
4

Para MongoDB anterior a 2.6, el comando para agregar un usuario root es addUser(por ejemplo)

db.addUser({user:'admin',pwd:'<password>',roles:["root"]})
Negro
fuente
1
Hasta la versión 2.6 que tenías db.addUser. A partir de 2.6 y en la versión actual 3.4.x puede crear un usuario con db.CreateUser.
Razvan Dumitru
1

Además de las respuestas proporcionadas anteriormente, una opción es seguir el enfoque de 'excepción de host local' para crear el primer usuario si su base de datos ya se inició con control de acceso ( --authinterruptor). Para hacer eso, necesita tener acceso localhost al servidor y luego ejecutar:

mongo
use admin
db.createUser(
 {
     user: "user_name",
     pwd: "user_pass",
     roles: [
           { role: "userAdminAnyDatabase", db: "admin" },
           { role: "readWriteAnyDatabase", db: "admin" },
           { role: "dbAdminAnyDatabase", db: "admin" }
        ]
 })

Como se indica en la documentación de MongoDB:

La excepción localhost le permite habilitar el control de acceso y luego crear el primer usuario en el sistema. Con la excepción de localhost, después de habilitar el control de acceso, conéctese a la interfaz de localhost y cree el primer usuario en la base de datos de administración. El primer usuario debe tener privilegios para crear otros usuarios, como un usuario con el rol userAdmin o userAdminAnyDatabase. Las conexiones que utilizan la excepción localhost solo tienen acceso para crear el primer usuario en la base de datos de administración.

Aquí está el enlace a esa sección de los documentos.

Fjut
fuente