Docs Menu
Docs Home
/ /
Control de acceso basado en roles

Administra usuarios y roles en implementaciones autogestionados

Este tutorial proporciona ejemplos de gestión de usuarios y roles según el modelo de autorización de MongoDB para implementaciones autogestionadas. Para crear un nuevo usuario, consulte Crear un usuario en implementaciones autogestionadas.

Si ha habilitado el control de acceso para su implementación, debe autenticarse como usuario con los privilegios requeridos que se especifican en cada sección. Para realizar las operaciones que se indican en este tutorial, los administradores de usuarios necesitan...userAdminAnyDatabaseRol o rol en las bases de datos específicas. Para obtener más userAdmin información sobre cómo agregar un usuario administrador como primer usuario, consulte Habilitar el control de acceso en implementaciones autoadministradas.

Nota

Para crear roles definidos por el usuario en MongoDB Atlas, consulta Agregar roles personalizados en la documentación de MongoDB Atlas.

Los roles conceden a los usuarios acceso a los recursos de MongoDB. MongoDB proporciona varios roles integrados que los administradores pueden utilizar para controlar el acceso a un sistema MongoDB. Sin embargo, si estos roles no pueden describir el conjunto deseado de privilegios, puedes crear nuevos roles en una base de datos concreta.

Excepto por los roles creados en la base de datos admin, un rol solo puede incluir privilegios que se aplican a su base de datos y solo puede heredar de otros roles en su base de datos.

Un rol creado en la base de datos admin puede incluir privilegios que se aplican a la base de datos admin, a otras bases de datos o al recurso clúster, y puede heredar de roles en otras bases de datos, así como de la base de datos admin.

Para crear un nuevo rol, utilice el método db.createRole(), especificando los privilegios en el arreglo privileges y los roles heredados en el arreglo roles.

MongoDB utiliza la combinación del nombre de la base de datos y el nombre del rol para definir un rol de manera única. Cada rol está limitado al ámbito de la base de datos en la que se crea, pero MongoDB almacena toda la información de los roles en la colección admin.system.roles en la base de datos admin.

Para crear un rol en una base de datos, se debe tener:

  • la acción createRole sobre ese recurso de base de datos.

  • la acción grantRole en esa base de datos para especificar los privilegios del nuevo rol, así como para especificar los roles de los que heredará.

Los roles de funcionalidad incorporada userAdmin y userAdminAnyDatabase proporcionan acciones createRole y grantRole sobre sus respectivos recursos.

Para crear un rol con authenticationRestrictions especificado, debes tener la acción setAuthenticationRestriction sobre el recurso de base de datos en el que se crea el rol.

Para agregar roles personalizados definidos por el usuario con mongosh, consulte los siguientes ejemplos:

El siguiente ejemplo crea un rol llamado manageOpRole que proporciona solo los privilegios para ejecutar tanto db.currentOp() como db.killOp(). [1]

Nota

Los usuarios no necesitan ningún privilegio específico para ver o finalizar sus propias operaciones en instancias de mongod. Consulta db.currentOp() y db.killOp() para más detalles.

1

Conéctate a mongod o mongos con los privilegios especificados en la sección Requisitos previos.

El siguiente procedimiento utiliza el myUserAdmin creado en Habilitar el control de acceso en implementaciones autogestionadas.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'

El myUserAdmin tiene privilegios para crear roles en el admin así como en otras bases de datos.

2

manageOpRole tiene privilegios que actúan sobre múltiples bases de datos así como sobre el recurso de clúster. Por lo tanto, debes crear el rol en la base de datos admin.

use admin
db.createRole(
{
role: "manageOpRole",
privileges: [
{ resource: { cluster: true }, actions: [ "killop", "inprog" ] },
{ resource: { db: "", collection: "" }, actions: [ "killCursors" ] }
],
roles: []
}
)

El nuevo rol otorga permisos para finalizar cualquier operación.

Advertencia

