MongoDB Academy · Leçon

Contrôle d’accès basé sur les rôles : rôles intégrés et personnalisés

Les apprenants attribueront des rôles intégrés tels que readWrite et dbAdmin, puis créeront des rôles personnalisés avec des ensembles d’actions à privilèges minimaux pour les comptes de service.

Leçon 2 sur 413 étapes

Contrôle d’accès basé sur les rôles : rôles intégrés et personnalisés est une leçon MongoDB Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage MongoDB Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours MongoDB Academy comprend 4 leçons au total.

Qu'est-ce que le contrôle d'accès fondé sur les rôles ?

Le contrôle d'accès fondé sur les rôles (RBAC) est le modèle d'autorisation de MongoDB. Au lieu d'accorder directement des autorisations individuelles aux utilisateurs, vous leur attribuez des rôles — des ensembles nommés de privilèges. La gestion des autorisations devient ainsi évolutive : lorsque vous mettez à jour un rôle, tous les utilisateurs qui le possèdent héritent automatiquement de la modification. MongoDB fournit un ensemble riche de rôles intégrés couvrant les schémas d'accès les plus courants.

Rôles de base de données intégrés

MongoDB fournit plusieurs rôles au niveau de la base de données qui s'appliquent à une base de données précise. Les plus utilisés sont les suivants : read (lire toutes les collections), readWrite (lire, insérer, mettre à jour et supprimer), dbAdmin (gérer le schéma et créer des index) et userAdmin (créer et modifier les utilisateurs de cette base de données). Ces rôles sont limités à une base de données : un utilisateur disposant de readWrite sur myApp ne peut pas accéder à otherApp.

// Create a user with readWrite on one database only
use myApp
db.createUser({
  user: 'appUser',
  pwd: 'SecurePass!',
  roles: [
    { role: 'readWrite', db: 'myApp' }
  ]
})

// Create a user with dbAdmin (can manage indexes but not data)
db.createUser({
  user: 'dbaUser',
  pwd: 'DbaPass!',
  roles: [
    { role: 'dbAdmin', db: 'myApp' }
  ]
})

Rôles intégrés à l'échelle du cluster

Certains rôles intégrés s'étendent à toutes les bases de données d'une instance MongoDB. readAnyDatabase et readWriteAnyDatabase accordent leurs autorisations respectives sur chaque base de données. dbAdminAnyDatabase permet de gérer les schémas partout. Le rôle le plus puissant est root, qui donne un accès complet à tout : utilisez-le uniquement pour la configuration initiale et la récupération d'urgence, jamais pour les comptes d'application.

// Grant read-only access to all databases (reporting tool)
use admin
db.createUser({
  user: 'globalReporter',
  pwd: 'ReportPass!',
  roles: [
    { role: 'readAnyDatabase', db: 'admin' }
  ]
})

// The root role — avoid for applications
// roles: [{ role: 'root', db: 'admin' }]  // too powerful!

Le principe du moindre privilège

Chaque utilisateur MongoDB doit disposer exactement des autorisations dont il a besoin, et de rien de plus. Une API qui lit uniquement des produits doit disposer de read, et non de readWrite. Une tâche en arrière-plan qui archive des documents doit seulement pouvoir interroger et supprimer des documents dans la collection d'archives, et non dans toutes les collections. L'application du principe du moindre privilège limite l'ampleur des dommages qu'une compromission d'identifiants peut causer.

// Tightly scoped user for a product listing API
use admin
db.createUser({
  user: 'productListingApi',
  pwd: 'ProductApiPass!',
  roles: [
    { role: 'read', db: 'catalog' }  // read-only on catalog DB only
  ]
})

Créer des rôles personnalisés

Lorsque les rôles intégrés sont trop larges, créez un rôle personnalisé avec db.createRole(). Une définition de rôle répertorie des privilèges précis : chaque privilège est une action (par exemple find, insert, createIndex) sur une ressource (une base de données, une collection ou un cluster précis). Les rôles personnalisés peuvent également hériter de rôles existants à l'aide du tableau roles.

// Custom role: can read orders and update order status only
use myApp
db.createRole({
  role: 'orderProcessor',
  privileges: [
    {
      resource: { db: 'myApp', collection: 'orders' },
      actions: ['find', 'update']
    }
  ],
  roles: []  // no inherited roles
})

Attribuer des rôles personnalisés aux utilisateurs

Attribuez un rôle personnalisé de la même manière qu'un rôle intégré : incluez-le dans le tableau roles lors de la création d'un utilisateur, ou accordez-le ultérieurement avec db.grantRolesToUser(). Un utilisateur peut posséder plusieurs rôles simultanément et cumuler leurs autorisations. Lorsqu'il autorise chaque opération, MongoDB calcule l'union de tous les privilèges de tous les rôles attribués.

// Create user and assign custom role
use myApp
db.createUser({
  user: 'fulfillmentWorker',
  pwd: 'FulfillPass!',
  roles: [
    { role: 'orderProcessor', db: 'myApp' }
  ]
})

// Grant an additional role to an existing user
db.grantRolesToUser('fulfillmentWorker', [
  { role: 'read', db: 'products' }
])

Révoquer des rôles et modifier les accès

