Por defecto MongoDB no tiene activada la autenticación. Esto significa que cualquiera puede entrar a MongoDB, incluso remotamente si el firewall no tiene el puerto 27017 bloqueado.

Bien, esto es muy cómodo durante el desarrollo, no hay que preocuparse de usuarios y contraseñas, y podemos usar Robomongo para administrar MongoDB remotamente y de forma visual. Pero a la hora de salir a la luz es cuando menos un suicidio en toda regla. Vamos a activar la autenticación y a configurar un par de usuarios.

Doy por supuesto que MongoDB está instalado, sea manualmente o vía gestor de paquetes tipo apt-get. Si aun no tienes MongoDB instalado, en la web oficial tienen varios tutoriales, como por ejemplo éste para Ubuntu: Instalar MongoDB en Ubuntu

Bien, vamos a empezar por crear un usuario administrador, algo así como el usuario root pero para mongo. Este usuario podrá a su vez crear y modificar otros usuarios, sus permisos, etc. Muy sencillo:

  • Entramos en la consola de MongoDB escribiendo mongo
  • Seleccionamos la base de datos admin  escribiendo use admin
  • Creamos el usuario. Necesitamos usuario y contraseña, por ejemplo «admin» y «mipassword», escribiendo:
db.addUser({ user:"admin", pwd: "mipassword", roles:["clusterAdmin","readAnyDatabase","readWriteAnyDatabase","userAdminAnyDatabase","dbAdminAnyDatabase"] });
  • Ok, ahora vamos a editar el archivo de configuración /etc/mongodb.conf  para activar la autenticación. Basta con descomentar la línea #auth = true
  • Finalmente reiniciamos mongo, en Ubuntu si hemos instalado MongoDB vía apt-get bastará con escribir: service mongodb restart

Bien, ya tenemos nuestro usuario superadministrador, y MongoDB ya solo permite entrar con ese usuario salvo que estemos en local. Por defecto cualquier usuario local puede entrar en MongoDB, así que nuestro cambio solo habrá afectado a los accesos remotos. Si no queremos que mongo autorice ninguna conexión local sin autenticar, deberemos añadir enableLocalhostAuthBypass=0  al archivo de configuración de MongoDB.
Pues vamos a probarlo, entramos como administradores a la consola de MongoDB:

mongo localhost/admin -u admin -p

Bien, nos pide la pass y estamos dentro. Esta era la primera parte del tutorial, crear un usuario admin y activar la autenticación. Sin embargo nos queda otra parte. Ahora vamos a crear un usuario con poderes más reducidos, concretamente para que trabaje solo sobre la base de datos «proyecto», vamos a ello.

  • Entramos a la consola de MongoDB con un usuario con permisos de admin, como acabamos de ver: mongo localhost/admin -u admin -p
  • Seleccionamos la base de datos en la que vayamos a crear un usuario: use proyecto
  • Agregamos un usuario con permisos para leer, escribir y administrar esta DB:
db.addUser({ user:"salva", pwd:"mipassword", roles:["readWrite","dbAdmin"] })
  • Reiniciamos MongoDB, service mongodb restart
  • Ya solo nos falta modificar nuestra aplicación. Si estamos usando Mongoose por ejemplo, cambiaremos el acceso inseguro de antes por el acceso con usuario y contraseña:
module.exports = { 
    //'url': 'mongodb://127.0.0.1:27017/proyecto' //esto ya no sirve
    'url': 'mongodb://salva:mipassword@127.0.0.1:27017/proyecto'
};

Bien pues con esto ya hemos terminado. Si queréis saber más sobre los usuarios y los permisos en MongoDB os remito a la documentación oficial:
http://docs.mongodb.org/manual/tutorial/add-user-to-database/
http://docs.mongodb.org/manual/reference/user-privileges/

If you think my content is worth it you can Buy me a Coffee at ko-fi.com Buy me a Ko-fi