MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Build di indici MongoDB – Impedire agli utenti di attivare nuove build

Le build di indici sui cluster di produzione MongoDB devono essere gestite con la massima cura. Abbiamo documentato i problemi in dettaglio in uno dei nostri post precedenti sul blog:The Perils of Building Indexes on MongoDB.

A seconda delle dimensioni dei tuoi dati, sia le build in primo piano che quelle in background possono ridurre il tuo cluster. Quindi, come impedire ai tuoi utenti di attivare accidentalmente build di indici dalla CLI MongoDB? La risposta breve è che non puoi. Tuttavia, ciò che puoi fare è rimuovere il privilegio "CreateIndex" dalla maggior parte dei tuoi utenti in modo che non possano attivare accidentalmente una build dell'indice dalla CLI. Ci dovrebbero essere pochissimi utenti nel tuo sistema che hanno accesso per scrivere dati nel database. Tra questi utenti, ancora meno dovrebbero avere l'autorizzazione per creare indici. Per informazioni su come utilizzare i ruoli MongoDB, fare riferimento alla documentazione – Gestisci utenti e ruoli.

L'opzione migliore per implementarlo è creare il tuo ruolo personalizzato e rimuovere il privilegio "CreateIndex" per i tuoi utenti. Tuttavia, non volevamo creare manualmente l'elenco delle autorizzazioni poiché sarà diverso per ogni contesto e possibilmente per la versione di MongoDB. Abbiamo messo insieme questo piccolo script per utilizzare uno dei ruoli predefiniti esistenti e abbiamo rimosso il privilegio "CreateIndex" da questo ruolo. In questo esempio, stiamo utilizzando il ruolo "readWrite" integrato e rimuovendo il privilegio "CreateIndex" da questo ruolo:

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. Salva il contenuto del frammento di codice come createRole.js.
  2. Esegui lo script utilizzando la sintassi seguente:
mongo -u <user> -p <password> <host>:27017/<db name> --authenticationDatabase admin createRole.js

Una volta creato il ruolo, puoi utilizzare questo ruolo per creare utenti in futuro.

Altri suggerimenti per te

Come creare indici senza distinzione tra maiuscole e minuscole in MongoDB

Gli indici senza distinzione tra maiuscole e minuscole supportano query che eseguono confronti di stringhe indipendentemente dalle maiuscole e minuscole. Le regole di confronto ti danno la possibilità di specificare regole specifiche della lingua per il confronto delle stringhe. Ulteriori informazioni

Come fermare la creazione di un indice Runaway in MongoDB

Le build di indici in MongoDB possono avere un impatto negativo sulla disponibilità del tuo cluster. Se attivi una build dell'indice in primo piano su una raccolta di grandi dimensioni, il tuo cluster potrebbe non rispondere fino al completamento della build dell'indice. Ulteriori informazioni

Regex, indice e performance MongoDB

MongoDB supporta le espressioni regolari utilizzando l'operatore $regex. Tuttavia, queste query regex MongoDB hanno uno svantaggio, tutti i tipi di espressioni regolari tranne un fanno un uso scarso degli indici e provocano problemi di prestazioni. Ulteriori informazioni