Lorsqu'un employé change de fonction ou qu'un service est mis hors service, révoquez rapidement les autorisations devenues inutiles. db.revokeRolesFromUser() supprime des rôles précis d'un utilisateur sans supprimer le compte. db.updateUser() vous permet de remplacer l'intégralité du tableau de rôles. Auditez régulièrement les utilisateurs et leurs rôles attribués avec db.getUsers() afin de détecter l'accumulation progressive de privilèges.

// Revoke a specific role from a user
use myApp
db.revokeRolesFromUser('fulfillmentWorker', [
  { role: 'read', db: 'products' }
])

// Replace all roles for a user
db.updateUser('fulfillmentWorker', {
  roles: [{ role: 'read', db: 'myApp' }]  // demote to read-only
})

Granularité des privilèges au niveau des collections

Les rôles personnalisés peuvent être limités à une collection précise plutôt qu'à une base de données entière. Cela permet un contrôle d'accès précis : par exemple, un service peut uniquement lire la collection products sans avoir accès à users ou orders dans la même base de données. Cette limitation au niveau de la collection s'effectue en indiquant un nom de collection dans le document de ressource.

// Role scoped to a single collection
use myApp
db.createRole({
  role: 'catalogReader',
  privileges: [
    {
      resource: { db: 'myApp', collection: 'products' },
      actions: ['find']
    }
  ],
  roles: []
})

Rôles d'administration du cluster

Plusieurs rôles intégrés régissent les opérations au niveau du cluster plutôt que l'accès aux données. clusterMonitor accorde un accès en lecture aux commandes de surveillance, ce qui est utile pour les exportateurs de métriques. clusterAdmin permet de gérer les partitions, les jeux de réplication et les opérations globales — il est très puissant et doit être attribué avec grande prudence. Les rôles backup et restore accordent les autorisations précises nécessaires à mongodump et mongorestore, sans fournir tous les droits d'administration.

// Backup user — can dump data but not administer users
use admin
db.createUser({
  user: 'backupAgent',
  pwd: 'BackupPass!',
  roles: [
    { role: 'backup', db: 'admin' }
  ]
})

// Monitoring exporter user
db.createUser({
  user: 'prometheusExporter',
  pwd: 'MonitorPass!',
  roles: [
    { role: 'clusterMonitor', db: 'admin' },
    { role: 'read', db: 'local' }
  ]
})

Afficher les détails des rôles et les privilèges hérités

Utilisez db.getRole(roleName, { showPrivileges: true }) pour voir exactement quelles actions et ressources un rôle autorise, y compris les privilèges hérités des rôles parents. C'est essentiel pour l'audit : vous pouvez vérifier qu'un rôle personnalisé fournit exactement les autorisations adéquates, sans accorder accidentellement un accès plus large par l'intermédiaire de rôles hérités.

// Inspect a custom role's full privileges
use myApp
db.getRole('orderProcessor', { showPrivileges: true })

// List all custom roles in the current database
db.getRoles({ showBuiltinRoles: false })

// List all users and their roles
db.getUsers()

RBAC dans MongoDB Atlas

MongoDB Atlas met en œuvre le RBAC via son panneau Database Access. Vous pouvez créer des utilisateurs de base de données avec des rôles intégrés ou personnalisés à l'aide de l'interface utilisateur Atlas, de l'Atlas CLI ou de l'API Atlas. Atlas prend également en charge les utilisateurs temporaires, qui expirent automatiquement après une durée définie — ce qui est idéal pour les accès de courte durée des développeurs ou la réponse aux incidents. En outre, Atlas peut s'intégrer à AWS IAM et à LDAP pour la gestion des identités d'entreprise.

Vérification rapide

Vérifiez votre compréhension des concepts MongoDB et des bases de données NoSQL présentés dans cette leçon.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris que les rôles intégrés tels que read, readWrite et dbAdmin couvrent les schémas d'accès courants au niveau d'une base de données, que les rôles personnalisés permettent de définir des privilèges au niveau des collections en limitant les actions à celles qui sont strictement nécessaires, et que le principe du moindre privilège veut que chaque utilisateur et chaque compte de service ne possède que les autorisations dont il a réellement besoin. Nous allons maintenant aborder le chiffrement des données au repos et TLS en transit.

Gratuit pour commencer

Apprends JavaScript avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
30
Leçons
120

Questions Fréquemment Posées

La leçon « Contrôle d’accès basé sur les rôles : rôles intégrés et personnalisés » est-elle gratuite ?

Oui — le texte complet de « Contrôle d’accès basé sur les rôles : rôles intégrés et personnalisés » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours MongoDB Academy, passe à CoddyKit PRO. Le cours MongoDB Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Contrôle d’accès basé sur les rôles : rôles intégrés et personnalisés » ?

Les apprenants attribueront des rôles intégrés tels que readWrite et dbAdmin, puis créeront des rôles personnalisés avec des ensembles d’actions à privilèges minimaux pour les comptes de service. Tu pratiques MongoDB Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer MongoDB Academy ?

Aucune expérience préalable n'est requise. MongoDB Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Contrôle d’accès basé sur les rôles : rôles intégrés et personnalisés » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon MongoDB Academy ?

Oui. Chaque leçon MongoDB Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Mécanismes d’authentification : SCRAM et x.509
  2. Contrôle d’accès basé sur les rôles : rôles intégrés et personnalisés
  3. Chiffrement au repos et TLS en transit
  4. Chiffrement au niveau des champs côté client
← Retour à MongoDB Academy