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/
Ha sido muy útil tu información.
Muchas Gracias !