sql >> Base de Datos >  >> NoSQL >> MongoDB

Introducción a la gestión de usuarios de MongoDB

Una de las primeras tareas después de poner en marcha su servidor de base de datos MongoDB es configurar sus usuarios y bases de datos. En esta publicación, repasaremos algunos de los escenarios comunes de creación y configuración de usuarios en MongoDB. La administración de usuarios de MongoDB mejoró significativamente con respecto a las dos versiones anteriores y ahora es un modelo de administración de usuarios capaz y funcional. A los usuarios se les pueden asignar varios roles y los roles se pueden configurar con los privilegios deseados. Hay varios roles de usuario integrados para usar, o puede crear sus propios roles personalizados.

Los ejemplos en esta publicación usan un cliente 2.6.4 y un servidor 2.6.4. Se realizaron cambios considerables en el modelo de gestión de usuarios de 2.4 a 2.6. Entonces, si está utilizando un cliente 2.4, muchos de los ejemplos en esta publicación no funcionarán para usted. Puede verificar la versión del cliente yoMongoDBodb usando la siguiente sintaxis:

mongo --version

Adición de un usuario a una base de datos

El primer paso después de crear su usuario es crear la base de datos de su aplicación:

use applicationdb;

Después de crear esta base de datos, queremos crear el usuario que utilizará la aplicación para escribir en esta base de datos. Queremos que este usuario tenga privilegios de lectura y escritura en la base de datos:

db.createUser({'user':'appuser', 'pwd':'', roles:['readWrite']});

A veces, también queremos agregar usuarios que tienen acceso de solo lectura a la base de datos. Por ejemplo, podríamos querer agregar un usuario de análisis que solo tenga acceso de solo lectura a la base de datos:

db.createUser({'user':'analyticsuser', 'pwd':'', roles:['read']});

Ahora que se crearon los usuarios, intentemos conectarnos como este usuario desde la consola de MongoDB:

mongo -u 'appuser' -p  <servername>/applicationdb
MongoDB shell version: 2.6.4
connecting to: <servername>/applicationdb
>

¡Deberías haberte conectado correctamente! Tenga en cuenta que "/applicationdb" al final de la sintaxis le dice a MongoDB que autentique al 'usuario de la aplicación' en la base de datos 'applicationdb'.

Adición de un usuario a varias bases de datos

En muchos escenarios, necesitamos crear varias bases de datos en el servidor. Por ejemplo, en este escenario, es posible que necesitemos crear otra base de datos 'analyticsdb' para almacenar los resultados de los análisis. El 'usuarioanalytics' ahora necesita acceso de 'solo lectura' en 'applicationdb' y permisos de 'lectura y escritura' en 'analyticsdb'.

Entonces, ¿cómo logramos esto? ¿Deberíamos agregar el 'usuario de análisis' a cada base de datos? Esto crea una pesadilla de administración a largo plazo, ya que se agregan muchos usuarios y bases de datos. Afortunadamente, hay una solución simple. Podemos centralizar las asignaciones de roles para un usuario y almacenarlas en una única base de datos. En este escenario, prefiero almacenar estas asignaciones en la base de datos 'admin' ya que es el centro de administración central en el servidor, pero también puede almacenarlo en una base de datos separada:

use admin
db.createUser({user:'analyticsuser', pwd:'<pass>', roles:[{'role':'read', 'db':'applicationdb'}, { 'role':'readWrite', 'db':'analyticsdb'}]});

Una vez que se agrega, puede usar 'mostrar usuarios' para mostrar los detalles de sus usuarios. Así es como se ve mi base de datos de administración:

use admin
> show users
{
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin",
"roles" : [{ "role" : "root","db" : "admin"},{"role" : "restore","db" : "admin"}]
}
{"_id" : "admin.analyticsuser",
"user" : "analyticsuser",
"db" : "admin",
"roles" : [{"role" : "read","db" : "applicationdb"},{"role" : "readWrite","db" : 'analyticsdb"}]
}
>

Ahora que nuestro usuario está agregado, intentemos conectarnos desde la consola para verificar la autenticación usando la sintaxis que usamos arriba:

mongo -u 'analyticsuser' -p <pass> <servername>/applicationdb

Sin embargo, la autenticación falla:

2014-10-06T23:11:42.616+0000 Error: 18 { ok: 0.0, errmsg: "auth failed", code: 18 } at src/mongo/shell/db.js:1210
exception: login failed

La razón es que el 'usuarioanalytics' está definido en la base de datos 'admin' y no en la 'applicationdb'. La forma de especificar esto es usar el parámetro '–authenticationDatabase'.

mongo -u 'analyticsuser' -p <pass> <servername>/applicationdb --authenticationDatabase 'admin'

Esta vez, el inicio de sesión es exitoso:

MongoDB shell version: 2.6.4
connecting to: <servername>/applicationdb

Para comprender mejor los otros roles integrados disponibles en MongoDB, puede consultar la documentación de MongoDB sobre los roles integrados. Como siempre, si tiene más preguntas, puede comunicarse con nosotros en [email protected].