Vamos a imaginar que tenemos el siguiente escenario: Eres el administrador de base de datos de una empresa y te piden generar dos usuarios para una base de datos:
Asumiendo que ya tenemos instalado MongoDB lo primero será crear la base de datos. Una vez en el shell de mongo creamos la base de datos:
use blog
Ahora insertamos un par de documentos en la colleción posts
db.posts.insertOne({ title: "Articulo 1" });
db.posts.insertOne({ title: "Articulo 2" });
📖 Creando un usuario de solo lectura
Ahora vamos a cumplir nuestra primera tarea de crear un usuario que solo pueda leer los posts, pero bajo ningún motivo pueda crear nuevos artículos.
Para lograr esto vamos a usar el método createUser. Este método acepta como parámetro un objeto con las siguientes propiedades:
El código quedaría de la siguiente manera:
db.createUser(
{
user: "lector",
pwd: "123456",
roles: [
{ role: "read", db: "blog" }
]
}
)
Mongo viene con roles predefinidos, uno de ellos es el role read que como ya te debes imaginar solo permite ejecutar métodos de solo lectura.
La propiedad db es donde vas a indicar a qué base de datos se le asignará dicho rol.
✍️ Creando un usuario de escritura y lectura
Ahora vamos con el segundo usuario, el proceso sería el mismo, pero en este caso el role ya no será read sino readWrite. Con este rol el usuario tendrá acceso a los métodos de lectura y escritura de la base de datos.
db.createUser(
{
user: "escritor",
pwd: "123456",
roles: [
{ role: "readWrite", db: "blog" }
]
}
)
Listo, ya tenemos nuestro dos usuarios. Vamos a hacer algunas pruebas para verificar que realmente cada usuario cuenta con los accesos correctos.
Para poder ingresar al shell de mongo con el usuario usaremos los parámetros -u y -p. En la terminal escribe lo siguiente
mongo -u lector -p123456
Primero verificamos si puedo leer los posts
useblog;
db.posts.find();
Obtengo la respuesta correctamente mostrando los dos documentos insertados anteriormente
{ "_id" : ObjectId("5e438449ea91620ed74d3cf3"), "title" : "Articulo 1" }
{ "_id" : ObjectId("5e43844cea91620ed74d3cf4"), "title" : "Articulo 2" }
Ahora intentaremos insertar un nuevo documento
db.posts.insertOne({ title: "Articulo 3" });
Debería lanzarnos un error parecido al siguiente:
{
"errmsg" : "not authorized on blog to execute command" # mensaje cortado por temas de espacio
"codeName" : "Unauthorized"
}
Listo, ahora hagamos el mismo proceso para el usuario escritor, primero debemos salir del shell y volver a loguearnos:
mongo -u escritor -p123456 --authenticationDatabase blog
Leemos los posts usando el método find:
db.posts.find();
# { "_id" : ObjectId("5e438449ea91620ed74d3cf3"), "title" : "Articulo 1" }# { "_id" : ObjectId("5e43844cea91620ed74d3cf4"), "title" : "Articulo 2" }
Funciona bien el permiso de lectura, ahora intentaremos insertar el Artículo #3:
db.posts.insertOne({ title: "Articulo 3" });
Nos devuelve información del nuevo documento registrado
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4385e6e2306e7554d9e60f")
}
✅ Conclusiones