prefacio
En el artículo anterior, cuando se conecta al servicio MongoDB a través de herramientas cliente (MongoDB Shell, Robo 3T), siempre que tenga la dirección IP y el número de puerto, puede conectarse a la base de datos y luego podrá operar la base de datos. Esto se debe a que la instalación predeterminada de MongoDB no tiene la autenticación habilitada ni ningún nombre de usuario ni contraseña iniciales establecidos. Sin embargo, esto puede provocar muchos problemas de seguridad de los datos.
MongoDB proporciona varias formas de mejorar la seguridad de la base de datos, como autenticación , control de acceso , cifrado , etc.
Este artículo presenta principalmente los roles y permisos integrados proporcionados por MongoDB y luego proporciona seguridad de la base de datos al habilitar la autenticación y especificar diferentes permisos de acceso para los usuarios .
En los dos artículos anteriores, instalamos la base de datos MongoDB en Windows, Linux y Docker respectivamente. El contenido presentado en este artículo se demuestra tomando como ejemplo MongoDB en un entorno Linux. El funcionamiento en el sistema Windows es básicamente el mismo.
Distinguir entre autenticación y autorización
La verificación es autenticación. Cuando los usuarios se conectan al servicio MongoDB, deben proporcionar el nombre de usuario, la contraseña y la base de datos de verificación para verificar la identidad.
La autorización es control de permisos. Los amigos que hayan creado sistemas de gestión en segundo plano deben estar familiarizados con el modelo RBAC. MongoDB también adopta el modelo RBAC: al crear un usuario, es necesario especificar un rol para que obtenga el permiso correspondiente para operar la base de datos.
La autenticación solo restringe si los usuarios pueden conectarse a los servicios de la base de datos y, mediante el control de permisos, los usuarios pueden controlar con mayor precisión varias operaciones en la base de datos. De manera análoga a los sistemas comunes de administración en segundo plano, tanto los administradores como los usuarios comunes pueden iniciar sesión en el sistema, pero las páginas a las que pueden acceder y las operaciones que pueden realizar son bastante diferentes.
Roles integrados de MongoDB
MongoDB otorga a los usuarios acceso a datos y comandos a través de RBAC y proporciona una variedad de funciones integradas para proporcionar diferentes niveles de acceso que normalmente se requieren en los sistemas de bases de datos. Además de utilizar roles integrados, también admite roles definidos por el usuario.
El contenido de esta parte se describe en detalle en el sitio web oficial . Primero, comprendamos algunos roles y permisos de uso común.
Roles de lectura y escritura de bases de datos:
- leer: permite al usuario leer la base de datos especificada
- readWrite: permite al usuario leer y escribir la base de datos especificada
Rol del administrador de bases de datos:
- dbAdmin: permite a los usuarios crear y eliminar índices, ver estadísticas o acceder a system.profile, pero no tiene permisos para la administración de roles y usuarios.
- dbOwner: Brinda la capacidad de realizar cualquier operación en la base de datos. Este rol combina los privilegios otorgados por los roles readWrite, dbAdmin y userAdmin.
- userAdmin: proporciona la capacidad de crear y modificar roles y usuarios en la base de datos actual.
Todas las funciones de la base de datos:
- readAnyDatabase: solo disponible en la base de datos de administración, lo que brinda a los usuarios acceso de lectura a todas las bases de datos
- readWriteAnyDatabase: solo disponible en la base de datos de administración, lo que otorga a los usuarios permisos de lectura y escritura para todas las bases de datos.
- userAdminAnyDatabase: solo disponible en la base de datos de administración, lo que otorga a los usuarios permisos de administrador de usuario para todas las bases de datos.
- dbAdminAnyDataBase: solo disponible en la base de datos de administración, otorgando al usuario permisos de administrador para todas las bases de datos.
Rol de superusuario:
- root: solo disponible en la base de datos de administración, un superusuario con superprivilegios
En este artículo, utilizamos principalmente root
el rol para configurar el superadministrador de la base de datos y luego usamos los roles read
y dbOwner
para crear usuarios con diferentes permisos para una determinada base de datos.
Autenticación
Activar la autenticación
Al iniciar el servicio MongoDB, --auth
habilite la autenticación en la línea de comando configurando:
$ mongod -f /data/mongodb/mongodb.conf --auth
O habilítelo en el archivo de configuración security.authorization
:
security:
authorization: enabled
- autorización: indica si se habilita el control de acceso de usuarios, es decir, si el cliente necesita acceder al servicio de base de datos mediante autenticación de nombre de usuario y contraseña. El valor predeterminado está deshabilitado.
De la siguiente manera, en este momento el servicio MongoDB ha habilitado la autenticación:
Resumir:
Activar la autenticación:
Al iniciar el servicio mongod, utilice --auth;
Utilice la herramienta cliente mongosh para conectarse al servicio mongod;
Cree una cuenta de superadministrador;
Crear usuario superadministrador
Una vez que MongoDB habilita la autenticación, no hay un nombre de usuario ni una contraseña predeterminados, y debe configurarlos usted mismo .
Utilice mongosh
el servicio de conexión:
$ mongosh
Después de habilitar la autenticación, puede ingresar a la base de datos incluso sin ingresar el nombre de usuario y la contraseña, pero no tiene permiso para operar la base de datos en este momento, por ejemplo:
Lo único que se puede hacer en este momento es crear un usuario con rol de superadministrador .
Para crear un superadministrador, debe ingresar admin
a la base de datos y luego usar db.createUser
el método para crear usuarios:
use admin;
db.createUser({
user: "Kunwu",
pwd: "abc123",
roles: [
{
role: "root", db: "admin"}
]
});
Descripción de los elementos de configuración:
- usuario: El nombre del usuario creado.
- pwd: Contraseña de usuario creada.
- roles: establece la información del rol del usuario, es una matriz, puede establecer una variedad de roles.
- rol: establece el rol del usuario. MongoDB proporciona varios roles diferentes, que se configuran aquí como el rol de superusuario
root
. - db: establece la base de datos donde los permisos de usuario entran en vigor. Debido a
root
la particularidad del rol, solo se puede configurar enadmin
. Peroroot
los usuarios con el rol tienen súper privilegios.
Utilice el superadministrador para conectarse al servicio
Después de habilitar la autenticación, al conectarse al servicio MongoDB a través de herramientas del cliente (MongoDB Shell, Robo 3T, etc.), debe especificar un nombre de usuario y una contraseña, y existen dos métodos de autenticación.
Método 1: verificar al conectar
Especifique el nombre de usuario y la base de datos de autenticación al conectarse al servicio de base de datos:
$ mongosh -u Kunwu --authenticationDatabase admin
-
-u/–usuario: especifica el nombre de usuario
-
–authenticationDatabase: especifica la base de datos de autenticación. La base de datos de autenticación es la base de datos en la que se creó el usuario . La base de datos donde se creó Kunwu arriba es admin, por lo que su base de datos de autenticación es admin.
Luego se le solicitará una contraseña en la línea de comando:
Después de ingresar la contraseña, presione Enter para confirmar e iniciar sesión:
También puedes -p/--password
ingresar la contraseña directamente en la línea de comando a través de:
$ mongosh -u Kunwu -p abc123 --authenticationDatabase admin
Método 2: verificar después de la conexión
En lugar de proporcionar el nombre de usuario, la contraseña y la base de datos de autenticación, después de conectarse al servicio de la base de datos, ingrese a la base de datos de autenticación y use el método db.auth para verificar el nombre de usuario y la contraseña.
$ mongosh
Verificar identidad:
use admin;
db.auth('Kunwu', 'abc123');
Conéctate con Robo 3T
Crea una nueva conexión. Connection
Ingrese la IP y el puerto del servicio de base de datos en :
Authentication
Entra en el segundo por turno:
- Base de datos: la base de datos de autenticación especificada al crear un usuario.
- Nombre de usuario: nombre de usuario
- Contraseña: contraseña de usuario
Luego haga clic en el botón de prueba en la esquina inferior izquierda para realizar una prueba de conexión:
Luego puede usar Robo 3T para administrar la biblioteca de la base de datos.
Un suplemento sobre la base de datos de autenticación
La base de datos de autenticación se refiere a la base de datos en la que se crea el usuario . Por ejemplo, el artículo anterior es admin
el usuario superadministrador creado en la base de datos Kunwu
, luego la base de datos de autenticación de este usuario es admin
. Al iniciar sesión en la base de datos, authenticationDatabase
debe especificarse como admin
.
Verificar la base de datos no significa que el usuario sólo pueda operar esta base de datos .
MongoDB tiene una variedad de roles integrados. Al crear un usuario, puede especificar múltiples roles y bases de datos. En este momento, la base de datos especificada es la base de datos que el usuario puede operar. Por ejemplo:
db.createUser({
user: "Kunwu",
pwd: "abc123",
roles: [
{
role: "read", db: "db1"},
{
role: "readWrite", db: "db2"},
{
role: "dbOwner", db: "db2"},
]
});
En este punto, el usuario Kunwu
puede operar las tres bases de datos db1, db2 y db3 con diferentes permisos.
Por tanto, la conclusión es que no es lo mismo la base de datos de autenticación que la base de datos que los usuarios pueden operar , son dos conceptos diferentes.
Crear un usuario independiente para la aplicación
El superusuario tiene la máxima autoridad, es adecuado para administrar otros usuarios y no debe usarse para operar bases de datos específicas.
Necesitamos crear usuarios separados para que cada aplicación utilice los servicios de base de datos. Por ejemplo, si hay un sistema de gestión manage
, se pueden crear varios usuarios para él, algunos solo pueden leer datos, otros pueden leer y escribir datos, algunos tienen permisos completos, etc.
Primero inicie sesión en MongoDB como superadministrador:
$ mongosh -u Kunwu -p abc123 --authenticationDatabase admin
Luego manage
cree un usuario diferente para la base de datos:
use manage;
db.create({
user: 'ManageAdmin',
pwd: 'admin123',
roles: [
{
role: "dbOwner", db: 'manage'}
]
});
db.create({
user: 'ManageRead',
pwd: 'user123',
roles: [
{
role: "read", db: 'manage'}
]
})
dbOwner
Los usuarios del rol tienen la capacidad de realizar cualquier operación en la base de datos administrada. Los usuarios con el rol read
solo pueden leer datos de la base de datos.
Inicie sesión con el usuario administrador de la base de datos administrada:
$ mongosh -u ManageAdmin -p admin123 --authenticationDatabase manage
Inicie sesión como usuario normal con la base de datos administrada:
$ mongosh -u ManageRead -p user123 --authenticationDatabase manage
Resumir
Hasta ahora, hemos presentado brevemente el mecanismo de autenticación y autorización de MongoDB.
Para MongoDB recién instalado, no tiene habilitada la autenticación. Debe ingresar a admin
la base de datos y crear un root
usuario superadministrador con el rol. Luego, de acuerdo con la base de datos de la aplicación específica, utilice el usuario administrador para crear usuarios con diferentes permisos, a fin de lograr la garantía básica de seguridad de la base de datos.
Hay muchas cosas sobre los permisos de roles, como qué permisos tiene un rol, cómo crear roles personalizados, cómo cambiar las contraseñas de los usuarios, actualizar roles, etc. Puede visitar el sitio web oficial o consultar otra información usted mismo.
¡Gracias por leer!