Chỉ mục xây dựng trên các cụm sản xuất MongoDB cần được xử lý hết sức cẩn thận. Chúng tôi đã ghi lại các vấn đề một cách chi tiết trong một trong các bài đăng trên blog trước đây của chúng tôi - Mối nguy hiểm của việc xây dựng chỉ mục trên MongoDB.
Tùy thuộc vào kích thước dữ liệu của bạn, cả bản dựng nền trước và nền đều có thể hạ thấp cụm của bạn. Vì vậy, làm cách nào để ngăn người dùng của bạn vô tình kích hoạt các bản dựng chỉ mục từ MongoDB CLI? Câu trả lời ngắn gọn là bạn không thể. Tuy nhiên, những gì bạn có thể làm là xóa đặc quyền “CreateIndex” khỏi hầu hết người dùng của bạn để họ không thể vô tình kích hoạt xây dựng chỉ mục từ CLI. Sẽ có rất ít người dùng trong hệ thống của bạn có quyền truy cập để ghi dữ liệu vào cơ sở dữ liệu. Trong số những người dùng này, thậm chí ít hơn sẽ có quyền xây dựng chỉ mục. Để biết sơ bộ về cách sử dụng vai trò MongoDB, vui lòng tham khảo tài liệu - Quản lý người dùng và vai trò.
Tùy chọn tốt nhất để triển khai điều này là tạo vai trò tùy chỉnh của riêng bạn và xóa đặc quyền ‘CreateIndex’ cho người dùng của bạn. Tuy nhiên, chúng tôi không muốn tạo danh sách các quyền theo cách thủ công vì điều này sẽ khác nhau đối với từng ngữ cảnh và có thể là phiên bản MongoDB. Chúng tôi kết hợp tập lệnh nhỏ này để sử dụng một trong các vai trò tích hợp sẵn hiện có và xóa đặc quyền ‘CreateIndex’ khỏi vai trò này. Trong ví dụ này, chúng tôi đang sử dụng vai trò “readWrite” trong nội dung và xóa đặc quyền “CreateIndex’ khỏi vai trò này:
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:[]});
- Lưu nội dung của đoạn mã dưới dạng createRole.js.
- Chạy tập lệnh theo cú pháp bên dưới:
mongo -u <user> -p <password> <host>:27017/<db name> --authenticationDatabase admin createRole.js
Khi vai trò được tạo, bạn có thể sử dụng vai trò này để tạo người dùng về sau.
|