Tutorial MongoDB: creación de base de datos, conexión remota y securización.
En este tutorial paso a paso veremos como configurar tu servidor con MongoDB en forma segura. También aprenderás a crear bases de datos y usuarios con permisos específicos. Finalmente veremos como conectarnos en forma remota.
Para mayor seguridad, el puerto utilizado por MongoDB en tu Cloud Server es el 20017. Por defecto este se encuentra cerrado a nivel de firewall. Para abrir el acceso ingresa en la Configuración de tu cloud server y luego en la pestaña Firewall. Una vez allí crea una regla que permita el acceso de conexiones externas al puerto 20017.
Si desconoces cuales son las IPs desde las cuales, tu o tu aplicación, se conectarán al servidor de MongoDB, utiliza 0.0.0.0/0. Así permitirás que cualquier IP pueda conectarse a MongoDB. Sin embargo, te recomendamos crear reglas con las IPs (o rango de IP’s) específicas para brindarle mayor seguridad a tus bases de dato.
Accede a través de la consola SSH a tu servidor y verifica la versión de MongoDB con el siguiente comando:
mongod --version
Conocer la versión te servirá más adelante si es que decides utilizar un cliente con interfaz gráfica para administrar tus bases de datos y usuarios, ya que no todas tienen soporte para las últimas versiones de MongoDB.
Nuevamente a través de la consola SSH y utilizando los siguientes comandos, creamos un usuario con los permisos necesarios para administrar cualquier base de datos del servidor MongoDB.
Para ellos ejecutamos una instancia de MongoShell y lo hacemos en el puerto en el cual está configurado.
mongo --port 20017 use admin db.createUser( { user: "myServerAdmin", pwd: "mipassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } );
Cambia los datos “user” y “pwd” del código de arriba, con el usuario y contraseña que decidas utilizar.
Por defecto, es posible acceder al servidor de MongoDB sin necesidad de autenticarse y esto genera problemas de seguridad. Ahora que ya disponemos de un usuario con los privilegios suficientes, cambiaremos la configuración para restringir el acceso mediante autenticación.
Para ellos editamos el archivo mongod.conf, quitando el comentario de la línea donde se encuentra auth = true
mcedit /etc/mongod.conf
Una vez guardado el cambio, reiniciamos el servicio de MongoDB para que los mismos hagan efecto.
service mongod restart
A partir de ahora podremos acceder a la consola MongoShell autenticándonos como el usuario administrador que creamos en el paso 3. Para ellos utilizamos el usuario y contraseña que elegimos en lugar de “myServerAdmin” y “mipassword”.
mongo --port 20017 -u myServerAdmin -p mipassword --authenticationDatabase admin
Llegó el momento esperado, el de crear la base de datos que utilizaremos para nuestra aplicación. A diferencia de servidores como MySQL donde hay un comando explícito para crearlas, en MongoDB las base de datos se crean insertando el primer contenido (una colección) o creando un usuario para la misma.
En nuestro caso crearemos un base de datos llamada test agregándole un usuario llamado myDbAdmin.
use test db.createUser( { user: "myDbAdmin", pwd: "mipassword", roles: [ { role: "readWrite", db: "test" } ] } );
Ahora, para acceder a la base de datos recién creada utilizamos el siguiente comando:
mongo --port 20017 -u myDbAdmin -p mipassword --authenticationDatabase test
Ahora veremos, a través de un ejemplo, como insertar una colección de datos en la base que acabamos de crear.
use test db.personal.save({nombre:'Ariel Perez',edad:23}) db.personal.save({nombre:'Diego Angel',edad:32}) db.personal.find()
Al hacerlo, veremos en pantalla los siguientes resultados:
{ "_id" : ObjectId("55d87309d6b60ea1b22fb2ad"), "nombre" : "Ariel Perez", "edad" : 23 } { "_id" : ObjectId("55d87311d6b60ea1b22fb2ae"), "nombre" : "Diego Angel", "edad" : 32 }
Si bien la consola MongoShell nos permite hacer prácticamente de todo con nuestro MongoDB, utilizar interfaces gráficas en la administración de bases de datos simplifica mucho la tarea.
En el mercado existen muchos clientes de administración para MongoDB y la gran mayoría son pagos. Algunos de los gratuitos que podemos sugerirte son Mongo Management Studio o MongoChef
mongodb://usuario:password@host:puerto/nombre_db
y en nuestro ejemplo quedaría
mongodb://myDbAdmin:mipassword@200.58.96.113:20017/test