Indeks bygger på MongoDB produktionsklynger skal håndteres med den største omhu. Vi har dokumenteret problemerne i detaljer i et af vores tidligere blogindlæg – The Perils of Building Indexes på MongoDB.
Afhængigt af størrelsen på dine data kan både forgrunds- og baggrundsbygninger bringe din klynge ned. Så hvordan forhindrer du, at dine brugere ved et uheld udløser indeksopbygninger fra MongoDB CLI? Det korte svar er, at du ikke kan. Men hvad du kan gøre er at fjerne "CreateIndex"-privilegiet fra de fleste af dine brugere, så de ikke ved et uheld kan udløse en indeksbuild fra CLI. Der burde være meget få brugere i dit system, der har adgang til at skrive data til databasen. Blandt disse brugere burde endnu færre have tilladelse til at bygge indekser. For en primer om, hvordan man bruger MongoDB-roller, se venligst dokumentationen – Administrer brugere og roller.
Den bedste mulighed for at implementere dette er at oprette din egen tilpassede rolle og fjerne 'CreateIndex'-privilegiet for dine brugere. Vi ønskede dog ikke at bygge listen over tilladelser i hånden, da denne vil være forskellig for hver kontekst og muligvis MongoDB-version. Vi sammensatte dette lille script for at bruge en af de eksisterende indbyggede roller og fjernede 'CreateIndex'-privilegiet fra denne rolle. I dette eksempel bruger vi den indbyggede "readWrite"-rolle og fjerner "CreateIndex"-privilegiet fra denne rolle:
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:[]});
- Gem indholdet af kodestykket som createRole.js.
- Kør scriptet ved hjælp af syntaksen nedenfor:
mongo -u <user> -p <password> <host>:27017/<db name> --authenticationDatabase admin createRole.js
Når rollen er oprettet, kan du bruge denne rolle til at oprette brugere fremover.
|