La gestione degli utenti del database è una parte particolarmente importante della sicurezza dei dati, poiché dobbiamo capire chi sta accedendo al database e impostare i diritti di accesso di ciascun utente. Se un database non dispone di una corretta gestione degli utenti, l'accesso degli utenti diventerà molto disordinato e difficile da mantenere con il passare del tempo.
MongoDB è un database NoSQL e un archivio di documenti. L'applicazione del concetto RBAC (Role Based-Access Control) è fondamentale per implementare una corretta gestione degli utenti per gestire le credenziali degli utenti.
Che cos'è il controllo degli accessi basato sui ruoli (RBAC)?
RBAC è un approccio che limita il sistema solo agli utenti autorizzati. In un'organizzazione vengono creati ruoli per varie funzioni lavorative, nel database creiamo quindi i diritti di accesso per svolgere alcune operazioni assegnate a un determinato ruolo.
Ai membri dello staff (o altri utenti del sistema) vengono assegnati determinati ruoli e attraverso di essi vengono assegnate le autorizzazioni per eseguire le funzioni del sistema informatico. Agli utenti non vengono concesse autorizzazioni direttamente, ma le ottengono solo attraverso il loro ruolo (o ruoli). La gestione dei diritti dei singoli utenti diventa semplicemente una questione di inserire il ruolo appropriato nell'account dell'utente; questo semplifica le operazioni generali (come l'aggiunta di utenti o la modifica dei reparti utenti).
Tre regole principali sono impostate per RBAC sono:
- Assegnazione del ruolo :Un soggetto può eseguire i permessi solo se il soggetto è stato scelto o gli è stato assegnato un ruolo.
- Il ruolo dell'autorizzazione :il ruolo attivo di un soggetto deve essere autorizzato per il soggetto. Con la regola 1 sopra, questa regola garantisce che gli utenti possano assumere ruoli solo per coloro che sono autorizzati.
- Autorizzazione all'autorizzazione :Un soggetto può eseguire permessi solo se il permesso è autorizzato per il ruolo attivo del soggetto. Con le regole 1 e 2, questa regola garantisce che gli utenti possano esercitare l'autorizzazione solo per coloro che sono autorizzati.
Questo blog esaminerà brevemente il controllo degli accessi basato sui ruoli nel database MongoDB.
Ruoli utente MongoDB
MongoDB ha diversi tipi di ruoli nel database, quelli sono...
Ruoli incorporati
Fornisce l'accesso a dati e azioni a MongoDB tramite l'autorizzazione basata sui ruoli e dispone di ruoli integrati che forniscono diversi livelli di accesso al database.
Il ruolo fornisce diversi privilegi per fare qualcosa sulla risorsa che è stata creata. I ruoli predefiniti di MongoDB hanno diverse categorie:
- Database utenti :Ruoli Gli utenti del database hanno il ruolo di manipolare i dati nella raccolta non di sistema. Esempi di ruoli del database utente sono:read, readWrite.
- Amministrazione database :Ruoli Amministrazione database si occupa della gestione amministrativa dei database come l'amministrazione degli utenti, lo schema e gli oggetti in esso contenuti.
- Esempi di ruoli di amministrazione del database sono:dbAdmin, userAdmin, dbOwner.
- Amministrazione cluster :il ruolo dell'amministrazione del cluster è quello di amministrare l'intero sistema MongoDB, inclusi i suoi set di repliche e shard. Esempi di ruoli di amministrazione del cluster sono:clusterAdmin, clusterManager.
- Backup e ripristino :questo ruolo è specifico per le funzioni relative al backup del database in MongoDB. Esempi di ruoli sono:backup, ripristino.
- Ruoli per tutti i database :i ruoli sono nell'amministratore del database e hanno accesso a tutti i database tranne locale e config. Esempi sono:readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase.
- Superutente :Ruoli ha la capacità di concedere l'accesso a ogni utente, a ogni privilegio, in tutti i database. Esempio di questo ruolo:root
Ruoli definiti dall'utente
Oltre ai ruoli incorporati, possiamo creare i nostri ruoli in base alle nostre esigenze, quali privilegi daremo a quei ruoli. Per creare ruoli, è possibile utilizzare il comando della funzione db.createRole(). Oltre alla possibilità di creare ruoli, sono disponibili diverse altre funzioni per gestire i ruoli esistenti come:db.dropRole() utile per eliminare i ruoli esistenti nel database, db.getRole() funzioni per ottenere tutte le informazioni da ruoli specifici.
Azioni privilegiate in MongoDB
Le azioni privilegi in MongoDB sono azioni che possono essere eseguite da un utente su una risorsa. MongoDB ha diverse categorie di azioni, vale a dire:
- Azioni di gestione del database, azioni relative ai comandi relativi all'amministrazione del database come azioni changePassword, createCollection, createIndex.
- Query e Write Actions, azioni relative all'esecuzione della manipolazione dei dati in una raccolta. Ad esempio nell'azione di inserimento, il comando che può essere eseguito in quell'azione è il comando di inserimento che può essere inserito nei documenti.
- Azioni di gestione della distribuzione, azioni relative alle modifiche nella configurazione del database. Alcune azioni che rientrano nella categoria Gestione distribuzione sono cpuProfiler, storageDetails, killOp.
- Azioni di replica, azioni relative all'esecuzione di risorse di replica del database come replSetConfigure, replSetHeartbeat.
- Azioni di amministrazione del server, azioni relative ai comandi dalle risorse di amministrazione del server su mongoDB, come le azioni logrotate utilizzate per ruotare i database di log a livello di sistema operativo.
- Azioni di sharding, azioni relative ai comandi dai database di sharding del database come addShard per aggiungere nuovi nodi di shard.
- Azioni di sessione, azioni relative a sessioni di risorse in un database come listSessions, killAnySession.
- Azioni diagnostiche, azioni relative alla diagnosi di risorse come dbStats per scoprire le ultime condizioni nel database.
- Azioni di monitoraggio gratuite, azioni relative al monitoraggio nel database.
Gestione utenti e ruoli MongoDB
Puoi creare un utente e quindi assegnarlo a ruoli predefiniti, ad esempio come segue:
db.createUser( {
user: "admin",
pwd: "thisIspasswordforAdmin",
roles: [ { role: "root", db: "admin" } ]
} );
Nello script sopra, significa che l'utente amministratore verrà creato con una password che è stata definita con ruoli root incorporati, dove il ruolo è incluso nella categoria Superuser.
Oltre a questo, puoi assegnare più di un ruolo a un utente, ecco un esempio:
db.createUser(
{user:'businessintelligence',
pwd:'BIpassw0rd',
roles:[{'role':'read', 'db':'oltp'}, { 'role':'readWrite', 'db':'olapdb'}]
});
Gli utenti di Business Intelligence hanno 2 ruoli, prima i ruoli di lettura nel database oltp e i ruoli di readWrite nel database olapdb.
La creazione di ruoli definiti dall'utente può utilizzare il comando db.createRole(). È necessario determinare lo scopo della creazione del ruolo in modo da poter determinare quali azioni saranno in quel ruolo. Quello che segue è un esempio di creazione di un ruolo per il monitoraggio del database Mongodb :
use admin
db.createRole(
{
role: "RoleMonitoring",
privileges: [
{ resource: { cluster: true }, actions: [ "serverStatus" ] }
],
roles: []
}
)
Poi possiamo assegnare il ruolo definito dall'utente all'utente che creeremo, possiamo usare il seguente comando:
db.createUser( {
user: "monuser",
pwd: "thisIspasswordforMonitoring",
roles: [ { role: "RoleMonitoring", db: "admin" } ]
} );
Intanto, per assegnare il ruolo a un utente esistente, puoi utilizzare il seguente comando:
db.grantRolesToUser(
"existingmonuser",
[
{ role: "RoleMonitoring", db: "admin" }
]
)
Per revocare un utente esistente di un ruolo, puoi utilizzare il seguente comando:
db.revokeRolesFromUser(
"oldmonguser",
[
{ role: "RoleMonitoring", db: "admin" }
]
)
Utilizzando i ruoli definiti dall'utente, possiamo creare ruoli come desideriamo in base alle azioni che intraprenderemo su quei ruoli, ad esempio i ruoli per limitare gli utenti possono eliminare solo righe su determinati database.
Conclusione
L'applicazione dei diritti di accesso può migliorare la sicurezza. La mappatura di ruoli e utenti nel database semplifica la gestione dell'accesso degli utenti.
Assicurati che tutte queste informazioni relative a ruoli e diritti siano documentate correttamente con accesso restrittivo al documento. Ciò consente di condividere le informazioni con l'altro DBA o il personale di supporto ed è utile per le verifiche e la risoluzione dei problemi.