Index staví na produkčních clusterech MongoDB je třeba zacházet s maximální opatrností. Tyto problémy jsme podrobně zdokumentovali v jednom z našich předchozích blogových příspěvků – The Perils of Building Indexes on MongoDB.
V závislosti na velikosti vašich dat může sestavení na popředí i na pozadí snížit váš cluster. Jak tedy zabráníte tomu, aby vaši uživatelé náhodně spustili sestavení indexu z MongoDB CLI? Krátká odpověď je, že nemůžete. Co však můžete udělat, je odebrat oprávnění „CreateIndex“ většině vašich uživatelů, aby nemohli náhodně spustit sestavení indexu z CLI. Ve vašem systému by mělo být velmi málo uživatelů, kteří mají přístup k zápisu dat do databáze. Mezi těmito uživateli by mělo mít oprávnění k vytváření indexů ještě méně. Základní informace o tom, jak používat role MongoDB, najdete v dokumentaci – Správa uživatelů a rolí.
Nejlepší možností, jak to implementovat, je vytvořit si vlastní roli a odebrat uživatelům oprávnění „CreateIndex“. Nechtěli jsme však vytvářet seznam oprávnění ručně, protože se bude lišit pro každý kontext a možná i verzi MongoDB. Sestavili jsme tento malý skript, abychom mohli používat jednu ze stávajících vestavěných rolí, a z této role jsme odstranili privilegium „CreateIndex“. V tomto příkladu používáme vestavěnou roli „readWrite“ a této roli odebíráme oprávnění „CreateIndex“:
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:[]});
- Uložte obsah fragmentu kódu jako createRole.js.
- Spusťte skript pomocí níže uvedené syntaxe:
mongo -u <user> -p <password> <host>:27017/<db name> --authenticationDatabase admin createRole.js
Jakmile je role vytvořena, můžete tuto roli používat k vytváření dalších uživatelů.
|