Les constructions d'index sur les clusters de production MongoDB doivent être traitées avec le plus grand soin. Nous avons documenté les problèmes en détail dans l'un de nos articles de blog précédents :Les périls de la création d'index sur MongoDB.
Selon la taille de vos données, les versions de premier plan et d'arrière-plan peuvent entraîner l'arrêt de votre cluster. Alors, comment empêchez-vous vos utilisateurs de déclencher accidentellement des constructions d'index à partir de la CLI MongoDB ? La réponse courte est que vous ne pouvez pas. Cependant, vous pouvez supprimer le privilège "CreateIndex" de la plupart de vos utilisateurs afin qu'ils ne puissent pas déclencher accidentellement une construction d'index à partir de la CLI. Il devrait y avoir très peu d'utilisateurs dans votre système qui ont accès pour écrire des données dans la base de données. Parmi ces utilisateurs, encore moins devraient avoir la permission de créer des index. Pour une introduction à l'utilisation des rôles MongoDB, veuillez vous référer à la documentation - Gérer les utilisateurs et les rôles.
La meilleure option pour implémenter ceci est de créer votre propre rôle personnalisé et de supprimer le privilège "CreateIndex" pour vos utilisateurs. Cependant, nous ne voulions pas construire la liste des autorisations à la main car celle-ci sera différente pour chaque contexte et éventuellement la version de MongoDB. Nous avons créé ce petit script pour utiliser l'un des rôles intégrés existants et avons supprimé le privilège "CreateIndex" de ce rôle. Dans cet exemple, nous utilisons le rôle intégré "readWrite" et supprimons le privilège "CreateIndex" de ce rôle :
var privs = db.getRole('readWrite',{ showPrivileges: true }); privs.privileges.forEach(function (item, index) { var index = item.actions.indexOf("createIndex"); if (index !== -1) item.actions.splice(index, 1); }); db.createRole({role:"readWriteNoIndex",privileges:privs.privileges,roles:[]});
- Enregistrer le contenu de l'extrait de code sous createRole.js.
- Exécutez le script en utilisant la syntaxe ci-dessous :
mongo -u <user> -p <password> <host>:27017/<db name> --authenticationDatabase admin createRole.js
Une fois le rôle créé, vous pouvez utiliser ce rôle pour créer des utilisateurs à l'avenir.
|