MongoDBプロダクションクラスターでのインデックスビルドは、細心の注意を払って処理する必要があります。この問題については、以前のブログ投稿の1つであるMongoDBでのインデックス作成の危険性について詳しく説明しています。
データのサイズによっては、フォアグラウンドビルドとバックグラウンドビルドの両方でクラスターがダウンする可能性があります。では、ユーザーが誤ってMongoDBCLIからインデックスビルドをトリガーするのを防ぐにはどうすればよいでしょうか。簡単に言えば、あなたはできないということです。ただし、できることは、ほとんどのユーザーから「CreateIndex」特権を削除して、CLIから誤ってインデックスビルドをトリガーしないようにすることです。システムには、データベースにデータを書き込むためのアクセス権を持つユーザーはほとんどいないはずです。これらのユーザーの中で、インデックスを作成する権限を持っているユーザーはさらに少なくなります。 MongoDBロールの使用方法の入門書については、ドキュメント–ユーザーとロールの管理を参照してください。
これを実装するための最良のオプションは、独自のカスタムロールを作成し、ユーザーの「CreateIndex」権限を削除することです。ただし、権限のリストはコンテキストごとに、場合によってはMongoDBのバージョンごとに異なるため、手動で作成する必要はありませんでした。この小さなスクリプトをまとめて、既存の組み込みの役割の1つを使用し、この役割から「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
ロールが作成されると、このロールを使用して今後ユーザーを作成できます。
|