Индексните надстройки върху производствени клъстери на MongoDB трябва да се обработват с най-голямо внимание. Документирахме проблемите подробно в една от предишните ни публикации в блога – Опасностите от изграждането на индекси в MongoDB.
В зависимост от размера на вашите данни, както на преден план, така и на заден план, може да намали вашия клъстер. И така, как да предпазите потребителите си от случайно задействане на изграждане на индекси от MongoDB CLI? Краткият отговор е, че не можете. Въпреки това, това, което можете да направите, е да премахнете привилегията „CreateIndex“ от повечето си потребители, така че да не могат случайно да задействат изграждане на индекс от CLI. Трябва да има много малко потребители във вашата система, които имат достъп да записват данни в базата данни. Сред тези потребители още по-малко трябва да имат разрешение за изграждане на индекси. За пример как да използвате ролите на MongoDB, моля, вижте документацията – Управление на потребители и роли.
Най-добрият вариант за прилагане на това е да създадете своя собствена персонализирана роля и да премахнете привилегията „CreateIndex“ за вашите потребители. Въпреки това, ние не искахме да изграждаме списъка с разрешения на ръка, тъй като това ще бъде различно за всеки контекст и евентуално версия на MongoDB. Събрахме този малък скрипт, за да използваме една от съществуващите вградени роли, и премахнахме привилегията „CreateIndex“ от тази роля. В този пример използваме вградената роля „readWrite“ и премахваме привилегията „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:[]});
- Запазете съдържанието на кодовия фрагмент като createRole.js.
- Изпълнете скрипта, като използвате синтаксиса по-долу:
mongo -u <user> -p <password> <host>:27017/<db name> --authenticationDatabase admin createRole.js
След като ролята бъде създадена, можете да използвате тази роля, за да създавате потребители занапред.
|