Về cơ bản, bạn có thể kết nối mà không cần xác thực nhưng gần như không thể làm được gì. bạn có thể chạy db.serverBuildInfo()
db.version()
db.adminCommand({ping:1})
db.adminCommand({whatsmyuri:1})
db.adminCommand({features:1})
ví dụ, có thể một số lệnh khác.
Điều có vẻ hơi đau đối với tôi là có thể chạy:
for(var i=0;i++<20000;){db.adminCommand({forceerror:1})}
Điều này tạo ra một chút nhật ký.
Tôi đã kiểm tra các nguồn và bạn có thể thấy hành vi này là một loại lỗi. Các nguồn khởi động shell có trong: https://github.com/mongodb/mongo/blob/master/src/mongo/shell/dbshell.cpp
Về cơ bản, có hai loại kiểm tra chạy dựa trên các giá trị tham số được cung cấp trong đối số mật khẩu và tên người dùng cho mongoshell. Khởi động sẽ kiểm tra khi bạn cung cấp tham số - mật khẩu và không viết mật khẩu sau đó. Và có một dấu kiểm khi bạn không chỉ định bắt đầu mà không có db và bạn đã chỉ định tên người dùng dài hơn 0 so với tên người dùng sẽ cố gắng xác thực (kiểm tra dòng 1043)
if (!nodb && username.size())
.
Nhưng đó là tất cả. Nếu bạn không chỉ định thông tin đăng nhập nào cả, nó có vẻ như sẽ kết nối mà không cần cố gắng xác thực. Tôi đoán trong giai đoạn khởi tạo, nó nên được kiểm tra thời tiết quá trình chúng tôi kết nối đang chạy với xác thực và buộc tắt authenicaion nếu cần.