Vai al contenuto principale

Controllo degli accessi basato sui ruoli (RBAC) in MongoDB

Scopri il controllo degli accessi basato sui ruoli (RBAC) in MongoDB: gestione di utenti e ruoli, creazione di ruoli personalizzati e applicazione di politiche di minimo privilegio nei deployment.
Aggiornato 29 set 2026  · 5 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

Con sempre più persone online nell'era digitale, cresce la necessità di definire permessi e ruoli per garantire la sicurezza e gestire l'accesso ad applicazioni e sistemi. Il controllo degli accessi basato sui ruoli è un modello di autorizzazione utilizzato per controllare l'accesso alle risorse in base ai ruoli predefiniti degli utenti. 

Con il modello RBAC di MongoDB, le azioni sono rappresentate sotto forma di ruoli, che vengono assegnati agli utenti corretti. Per esempio, invece di assegnare diversi permessi individuali, puoi assegnare un singolo ruolo (ad es. dbAdmin), che include automaticamente l'insieme di permessi definito (ad es. lettura sulle collection nel database). Questo modello rende semplice gestire l'accesso degli utenti in modo scalabile.

Abilitare RBAC in MongoDB

Con il modello RBAC di base, l'accesso è negato per impostazione predefinita, il che significa che gli utenti non possono accedere alle risorse senza avere un ruolo. Agli utenti possono essere assegnati più ruoli e ogni ruolo può avere un insieme specifico di privilegi o permessi per accedere a determinate funzionalità.

Concetti fondamentali di RBAC

Ecco alcuni concetti chiave da conoscere su RBAC:

Utenti

Nel modello RBAC, un utente è un'entità a cui vengono concessi uno o più ruoli che determinano l'accesso dell'utente alle risorse e alle operazioni del database. Un utente non avrà accesso a un sistema se non ci sono assegnazioni di ruolo. Per ottenere l'accesso a un sistema, gli utenti devono autenticarsi e devono avere assegnato almeno un ruolo.

Ruoli

MongoDB fornisce ruoli e privilegi integrati sia per i deployment gestiti in proprio sia per MongoDB Atlas. Alcuni ruoli integrati comuni sono read, readWrite e i ruoli dbAdmin/atlasAdmin. I ruoli di amministratore del database hanno privilegi più elevati rispetto a qualsiasi altro ruolo utente del database, incluso il privilegio di gestire i privilegi di altri ruoli.

Se questi ruoli integrati non forniscono l'insieme di privilegi desiderato, MongoDB offre metodi per creare e modificare ruoli definiti dall'utente.

Un ruolo è un insieme di privilegi assegnati all'utente.

Per esempio, un ruolo "read" può avere privilegi di sola lettura, un ruolo "admin" può avere privilegi di lettura e scrittura, mentre il ruolo "owner" può avere privilegi di lettura, scrittura ed eliminazione su un determinato elemento (un database, un documento, ecc.).  Un ruolo concede privilegi per eseguire le azioni specificate sulle risorse. Ogni privilegio è specificato esplicitamente nel ruolo o ereditato da un altro ruolo, o entrambi.

Ruoli definiti dall'utente / Ruoli personalizzati

MongoDB fornisce diversi ruoli integrati che gli amministratori possono utilizzare per controllare l'accesso a un sistema MongoDB. Tuttavia, se i ruoli esistenti non descrivono i privilegi specifici che desideri, puoi definire e assegnare nuovi ruoli agli utenti in un database: questo è un ruolo personalizzato. Con l'eccezione dei ruoli creati nel database admin, un ruolo può includere solo privilegi che si applicano al proprio database e può ereditare solo da altri ruoli nel proprio database.

Per creare un nuovo ruolo, usa il metodo db.createRole(), specificando i privilegi nell'array privileges e i ruoli ereditati nell'array roles.

MongoDB utilizza la combinazione del nome del database e del nome del ruolo per definire in modo univoco un ruolo e archivia tutte le informazioni sui ruoli nella collection admin.system.roles nel database admin.

Esempio: questo esempio crea un ruolo personalizzato (sales_attendant) che può soltanto inserire documenti nella collection sales all'interno del database sales_db.

use sales
db.createRole(
   {
     role: "sales_attendant",
     privileges: [
       {
         resource: { db: "sales_db", collection: "sales" },
         actions: [ "insert" ]
       }
     ],
     roles: []
   }
)

Ruoli integrati 

