Tất cả người dùng được tạo trong MongoDB 3.x đều được tạo bằng SCRAM-SHA1 phá vỡ khả năng tương thích ngược với các công cụ mong đợi MongoDB-CR. Có một danh sách các công cụ và trình điều khiển giặt là chưa được cập nhật để hỗ trợ SCRAM-SHA1, chẳng hạn như Robomongo và MongoVUE.
Trong một số trường hợp, ngay cả khi phiên bản trình điều khiển / ORM mới hơn khả dụng, bạn có thể chưa sẵn sàng nâng cấp trình điều khiển của mình do một số vấn đề về khả năng tương thích.
MongoDB hỗ trợ hai phương pháp xác thực:
- MongoDB- CR (Thử thách-phản hồi) Cơ chế
xác thực người dùng bằng mật khẩu. Cơ chế xác thực mặc định cho đến 2.6.x. Tham khảo tài liệu để biết thêm chi tiết. - SCRAM-SHA1
Đây là một tiêu chuẩn IETF cho các cơ chế phản hồi thách thức để xác thực người dùng bằng mật khẩu. Đây là hệ thống mới hơn và an toàn hơn. Nó không tương thích ngược với MongoDB-CR. Tham khảo tài liệu để biết thêm chi tiết.
MongoDB CR là hệ thống xác thực kế thừa. MongoDB 3.X đã chuyển hệ thống xác thực người dùng mặc định sang SCRAM-SHA1. Vì vậy, bất kỳ người dùng mới nào được tạo trong hệ thống đều là người dùng SCRAM-SHA1. Vì SCRAM-SHA1 không tương thích ngược nên nó phá vỡ xác thực với tất cả người dùng sử dụng cơ chế MONGODB-CR.
Tuy nhiên, bạn có thể muốn sử dụng công cụ lưu trữ WiredTiger mới có sẵn trong MongoDB 3.x. Dưới đây là các bước để định cấu hình MONGODB-CR làm cơ chế xác thực mặc định trong MongoDB 3.x, giả sử bạn đang chạy một tập hợp bản sao:
- Tạo một cụm MongoDB 3.x.
- Dừng tất cả các nút của tập hợp bản sao khác với tập hợp chính.
- Tắt auth trên nút chính và khởi động lại nút. Tôi đã thực hiện việc này bằng cách nhận xét các mục sau trong tệp conf MongoDB và khởi động lại máy chủ:
#security: # authorization: enabled # keyFile: /var/lib/mongo/rskey #replication: # replSetName: RS-rsname-0
- Kết nối với phiên bản chính và thay đổi phiên bản giản đồ:
use admin; var schema = db.system.version.findOne({"_id" : "authSchema"}); schema.currentVersion = 3; db.system.version.save(schema)
- Hoàn tác các thay đổi đối với tệp mongodb.conf ở bước 3 ở trên và khởi động lại MongoDB.
- Khởi động lại MongoDB trên các nút khác của tập hợp bản sao và đảm bảo rằng tập hợp bản sao hoạt động tốt. Khi điều này được thực hiện, tất cả người dùng được tạo trên hệ thống sẽ là người dùng MongoDB-CR. Bạn có thể xác thực điều này bằng cách thực hiện lệnh sau:
db.system.users.find().pretty();
Tuy nhiên, lưu ý rằng đây chỉ là một giải pháp tạm thời. Cách khắc phục lâu dài an toàn hơn là nâng cấp máy chủ MongoDB của bạn để sử dụng mô hình SCRAM-SHA1. Khi bạn đã sẵn sàng nâng cấp, hãy chạy tập lệnh sau để nâng cấp phiên bản giản đồ của người dùng lên SCRAM-SHA1:
db.getSiblingDB("admin").runCommand({authSchemaUpgrade});