MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Kompilacje indeksu MongoDB — zapobieganie uruchamianiu nowych kompilacji przez użytkowników

Wersje indeksu w klastrach produkcyjnych MongoDB muszą być traktowane z najwyższą ostrożnością. Szczegółowo udokumentowaliśmy te problemy w jednym z naszych poprzednich postów na blogu – Niebezpieczeństwa związane z budowaniem indeksów w MongoDB.

W zależności od rozmiaru danych zarówno kompilacje pierwszego planu, jak i tła mogą obniżyć klaster. Jak więc uchronić użytkowników przed przypadkowym uruchomieniem kompilacji indeksu z interfejsu MongoDB CLI? Krótka odpowiedź brzmi, że nie możesz. Możesz jednak usunąć uprawnienie „CreateIndex” z większości użytkowników, aby nie mogli przypadkowo wywołać kompilacji indeksu z CLI. W twoim systemie powinno być bardzo niewielu użytkowników, którzy mają dostęp do zapisywania danych w bazie danych. Wśród tych użytkowników jeszcze mniej powinno mieć uprawnienia do budowania indeksów. Aby dowiedzieć się, jak korzystać z ról MongoDB, zapoznaj się z dokumentacją – Zarządzanie użytkownikami i rolami.

Najlepszą opcją do zaimplementowania tego jest utworzenie własnej niestandardowej roli i usunięcie uprawnienia „CreateIndex” dla użytkowników. Nie chcieliśmy jednak tworzyć listy uprawnień ręcznie, ponieważ będzie ona różna dla każdego kontekstu i prawdopodobnie wersji MongoDB. Stworzyliśmy ten mały skrypt, aby używać jednej z istniejących wbudowanych ról i usunęliśmy z tej roli uprawnienie „CreateIndex”. W tym przykładzie używamy wbudowanej roli „readWrite” i usuwamy uprawnienie „CreateIndex” z tej roli:

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. Zapisz zawartość fragmentu kodu jako createRole.js.
  2. Uruchom skrypt, używając poniższej składni:
mongo -u <user> -p <password> <host>:27017/<db name> --authenticationDatabase admin createRole.js

Po utworzeniu roli możesz użyć tej roli do tworzenia przyszłych użytkowników.

Więcej wskazówek dla Ciebie

Jak tworzyć indeksy bez rozróżniania wielkości liter w MongoDB

Indeksy niewrażliwe na wielkość liter obsługują zapytania, które wykonują porównania ciągów bez względu na wielkość liter. Sortowanie daje możliwość określenia reguł specyficznych dla języka dla porównywania ciągów. Dowiedz się więcej

Jak zatrzymać niekontrolowaną kompilację indeksu w MongoDB

Kompilacje indeksu w MongoDB mogą mieć negatywny wpływ na dostępność klastra. Jeśli uruchomisz kompilację indeksu pierwszego planu na dużej kolekcji, klaster może przestać odpowiadać do czasu zakończenia kompilacji indeksu. Dowiedz się więcej

MongoDB Regex, indeks i wydajność

MongoDB obsługuje wyrażenia regularne przy użyciu operatora $regex. Jednak te zapytania MongoDB regex mają wadę, wszystkie oprócz jednego typu regex słabo wykorzystują indeksy i powodują problemy z wydajnością. Dowiedz się więcej


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Transakcje w MongoDB

  2. Zapytanie Mongoose near(...) na indeksowanym polu 2dsphere nie zwraca poprawnych wyników

  3. mongodb Failed:błąd łączenia z serwerem db:brak osiągalnych serwerów

  4. Tworzenie, odczytywanie, aktualizowanie i usuwanie danych przy użyciu Node.js — Mongoose

  5. Jaki jest najbardziej dojrzały sterownik MongoDB dla C#?