Indexbyggen på MongoDB-produktionskluster måste hanteras med största försiktighet. Vi har dokumenterat problemen i detalj i ett av våra tidigare blogginlägg – The Perils of Building Indexes på MongoDB.
Beroende på storleken på dina data kan både förgrunds- och bakgrundsbyggnationer få ner ditt kluster. Så, hur förhindrar du att dina användare av misstag utlöser indexbyggen från MongoDB CLI? Det korta svaret är att du inte kan. Men vad du kan göra är att ta bort "CreateIndex"-privilegiet från de flesta av dina användare så att de inte av misstag kan utlösa ett indexbygge från CLI. Det bör finnas väldigt få användare i ditt system som har tillgång att skriva data till databasen. Bland dessa användare borde ännu färre ha tillstånd att bygga index. För en primer om hur man använder MongoDB-roller, se dokumentationen – Hantera användare och roller.
Det bästa alternativet för att implementera detta är att skapa din egen anpassade roll och ta bort "CreateIndex"-privilegiet för dina användare. Vi ville dock inte bygga listan med behörigheter för hand eftersom detta kommer att vara olika för varje sammanhang och eventuellt MongoDB-version. Vi satte ihop det här lilla skriptet för att använda en av de befintliga inbyggda rollerna och tog bort "CreateIndex"-privilegiet från den här rollen. I det här exemplet använder vi den inbyggda "readWrite"-rollen och tar bort "CreateIndex"-privilegiet från den här rollen:
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:[]});
- Spara innehållet i kodavsnittet som createRole.js.
- Kör skriptet med syntaxen nedan:
mongo -u <user> -p <password> <host>:27017/<db name> --authenticationDatabase admin createRole.js
När rollen har skapats kan du använda den här rollen för att skapa användare framöver.
|