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


377

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

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

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


ACTUALIZACIÓN 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 mongodumpy mongoexport.


44
esto para MongDB versión 2.2.x
— Tom Imrei

23
En Mongo 3.0.4, el comando para crear un usuario es db.createUser () .
— cronólogos

44
Siga esto para crear un usuario administrador en Mongodb 3.0 docs.mongodb.org/v3.0/tutorial/add-user-administrator
— Sul Aga

3
Una actualización para MongoDB 3.0+: Cómo configurar la autenticación en MongoDB 3.0 .
— Dan Dascalescu

1
Para que quede claro, esto no cifra los bytes que pasan por el cable. Es solo para control de acceso.
— Daniel F

Respuestas:


118

Debe comenzar mongodcon la --authopción después de configurar el usuario.

Desde el sitio MongoDB:

Ejecute la base de datos (proceso mongod) con la --authopción de habilitar la seguridad. Debe haber agregado un usuario a la base de datos de administración antes de iniciar el servidor --autho agregar el primer usuario desde la interfaz localhost.

Autenticación MongoDB


1
Lo intenté y seguí el ejemplo. ahora ... puedo configurarlo después de reiniciar el servidor con --auth. Sin embargo, cuando intento iniciar sesión (./mongo -u theadmin -p 12345) fallo. No puedo iniciar sesión
— murvinlai 03 de

Si después de eso no puede conectarse, es porque está intentando conectarse en la base de datos admin, use otra base de datos e intente nuevamente. Solo un userAdmin (AnyDatabase) puede conectarse admin.
— Vadorequest

80

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) Conéctese a la instancia.

mongo

3) Crear 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 y vuelva a iniciarla con control de acceso.

mongod --auth --dbpath /data/db

5) Conéctese y autentíquese 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 comprenderlo adecuadamente.

Es muy simple Voy a simplificar lo siguiente: https://docs.mongodb.com/manual/tutorial/enable-authentication/

Si desea obtener más información sobre lo que realmente hacen los roles, 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) Conéctese a la instancia.

mongo

3) Crear el administrador del usuario. Lo siguiente crea un administrador de usuarios en la adminbase de datos de autenticación. El usuario está dbOwnersobre la some_dbbase de datos y NO sobre la adminbase de datos, es importante recordar esto.

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 y vuelva a iniciarla con control de acceso.

mongod --auth --dbpath /data/db

5) Conéctese y autentíquese como administrador del usuario hacia la adminbase de datos de autenticación, NO hacia la some_dbbase de datos de autenticación. El administrador del usuario se creó en la adminbase de datos de autenticación, el usuario no existe en la some_dbbase de datos de autenticación.

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

Ahora está autenticado como dbOwnersobre la some_dbbase de datos. Entonces, si desea leer / escribir / hacer cosas directamente hacia la some_dbbase de datos, 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 crear usuarios adicionales que no sean administradores de usuarios y que sean usuarios normales, continúe leyendo a continuación.

6) Crear un usuario normal. Este usuario se creará en la some_dbbase de datos de autenticación a continuación.

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

7) Salga de la consola mongo, vuelva a conectarse, autentíquese como usuario.

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

2
Finalmente tuve una idea de lo que realmente está sucediendo.
— mestarted


3
Me encuentro deseando que las respuestas aceptadas puedan actualizarse en SO. Esta es la solución más relevante a partir de julio de 2017.
— azatar

1
Por favor actualice su respuesta! No sé de dónde obtuviste userAdminAnyDatabase pero no funciona. El rol es root para el acceso de administrador a todos los dbs.
— Aakash Verma

@AakashVerma docs.mongodb.com/manual/reference/built-in-roles/… ;) ¡NUNCA UTILICE ROOT a menos que para fines de desarrollo donde sepa que no puede verse comprometido! (tbh simplemente nunca use root lol)
— K - La toxicidad en SO está creciendo.

63

Primero, #auth=truedescomente la línea que comienza 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


10
la ruta predeterminada /etc/mongod.confno es/etc/mongo.conf
— Mithril