Termina las operaciones en ejecución con extrema precaución. Utiliza únicamente el método db.killOp() o el comando killOp para terminar operaciones iniciadas por clientes y no terminar operaciones internas de la base de datos.

[1] La funcionalidad incorporada clusterMonitor también proporciona el privilegio de ejecutar db.currentOp() junto con otros privilegios, y la funcionalidad incorporada hostManager proporciona el privilegio de ejecutar db.killOp() junto con otros privilegios.

El siguiente ejemplo crea un rol llamado mongostatRole que proporciona únicamente los privilegios para ejecutar mongostat. [2]

1

Conéctate a mongod o mongos con los privilegios especificados en la sección Requisitos previos.

El siguiente procedimiento utiliza el myUserAdmin creado en Habilitar el control de acceso en implementaciones autogestionadas.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'

El myUserAdmin tiene privilegios para crear roles en el admin así como en otras bases de datos.

2

mongostatRole tiene privilegios que actúan sobre el recurso del clúster. Por lo tanto, debes crear el rol en la base de datos admin.

use admin
db.createRole(
{
role: "mongostatRole",
privileges: [
{ resource: { cluster: true }, actions: [ "serverStatus" ] }
],
roles: []
}
)
[2] El rol incorporado clusterMonitor también otorga el privilegio de ejecutar mongostat junto con otros privilegios.

El siguiente ejemplo crea un rol llamado dropSystemViewsAnyDatabase que otorga los privilegios para descartar la colección system.views en cualquier base de datos.

1

Conéctate a mongod o mongos con los privilegios especificados en la sección Requisitos previos.

El siguiente procedimiento utiliza el myUserAdmin creado en Habilitar el control de acceso en implementaciones autogestionadas.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'

El myUserAdmin tiene privilegios para crear roles en el admin así como en otras bases de datos.

2

Para el rol, especifique un privilegio que conste de:

use admin
db.createRole(
{
role: "dropSystemViewsAnyDatabase",
privileges: [
{
actions: [ "dropCollection" ],
resource: { db: "", collection: "system.views" }
}
],
roles: []
}
)

Nota

Para modificar los roles de un usuario de base de datos existente en MongoDB Atlas, consulte Crear usuarios de base de datos en la documentación de MongoDB Atlas.

  • Debes tener la grantRole acción en una base de datos para conceder un rol en esa base de datos.

  • Se debe tener la revokeRole sobre una base de datos para revocar un rol en esa base de datos.

  • Para ver la información de un rol, debe tener el rol otorgado explícitamente o debe tener la viewRole acción en la base de datos del rol.

1

Conéctate a mongod o mongos como usuario con los privilegios especificados en la sección de requisitos previos.

El siguiente procedimiento utiliza el myUserAdmin creado en Habilitar el control de acceso en implementaciones autogestionadas.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'
2

Para mostrar los roles y privilegios del usuario a modificar, usa los métodos db.getUser() y db.getRole().

Por ejemplo, para ver los roles de reportsUser creados en Additional Examples, emite:

use reporting
db.getUser("reportsUser")

Para mostrar los privilegios otorgados al usuario por el rol readWrite en la base de datos "accounts", emita:

use accounts
db.getRole( "readWrite", { showPrivileges: true } )
3

Si el usuario requiere privilegios adicionales, asígnale el rol o los roles con el conjunto de privilegios necesario. Si tal rol no existe, crea un nuevo rol con el conjunto adecuado de privilegios.

Para revocar un subconjunto de privilegios proporcionados por un rol existente: revoca el rol original y otorga un rol que contenga solo los privilegios requeridos. Es posible que necesites crear un nuevo rol si no existe un rol.

4

Revoca un rol con el método db.revokeRolesFromUser(). La siguiente operación de ejemplo remueve el rol readWrite en la base de datos accounts de la reportsUser:

use reporting
db.revokeRolesFromUser(
"reportsUser",
[
{ role: "readWrite", db: "accounts" }
]
)

