sql >> Databáze >  >> NoSQL >> MongoDB

Sestavení indexu MongoDB – Zabránění uživatelům ve spouštění nových sestavení

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:[]});
  1. Uložte obsah fragmentu kódu jako createRole.js.
  2. 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ů.

Další tipy pro vás

Jak vytvořit indexy nerozlišující malá a velká písmena v MongoDB

Indexy bez ohledu na malá a velká písmena podporují dotazy, které provádějí porovnávání řetězců bez ohledu na velikost písmen. Porovnání vám dává možnost určit pravidla specifická pro jazyk pro porovnávání řetězců. Další informace

Jak zastavit sestavení indexu Runaway v MongoDB

Sestavení indexu v MongoDB může mít nepříznivý dopad na dostupnost vašeho clusteru. Pokud spustíte sestavení indexu v popředí na velké kolekci, váš klastr může přestat reagovat, dokud nebude sestavení indexu dokončeno. Další informace

MongoDB Regex, index a výkon

MongoDB podporuje regulární výrazy pomocí operátoru $regex. Tyto dotazy na regulární výraz MongoDB však mají nevýhodu, všechny kromě jednoho typu regulárních výrazů špatně využívají indexy a vedou k problémům s výkonem. Další informace


  1. Nejúčinnější způsob, jak získat několik hashů v Redis?

  2. Vytvoření posluchače redis - možné v php?

  3. Klíče StackExchange Redis ChannelPrefix Not Scoping Keys

  4. MongoDB $weeklyUpdate #65 (15. dubna 2022):Čas GDELT, Mongoose a Hackathon!