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.

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

Alexandru Petrescu
fuente
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({})
K - La toxicidad en SO está creciendo.
fuente
2
Finalmente tuve una idea de lo que realmente está sucediendo.
mestarted
stackoverflow.com/questions/41615574/…
K - La toxicidad en SO está creciendo.
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

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

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

Kramar
fuente
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
Jinmin
fuente
8

Podrías cambiar /etc/mongod.conf.

antes de

#security:

Después

security:
    authorization: "enabled"

Entonces sudo service mongod restart

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

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

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

Haisheng Yu
fuente