Concede un rol utilizando el método db.grantRolesToUser(). Por ejemplo, la siguiente operación otorga al usuario reportsUser el rol de read en la base de datos accounts:

use reporting
db.grantRolesToUser(
"reportsUser",
[
{ role: "read", db: "accounts" }
]
)

Para clústeres fragmentados, los cambios para el usuario son instantáneos en el mongos en el que se ejecuta el comando. Sin embargo, para otras instancias mongos en el clúster, la caché de usuario puede tardar hasta 10 minutos en actualizarse. Consulta userCacheInvalidationIntervalSecs.

Nota

Para modificar la contraseña de un usuario existente de MongoDB Atlas, consulte Crear usuarios de base de datos en la documentación de MongoDB Atlas.

Para modificar la contraseña de otro usuario en una base de datos, debe tener la acción changePassword en esa base de datos.

1

Conéctate al mongod o mongos con los privilegios especificados en la sección Requisitos previos.

El siguiente procedimiento utiliza el myUserAdmin creado en Habilitar el control de acceso en implementaciones autogestionadas.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'
2

Pasa el nombre de usuario del usuario y la nueva contraseña al método db.changeUserPassword().

La siguiente operación cambia la contraseña del usuario reporting a SOh3TbYhxuLiW8ypJPxmt1oOfL:

db.changeUserPassword("reporting", "SOh3TbYhxuLiW8ypJPxmt1oOfL")

Tip

Nota

Para ver los roles de un usuario en MongoDB Atlas, consulte Crear usuarios de base de datos en la documentación de MongoDB Atlas.

Para ver la información de otro usuario, debe tener la acción viewUser en la base de datos de otro usuario.

Los usuarios pueden ver su propia información.

1

Conéctate a mongod o mongos como usuario con los privilegios especificados en la sección de requisitos previos.

El siguiente procedimiento utiliza el myUserAdmin creado en Habilitar el control de acceso en implementaciones autogestionadas.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'
2

Utiliza el comando usersInfo o el método db.getUser() para mostrar la información del usuario.

Por ejemplo, para ver los roles de reportsUser creados en Additional Examples, emite:

use reporting
db.getUser("reportsUser")

En el documento devuelto, el campo roles muestra todos los roles para reportsUser:

...
"roles" : [
{ "role" : "readWrite", "db" : "accounts" },
{ "role" : "read", "db" : "reporting" },
{ "role" : "read", "db" : "products" },
{ "role" : "read", "db" : "sales" }
]

Nota

Para ver los privilegios de un rol en MongoDB Atlas, consulta Ver roles personalizados en la documentación de MongoDB Atlas.

Para ver la información de un rol, debe tener el rol otorgado explícitamente o debe tener la viewRole acción en la base de datos del rol.

1

Conéctate a mongod o mongos como usuario con los privilegios especificados en la sección de requisitos previos.

El siguiente procedimiento utiliza el myUserAdmin creado en Habilitar el control de acceso en implementaciones autogestionadas.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'
2

Para un rol determinado, utiliza el método db.getRole() o el comando rolesInfo, con la opción showPrivileges:

Por ejemplo, para ver los privilegios concedidos por el rol read en la base de datos products, utiliza la siguiente operación, emite:

use products
db.getRole( "read", { showPrivileges: true } )

En el documento devuelto, los arreglos privileges y inheritedPrivileges. El privileges enumera los privilegios especificados directamente por el rol y excluye los privilegios heredados de otros roles. El inheritedPrivileges enumera todos los privilegios otorgados por este rol, tanto los especificados directamente como los heredados. Si el rol no se hereda de otros roles, los dos campos son iguales.

...
"privileges" : [
{
"resource": { "db" : "products", "collection" : "" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
},
{
"resource" : { "db" : "products", "collection" : "system.js" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
}
],
"inheritedPrivileges" : [
{
"resource": { "db" : "products", "collection" : "" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
},
{
"resource" : { "db" : "products", "collection" : "system.js" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
}
]

Volver

Roles definidos por el usuario

En esta página