La gestion des utilisateurs de la base de données est une partie particulièrement importante de la sécurité des données, car nous devons comprendre qui accède à la base de données et définir les droits d'accès de chaque utilisateur. Si une base de données ne dispose pas d'une gestion appropriée des utilisateurs, l'accès des utilisateurs deviendra très désordonné et difficile à maintenir au fil du temps.
MongoDB est une base de données NoSQL et un magasin de documents. L'application du concept RBAC (Role Based-Access Control) est essentielle pour mettre en œuvre une gestion appropriée des utilisateurs afin de gérer les informations d'identification des utilisateurs.
Qu'est-ce que le contrôle d'accès basé sur les rôles (RBAC) ?
RBAC est une approche qui limite le système uniquement aux utilisateurs autorisés. Dans une organisation, des rôles sont créés pour diverses fonctions professionnelles, dans la base de données, nous créons ensuite les droits d'accès pour effectuer certaines opérations attribuées à un rôle particulier.
Les membres du personnel (ou d'autres utilisateurs du système) se voient attribuer certains rôles et, à travers eux, se voient attribuer des autorisations pour exécuter des fonctions du système informatique. Les utilisateurs ne reçoivent pas directement les autorisations, mais les obtiennent uniquement via leur rôle (ou leurs rôles). La gestion des droits d'utilisateurs individuels consiste simplement à placer le rôle approprié dans le compte de l'utilisateur ; cela simplifie les opérations générales (telles que l'ajout d'utilisateurs ou le changement de service utilisateur).
Trois règles principales sont définies pour RBAC :
- Attribution de rôle :Un sujet ne peut exécuter des autorisations que si le sujet a été choisi ou s'est vu attribuer un rôle.
- Le rôle de l'autorisation :le rôle actif d'un sujet doit être autorisé pour le sujet. Avec la règle 1 ci-dessus, cette règle garantit que les utilisateurs ne peuvent prendre des rôles que pour ceux qui sont autorisés.
- Autorisation d'autorisation :Un sujet ne peut exécuter des autorisations que si l'autorisation est autorisée pour le rôle actif du sujet. Avec les règles 1 et 2, cette règle garantit que les utilisateurs ne peuvent exercer l'autorisation que pour ceux qui sont autorisés.
Ce blog passera brièvement en revue le contrôle d'accès basé sur les rôles dans la base de données MongoDB.
Rôles d'utilisateur MongoDB
MongoDB a plusieurs types de rôles dans la base de données, ce sont...
Rôles intégrés
Fournit un accès aux données et aux actions de MongoDB via une autorisation basée sur les rôles et dispose de rôles intégrés qui fournissent plusieurs niveaux d'accès à la base de données.
Le rôle donne plusieurs privilèges pour faire quelque chose sur la ressource qui a été créée. Les rôles intégrés MongoDB ont plusieurs catégories :
- Base de données d'utilisateurs :Rôles Les utilisateurs de la base de données ont pour rôle de manipuler les données dans la collecte non système. Exemples de rôles de base de données utilisateur :lecture, lectureécriture.
- Administration de la base de données :Rôles L'administration de la base de données traite de la gestion administrative des bases de données telles que l'administration des utilisateurs, le schéma et les objets qu'elle contient.
- Exemples de rôles d'administration de base de données :dbAdmin, userAdmin, dbOwner.
- Administration du cluster :Le rôle de l'administration du cluster est d'administrer l'ensemble du système MongoDB, y compris ses jeux de répliques et ses fragments. Exemples de rôles d'administration de cluster :clusterAdmin, clusterManager.
- Sauvegarde et restauration :Ce rôle est spécifique aux fonctions liées à la sauvegarde de la base de données dans MongoDB. Exemples de rôles :sauvegarde, restauration.
- Rôles de toutes les bases de données :Les rôles se trouvent dans l'administrateur de la base de données et ont accès à toutes les bases de données sauf local et config. Exemples :readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase.
- Superutilisateur :Les rôles ont la capacité d'accorder l'accès à chaque utilisateur, à chaque privilège, dans toutes les bases de données. Exemple de ce rôle :root
Rôles définis par l'utilisateur
En plus des rôles intégrés, nous pouvons créer nos propres rôles en fonction de nos besoins, quels privilèges nous donnerons à ces rôles. Pour créer des rôles, vous pouvez utiliser la commande de fonction db.createRole(). Outre la possibilité de créer des rôles, il existe plusieurs autres fonctions pour gérer les rôles existants telles que :db.dropRole () qui est utile pour supprimer des rôles existants dans la base de données, db.getRole () fonctionne pour obtenir toutes les informations de rôles spécifiques.
Actions de privilège dans MongoDB
Les actions de privilèges dans MongoDB sont des actions qui peuvent être effectuées par un utilisateur sur une ressource. MongoDB a plusieurs catégories d'action, à savoir :
- Actions de gestion de la base de données, actions liées aux commandes relatives à l'administration de la base de données telles que les actions changePassword, createCollection, createIndex.
- Actions de requête et d'écriture, actions liées à l'exécution de la manipulation de données dans une collection. Par exemple, dans l'action d'insertion, la commande qui peut être exécutée dans cette action est la commande d'insertion qui peut s'insérer dans les documents.
- Actions de gestion du déploiement, actions relatives aux modifications de la configuration de la base de données. Certaines actions qui entrent dans la catégorie Gestion du déploiement sont cpuProfiler, storageDetails, killOp.
- Actions de réplication, actions relatives à l'exécution des ressources de réplication de base de données telles que replSetConfigure, replSetHeartbeat.
- Actions d'administration du serveur, actions liées aux commandes des ressources d'administration du serveur sur mongoDB telles que les actions de rotation de log qui sont utilisées pour faire tourner les bases de données de journaux au niveau du système d'exploitation.
- Actions de partitionnement, actions liées aux commandes des bases de données de partitionnement de base de données telles que addShard pour ajouter de nouveaux nœuds de partition.
- Actions de session, actions liées aux sessions de ressources dans une base de données telles que listSessions, killAnySession.
- Actions de diagnostic, actions liées au diagnostic des ressources telles que dbStats pour connaître les dernières conditions dans la base de données.
- Actions de surveillance gratuites, actions liées à la surveillance dans la base de données.
Gestion des utilisateurs et des rôles MongoDB
Vous pouvez créer un utilisateur, puis l'affecter à des rôles intégrés, par exemple comme suit :
db.createUser( {
user: "admin",
pwd: "thisIspasswordforAdmin",
roles: [ { role: "root", db: "admin" } ]
} );
Dans le script ci-dessus, cela signifie que l'utilisateur administrateur sera créé avec un mot de passe qui a été défini avec des rôles root intégrés, où le rôle est inclus dans la catégorie Superuser.
En plus de cela, vous pouvez attribuer plus d'un rôle à un utilisateur, voici un exemple :
db.createUser(
{user:'businessintelligence',
pwd:'BIpassw0rd',
roles:[{'role':'read', 'db':'oltp'}, { 'role':'readWrite', 'db':'olapdb'}]
});
Les utilisateurs de Business Intelligence ont 2 rôles, d'abord les rôles de lecture dans la base de données oltp, et les rôles readWrite dans la base de données olapdb.
La création de rôles définis par l'utilisateur peut utiliser la commande db.createRole (). Vous devez déterminer l'objectif de la création du rôle afin que vous puissiez déterminer quelles actions seront dans ce rôle. Voici un exemple de création d'un rôle pour surveiller la base de données Mongodb :
use admin
db.createRole(
{
role: "RoleMonitoring",
privileges: [
{ resource: { cluster: true }, actions: [ "serverStatus" ] }
],
roles: []
}
)
Ensuite, nous pouvons attribuer le rôle défini par l'utilisateur à l'utilisateur que nous allons créer, nous pouvons utiliser la commande suivante :
db.createUser( {
user: "monuser",
pwd: "thisIspasswordforMonitoring",
roles: [ { role: "RoleMonitoring", db: "admin" } ]
} );
En attendant, pour attribuer le rôle à un utilisateur existant, vous pouvez utiliser la commande suivante :
db.grantRolesToUser(
"existingmonuser",
[
{ role: "RoleMonitoring", db: "admin" }
]
)
Pour révoquer un utilisateur existant d'un rôle, vous pouvez utiliser la commande suivante :
db.revokeRolesFromUser(
"oldmonguser",
[
{ role: "RoleMonitoring", db: "admin" }
]
)
En utilisant des rôles définis par l'utilisateur, nous pouvons créer des rôles comme nous le souhaitons en fonction des actions que nous entreprendrons sur ces rôles, tels que des rôles pour restreindre les utilisateurs ne peuvent supprimer que des lignes sur certaines bases de données.
Conclusion
L'application de droits d'accès peut améliorer la sécurité. Le mappage des rôles et des utilisateurs dans la base de données vous permet de gérer facilement l'accès des utilisateurs.
Assurez-vous que toutes ces informations concernant les rôles et les droits sont correctement documentées avec un accès restreint au document. Cela vous aide à partager les informations avec les autres administrateurs de base de données ou le personnel d'assistance et est pratique pour les audits et le dépannage.