I ruoli integrati sono ruoli predefiniti assegnati agli utenti che consentono di eseguire operazioni come lettura e scrittura sulle collection in un database. Esempi di ruoli integrati sono read, write, readWrite, dbAdmin e readAnyDatabase.

  • read e readWrite (accesso a livello di database): questi ruoli concedono rispettivamente l'accesso per eseguire operazioni di sola lettura o di lettura/scrittura su tutte le collection non di sistema all'interno di un database specificato.
  • dbAdmin: questo ruolo concede i diritti amministrativi necessari per gestire uno specifico database, come creare, eliminare e modificare indici e collection. È adatto per i team di sviluppo o per gli script di manutenzione del database.
  • clusterAdmin (accesso operativo): questo ruolo è a privilegi elevati ed è per lo più riservato al personale operativo (DevOps/Ops). Concede le autorizzazioni necessarie per gestire l'intero deployment MongoDB, inclusa la creazione di backup periodici, la configurazione dei replica set e lo sharding.

Privilegi (permessi)

I privilegi sono un insieme di azioni (ad es. find, insert) consentite su una funzionalità.

Per esempio, se la funzionalità è "informare il cliente sul saldo attuale", allora i privilegi dell'utente (poniamo il cassiere) potrebbero essere di sola lettura. Se la funzionalità è aumentare il limite transazionale di un conto bancario, i privilegi potrebbero essere lettura e scrittura.

Privilegi ereditati

Un ruolo può includere uno o più ruoli esistenti (inclusi tutti i privilegi). Per esempio, un ruolo dbAdmin può includere ruoli di lettura, scrittura e aggiornamento (che possono essere ruoli individuali) con i relativi privilegi.

Risorse

Una risorsa è un database, una collection, un insieme di collection o il cluster. 

Applicare il principio del minimo privilegio

Nella sicurezza dei database moderna, il Principio del Minimo Privilegio (PoLP) è cruciale. Questo principio afferma che a ogni utente dovrebbero essere assegnati i permessi minimi necessari per svolgere le attività richieste.

Ecco un esempio di best practice: invece di usare un utente readWrite globale, crea utenti specifici per l'applicazione. Per esempio, se il tuo servizio di inventario interagisce solo con il database app_data, all'utente dell'applicazione dovrebbero essere concessi i permessi readWrite solo su quel singolo database. Questa compartimentazione impedisce a un servizio compromesso di ottenere accessi non autorizzati ad altri database (come billing o users).

Esempio di codice: 

Creare un utente a minimo privilegio. Questo esempio crea un utente (branch_manager) con accesso di lettura/scrittura limitato strettamente al database bank_data.

use admin
db.createUser(
   {
     user: "branch_manager",
     pwd: passwordPrompt(),
     roles: [ 
       { role: "readWrite", db: "bank_data" }
     ]
   }
)

Best practice

  • Crea e assegna in anticipo ruoli e policy ben definiti.
  • Segui il principio del minimo privilegio per garantire una sicurezza rigorosa.
  • Usa i ruoli integrati quando possibile; verifica periodicamente i ruoli assegnati per individuare anomalie.

FAQ

Che cos'è RBAC in MongoDB?

Il controllo degli accessi basato sui ruoli è un controllo di sicurezza utilizzato per gestire l'accesso degli utenti.

Qual è la differenza tra un ruolo integrato e un ruolo personalizzato?

Un ruolo integrato è un ruolo predefinito assegnato agli utenti che consente loro di eseguire operazioni come lettura e scrittura sulle collection in un database; un ruolo personalizzato è un ruolo definito dall'utente che descrive i privilegi specifici desiderati.

Perché è importante il Principio del Minimo Privilegio?

È importante perché garantisce che agli utenti siano assegnati i permessi minimi necessari per svolgere le attività richieste.

Se vuoi che un responsabile di negozio possa solo leggere e scrivere dati da un database specifico, quale tipo di ruolo assegneresti?

readWrite

Quale comando si usa per creare un ruolo personalizzato?

db.createRole()


Afi Gbadago's photo
Author
Afi Gbadago
LinkedIn

Afi supporta gli sviluppatori in MongoDB con un focus su Django e Python, aiutando gli ingegneri a creare con tecnologie di dati moderne attraverso tutorial, talk e attività nella community. Riconosciuta come Microsoft MVP per Python e il Web, fa parte del board della Django Software Foundation ed è Programme Chair per DjangoCon US 2025. Afi è anche Regional Executor per Black Python Devs, oltre a essere una contributor open source attiva e speaker internazionale.

Argomenti
MongoDB

I migliori corsi DataCamp

{count, plural, one {Corso} other {Corsi}}

Introduzione a MongoDB in Python

{hours} ore
24.4K
Impara a gestire e analizzare dati strutturati in modo flessibile con MongoDB.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

{count, plural, one {blog} other {blogs}}

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

{count, plural, one {blog} other {blogs}}

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

{count, plural, one {blog} other {blogs}}

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

Mostra AltroMostra Altro