La colección system.roles en la base de datos admin almacena los roles definidos por el usuario. Para crear y administrar estos roles definidos por el usuario, MongoDB proporciona comandos de gestión de roles.
system.roles Esquema
Los documentos en la colección system.roles tienen el siguiente esquema:
{ _id: <system-defined id>, role: "<role name>", db: "<database>", privileges: [ { resource: { <resource> }, actions: [ "<action>", ... ] }, ... ], roles: [ { role: "<role name>", db: "<database>" }, ... ] }
Un documento system.roles contiene los siguientes campos:
admin.system.roles.roleLa
roleEl campo es una string que especifica el nombre del rol.
admin.system.roles.dbEl campo
dbes una string que especifica la base de datos a la que pertenece el rol. MongoDB identifica de manera única cada rol mediante la combinación de su nombre (es decir,role) y su base de datos.
admin.system.roles.privilegesEl
privilegesarreglo contiene los documentos de privilegios que definen los privilegios del rol.Un documento de privilegio presenta la siguiente sintaxis:
{ resource: { <resource> }, actions: [ "<action>", ... ] } Cada documento de privilegio tiene los siguientes campos:
admin.system.roles.privileges[n].resourceUn documento que especifica los recursos a los que se
actionsaplica el privilegio. El documento tiene uno de los siguientes formatos:{ db: <database>, collection: <collection> } or
{ cluster : true } Consulta el documento de recursos sobre implementaciones autogestionadas para obtener más detalles.
admin.system.roles.privileges[n].actionsConjunto de acciones permitidas en el recurso. Para ver la lista de acciones, consulte Acciones de privilegios.
admin.system.roles.rolesEl
rolesarreglo contiene documentos de roles que especifican los roles de los cuales este rol hereda privilegios.Un documento de rol tiene la siguiente sintaxis:
{ role: "<role name>", db: "<database>" } Un documento de rol contiene los siguientes campos:
admin.system.roles.roles[n].roleEl nombre del rol. Un rol puede ser un rol incorporado proporcionado por MongoDB o un rol definido por el usuario.
Ejemplos
Considera los siguientes documentos de muestra encontrados en la colección system.roles de la base de datos admin.
Un rol definido por el usuario especifica privilegios
A continuación se muestra un documento de ejemplo para un rol definido por el usuario appUser definido para la base de datos myApp:
{ _id: "myApp.appUser", role: "appUser", db: "myApp", privileges: [ { resource: { db: "myApp" , collection: "" }, actions: [ "find", "createCollection", "dbStats", "collStats" ] }, { resource: { db: "myApp", collection: "logs" }, actions: [ "insert" ] }, { resource: { db: "myApp", collection: "data" }, actions: [ "insert", "update", "remove", "compact" ] }, { resource: { db: "myApp", collection: "system.js" }, actions: [ "find" ] }, ], roles: [] }
El arreglo privileges enumera los cinco privilegios que especifica el rol appUser:
El primer privilegio permite sus acciones (
"find","createCollection","dbStats","collStats") en todas las colecciones de la base de datosmyAppexcepto en sus colecciones del sistema. Consulte Especificar una base de datos como recurso.Los dos siguientes privilegios permiten acciones adicionales en colecciones específicas,
logsydata, en la base de datosmyApp. Consulte Especificar una colección de una base de datos como recurso.El último privilegio permite acciones en una colección de sistema en la base de datos
myApp. Mientras que el primer privilegio otorga permisos a nivel de base de datos para la acciónfind, la acción no aplica a las colecciones de sistema demyApp. Para otorgar acceso a una colección del sistema, un privilegio debe especificar explícitamente la colección. Consulta el Documento recurso sobre las implementaciones autogestionadas.
Como lo indica el arreglo vacío roles, appUser no hereda privilegios adicionales de otros roles.
El rol definido por el usuario hereda de otros roles
El siguiente es un documento de ejemplo para un rol definido por el usuario appAdmin definido para la base de datos myApp: El documento muestra que el rol appAdmin especifica privilegios e incluso hereda privilegios de otros roles:
{ _id: "myApp.appAdmin", role: "appAdmin", db: "myApp", privileges: [ { resource: { db: "myApp", collection: "" }, actions: [ "insert", "dbStats", "collStats", "compact" ] } ], roles: [ { role: "appUser", db: "myApp" } ] }
El arreglo privileges enumera los privilegios que especifica el rol appAdmin. Este rol tiene un único privilegio que permite sus acciones ( "insert", "dbStats", "collStats", "compact") en todas las colecciones de la base de datos myApp excluyendo sus colecciones del sistema. Consulte Especificar una base de datos como recurso.
La matriz roles enumera los roles, identificados por los nombres de roles y las bases de datos, de los cuales el rol appAdmin hereda privilegios.