Index-builds op MongoDB-productieclusters moeten met de grootste zorg worden behandeld. We hebben de problemen in detail gedocumenteerd in een van onze vorige blogposts:The Perils of Building Indexes on MongoDB.
Afhankelijk van de grootte van uw gegevens, kunnen zowel voorgrond- als achtergrondbuilds uw cluster naar beneden halen. Dus, hoe voorkom je dat je gebruikers per ongeluk indexbuilds activeren vanuit de MongoDB CLI? Het korte antwoord is dat je dat niet kunt. Wat u echter wel kunt doen, is het privilege "CreateIndex" van de meeste van uw gebruikers verwijderen, zodat ze niet per ongeluk een indexopbouw vanuit de CLI kunnen activeren. Er zouden maar heel weinig gebruikers in uw systeem moeten zijn die toegang hebben om gegevens naar de database te schrijven. Onder deze gebruikers zouden nog minder gebruikers toestemming moeten hebben om indexen te bouwen. Raadpleeg de documentatie – Gebruikers en rollen beheren voor een inleiding over het gebruik van MongoDB-rollen.
De beste optie om dit te implementeren is door uw eigen aangepaste rol te maken en het 'CreateIndex'-recht voor uw gebruikers te verwijderen. We wilden de lijst met machtigingen echter niet met de hand samenstellen, omdat dit voor elke context en mogelijk voor MongoDB-versie anders zal zijn. We hebben dit kleine script samengesteld om een van de bestaande ingebouwde rollen te gebruiken en hebben het 'CreateIndex'-privilege van deze rol verwijderd. In dit voorbeeld gebruiken we de ingebouwde "readWrite"-rol en verwijderen we het privilege "CreateIndex" van deze rol:
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:[]});
- Sla de inhoud van het codefragment op als createRole.js.
- Voer het script uit met de onderstaande syntaxis:
mongo -u <user> -p <password> <host>:27017/<db name> --authenticationDatabase admin createRole.js
Zodra de rol is gemaakt, kunt u deze rol gebruiken om toekomstige gebruikers aan te maken.
|