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.roleEl campo es una cadena que especifica el nombre del
rolerol.
admin.system.roles.dbEl campo es una cadena que especifica la base de datos a la que pertenece
dbroleel rol. MongoDB identifica de forma única cada rol mediante la combinación de su nombre (es decir,) y su base de datos.
admin.system.roles.privilegesEl array contiene los documentos
privilegesde privilegio que definen los privilegios para el rol.Un documento de privilegio presenta la siguiente sintaxis:
{ resource: { <resource> }, actions: [ "<action>", ... ] } Cada documento de privilegio contiene los siguientes campos:
admin.system.roles.privileges[n].resourceUn documento que especifica los recursos sobre 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].actionsUn arreglo de acciones permitidas en el recurso. Para obtener una lista de acciones, consulte Acciones de privilegios.
admin.system.roles.rolesEl array contiene documentos de rol que
rolesespecifican los roles de los que 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 los 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.
El arreglo roles enumera los roles, identificados por los nombres de los roles y las bases de datos, de los cuales el rol appAdmin hereda privilegios.