Indexaufbauten auf MongoDB-Produktionsclustern müssen mit größter Sorgfalt behandelt werden. Wir haben die Probleme in einem unserer vorherigen Blogposts – The Perils of Building Indexes on MongoDB – ausführlich dokumentiert.
Abhängig von der Größe Ihrer Daten können sowohl Vordergrund- als auch Hintergrundaufbauten Ihren Cluster zum Absturz bringen. Wie verhindern Sie also, dass Ihre Benutzer versehentlich Indexerstellungen über die MongoDB-Befehlszeilenschnittstelle auslösen? Die kurze Antwort ist, dass Sie es nicht können. Was Sie jedoch tun können, ist, den meisten Ihrer Benutzer die Berechtigung „CreateIndex“ zu entziehen, damit sie nicht versehentlich eine Indexerstellung über die CLI auslösen können. Es sollte nur sehr wenige Benutzer in Ihrem System geben, die Zugriff haben, um Daten in die Datenbank zu schreiben. Unter diesen Benutzern sollten noch weniger Benutzer die Berechtigung zum Erstellen von Indizes haben. Eine Einführung in die Verwendung von MongoDB-Rollen finden Sie in der Dokumentation – Benutzer und Rollen verwalten.
Die beste Möglichkeit, dies zu implementieren, besteht darin, Ihre eigene benutzerdefinierte Rolle zu erstellen und das Privileg „CreateIndex“ für Ihre Benutzer zu entfernen. Wir wollten die Liste der Berechtigungen jedoch nicht von Hand erstellen, da diese für jeden Kontext und möglicherweise jede MongoDB-Version unterschiedlich sein wird. Wir haben dieses kleine Skript zusammengestellt, um eine der vorhandenen integrierten Rollen zu verwenden, und das Privileg „CreateIndex“ von dieser Rolle entfernt. In diesem Beispiel verwenden wir die integrierte „readWrite“-Rolle und entfernen das „CreateIndex“-Privileg von dieser Rolle:
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:[]});
- Speichern Sie den Inhalt des Codeausschnitts als createRole.js.
- Führen Sie das Skript mit der folgenden Syntax aus:
mongo -u <user> -p <password> <host>:27017/<db name> --authenticationDatabase admin createRole.js
Sobald die Rolle erstellt wurde, können Sie diese Rolle verwenden, um in Zukunft Benutzer zu erstellen.
|