/ MongoDB

Cómo conectarte remótamente a tu base de datos MongoDB

En este artículo vamos a ver como dar seguridad a nuestra base de datos remota de producción y a su vez como conectarnos de manera remota desde nuestro entorno local.

Primero de todo inicia una instancia de MongoDB en tu servidor, sin el flag de autenticación:

mongod --port 27017 --dbpath /data/db1

Creamos un usuario administrador que será el root que administre todas las bases de datos y será con el que nos conectemos por terminal (MongoShell) desde el servidor:

use admin
db.createUser(
  {
    user: "myServerAdmin",
    pwd: "password",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
);

Reinicia la instancia de MongoDB, esta vez con la autorización activada:

mongod --auth --config /etc/mongodb/mongodb.conf

Ahora para conectarnos al MongoShell necesitamos hacerlo mediante el usuario administrador:

mongo --port 27017 -u myServerAdmin -p password --authenticationDatabase admin

Una vez conectados, vamos a crear un usuario adicional que gestione la base de datos que utilizará tu aplicación. Que solo pueda acceder a esa base de datos y con permisos de Lectura/Escritura. Este será el que utilicemos para conectarnos desde nuestra aplicación backend.

Es importante que sea un usuario “no-root” el que se conecte desde nuestra app para evitar “disgustos” y es una capa importante de seguridad para nuestro backend.

use myDatabase
db.createUser(
    {
      user: "myUser",
      pwd: "12345678",
      roles: [
         "roles" : [ { "role" : "readWrite", "db" : "myDatabase" }
      ]
    }
);

Para poder conectarnos remotamente, edita el fichero /etc/mongod.conf

Cambia el campo bind_ip = 127.0.0.1, por la IP de tu servidor, y aprovecha a cambiar el campo port = 27017 por otro diferente, para mayor seguridad

Reinicia mongo para aplicar los cambios.

sudo service mongod restart

Ahora si queremos conectarnos por el MongoShell a nuestra instancia de mongo, deberemos escribir el siguiente comando desde la terminal:

mongo --host x.x.x.x --port xxxxx -u myServerAdmin -p password --authenticationDatabase admin

siendo x.x.x.x la IP de tu servidor y xxxxx el puerto que configuraste en el fichero mongod.conf

Y para conectarnos mediante una URI String desde nuestra aplicación backend, la URI será:

mongodb://myUser:12345678@x.x.x.x:xxxxx/myDatabase

Configuración de Robomongo.

Robomongo es una aplicación para Mac, Windows y Linux para conectarse a bases de datos Mongo, de una manera visual, sustituyendo o complementando a la terminal y al MongoShell.

La configuración en Robomongo para conectarse remotamente a una base de datos por SSH es diferente a la conexión a tu base de datos local. Estas son las pestañas que debes configurar

En la pestaña Conexión, además de un nombre para identificar a la conexión, necesitas incluir la dirección IP de tu servidor (x.x.x.x) y el puerto que configuraste en el fichero mongod.conf (xxxxx)

robomongo_conexion

En la pestaña Autenticación, indica la base de datos “admin” para poder entrar con el nombre de usuario y la contraseña del usuario administrador que creamos (myServerAdmin)

robomongo_auth

Por último en la pestaña SSH, indica la dirección IP de tu servidor, el puerto de SSH (el 22 es el por defecto si no lo has cambiado), el nombre de usuario con el que puedes entrar en tu servidor por SSH y la contraseña

robomongo_ssh

Con esto podrás acceder con Robomongo a la base de datos remota de tu aplicación.

Fuentes:

Carlos Azaustre

Carlos Azaustre

CTO y Cofundador de Chefly. Formador en tecnologías web: JavaScript, Node, Firebase, React y Vue.

Leer más