2
o, en primer lugar, descomenta, luego reinicia :)))
— GioMac 9/16

2
Actualización: ahora reinicie el servicio con: sudo service mongodb restart
— sharafjaffri

La ubicación y el nombre del archivo de configuración son los siguientes: /etc/mongodb.conf
— HGMamaci

46

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 verificar si está autenticado o no:

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

debería darte:

1

más:

Error: Authentication failed.
0

2
versiones anteriores como 2.4 usarían db.addUser
— arviman

Tuve que escribir use adminantes, de lo createUsercontrario me dio un error.
— Guillaume F.

28

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

  1. Comience mongodcon--auth = true

  2. Acceda a la base de datos de administración desde mongo shell y pase el archivo 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. Ahora que la adición del usuario está completa, podemos verificar el acceso a la base de datos desde mongo shell


1
Establecer el nombre de usuario y la contraseña en un archivo no parece muy seguro.
— Explorando el

Javascript No es "script java".
— Camilo Martin el

¿Cuál es el propósito del archivo JavaScript aquí?
— Ravi

@CamiloMartin JavaScript, no "Javascript".
— Madbreaks


10

Primero ejecute mongoDB en la terminal usando

mongod

ahora ejecuta mongo shell usa 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 autentícate desde la línea de comando usando

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

Lo lei de

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


1
Definí un usuario, con root, luego agregué más y más hasta que te encontré, 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" } ] }todavía la autenticación falla
— deadManN

Incluso usé db.changeUserPassword (), o cualquier cosa que fuera, incluso después de eso, cuando llamé a db.auth ('admin', 'mi pase') o la forma en que lo hiciste, dice que la autenticación falló para el administrador del usuario
— deadManN

Use rootrole para proporcionar acceso a las operaciones y todos los recursos de los siguientes roles combinados ... role root
— Laode Muhammad Al Fatih

8

Esto es lo que hice en 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

Podrías cambiar /etc/mongod.conf.

antes de

#security:

Después

security:
    authorization: "enabled"

Entonces sudo service mongod restart


5

Siga los pasos a continuación en orden

  • Crear un usuario usando la CLI
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
  • Habilite la autenticación, la forma en que lo hace difiere en función de su sistema operativo, si está utilizando Windows puede simplemente mongod --authen el caso de Linux puede editar el /etc/mongod.confarchivo para agregarlo security.authorization : enabledy luego reiniciar el servicio mongd
  • Para conectarse a través de cli mongo -u "admin" -p "admin123" --authenticationDatabase "admin". Eso es

Puede consultar esta publicación para obtener más detalles y aprender a conectarse con la mangosta.


4

Creación de usuario 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

Estos pasos me funcionaron:

  1. escribe mongod --port 27017 en cmd
  2. luego conéctese a mongo shell: mongo --port 27017
  3. cree el usuario admin: use admin db.createUser ({user: "myUserAdmin", pwd: "abc123", roles: [{role: "userAdminAnyDatabase", db: "admin"}]})
  4. desconectar mongo shell
  5. reiniciar el mongodb: mongod --auth --port 27017
  6. iniciar mongo shell: mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
  7. Para autenticarse después de conectarse, conecte el shell mongo al mongod: mongo --port 27017
  8. cambie a la base de datos de autenticación: use admin db.auth ("myUserAdmin", "abc123"

3

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

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

    use admin

  2. Luego ejecute el siguiente script para crear un usuario administrador

    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 administrador para la base de datos.

  1. inicie sesión en db.admin usando

    mongo -u YourUserName -p YourPassword admin

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

Esto le permite crear diferentes usuarios y contraseñas para las diferentes colecciones que está creando en MongoDB


después de esto vaya a sudo nano /etc/mongod.conf y ponga esta línea security.authorization: habilitada, puede ver el enlace de referencia aquí: stackoverflow.com/a/57384027/3904109
— DragonFire

2

después de crear un nuevo usuario, no olvide otorgarle grant read/write/rootpermiso al usuario. puedes probar el

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.