MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Constructions d'index MongoDB - Empêcher les utilisateurs de déclencher de nouvelles constructions

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:[]});
  1. Enregistrer le contenu de l'extrait de code sous createRole.js.
  2. 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.

Plus de conseils pour vous

Comment créer des index insensibles à la casse dans MongoDB

Les index insensibles à la casse prennent en charge les requêtes qui effectuent des comparaisons de chaînes sans tenir compte de la casse des lettres. Le classement vous permet de spécifier des règles spécifiques à la langue pour la comparaison de chaînes. En savoir plus

Comment arrêter une construction d'index Runaway dans MongoDB

Les constructions d'index dans MongoDB peuvent avoir un impact négatif sur la disponibilité de votre cluster. Si vous déclenchez une génération d'index de premier plan sur une grande collection, votre cluster peut ne pas répondre jusqu'à ce que la génération d'index soit terminée. En savoir plus

Regex MongoDB, index et performances

MongoDB prend en charge les expressions régulières à l'aide de l'opérateur $regex. Cependant, ces requêtes regex MongoDB ont un inconvénient, tous les types de regex sauf un font un mauvais usage des index et entraînent des problèmes de performances. En savoir plus