Después de aceptar MongoDB como animal de compañía y ver como
configurarlo a nivel Newbie, quedó pendiente algo tan básico y necesario como establecer unos ciertos mínimos de seguridad para que nuestra instancia de Mongo no sea un “pasen y vean”.
En mi opinión (y después de ver las distintas
opciones de configuración disponibles) he agregado los siguientes parámetros al fichero de configuración.
Básicamente activamos la autenticación de usuarios, sólo permitimos conexiones desde la ip local (ya que en nuestro caso tanto IIS como Mongo están en el mismo servidor), cambiamos el puerto por defecto (para no dar pistas) y deshabilitamos cualquier acceso vía http tanto a la parte de administración como a la API Rest. De este modo el fichero .config final quedaría de la siguiente forma (basado en formato YAML).
storage:
dbPath: C:\mongodb\data\db
systemLog:
destination: file
path: C:\mongodb\log\mongodb.log
logAppend: true
security:
authorization: "enabled"
net:
bindIp: "127.0.0.1"
port: XXXXX #27017
http:
enabled: false
RESTInterfaceEnabled: false
Algunas de estas opciones tienen valores predeterminados que ya coinciden con lo aquí expuesto, pero prefiero ser explícito y así olvidarme de ello.
Después de esto y para una bd de ejemplo llamada aspnet, sólo restar comentar como agregar usuarios y activar la autenticación.
Los pasos a seguir serían:
- Crear usuario admin con el role “root” en la bd admin
- Crear usuario aspnet con el role “dwOwner” en la bd aspnet
- Modificar el fichero .config con la configuración propuesta
- Reiniciar el servicio de Mongo
> use admin
switched to db admin
> db.createUser({user: "admin", pwd: "1234", roles: ["root"]})
Successfully added user: { "user" : "admin", "roles" : [ "root" ] }
> use aspnet
switched to db aspnet
> db.createUser({user: "aspnet", pwd: "1234", roles: ["dbOwner"]})
Successfully added user: { "user" : "aspnet", "roles" : [ "dbOwner" ] }
>
Lógicamente el nombre de usuario podría ser cualquiera (yo he utilizado admin y aspnet que coinciden con los nombres de las bases de datos sólo por sencillez).
Finalmente, para conectar vía C# tenemos que utilizar una
cadena de conexión que incluye la autenticación y base de datos por defecto.
Asumiendo que la cadena de conexión debería cumplir
mongodb://usuario:contraseña@host:puerto/bd, en nuestro ejemplo quedaría como
mongodb://aspnet:1234@localhost:XXXXX/aspnet
Y recuerda (porque me ha pasado), que si incluyes el caracter @ en el nombre de usuario o contraseña, tendrás que escaparlo con %40.
Un saludo!
No hay comentarios:
Publicar un comentario