Câu hỏi MongoDB siêu quản trị xác thực tốt nhưng vẫn bị lỗi truy vấn trái phép?


Tôi đã bắt đầu sử dụng MongoDB với xác thực. Theo tài liệu tôi đã sử dụng ngoại lệ localhost để tạo người dùng quản trị với vai trò duy nhất là userAdminAnyDatabase. Tất cả đều ổn. Khi tôi chạy ứng dụng "mongo" và ủy quyền quản trị viên cơ sở dữ liệu sau sử dụng cơ sở dữ liệu đó tôi lấy số 1 cho biết rằng ủy quyền đã thành công. Tuy nhiên, bất kỳ lệnh nào tôi cố gắng thực hiện kết quả trong một lỗi "trái phép", thậm chí cố gắng để hiển thị các bộ sưu tập trong cơ sở dữ liệu quản trị tôi vừa ủy quyền chống lại.

Bất cứ ai có thể cho tôi biết tại sao điều này là và làm thế nào tôi có thể sửa chữa nó? Hiện tại tôi đang chạy mà không cần xác thực cho đến khi tôi có thể sửa lỗi này.


4
2017-08-25 01:01


gốc




Các câu trả lời:


Các userAdminAnyDatabase vai trò (và userAdmin vai trò là một phần mở rộng của) chỉ đơn giản là cung cấp cho người dùng của bạn quyền đọc và ghi vào system.users bộ sưu tập để quản lý người dùng cơ sở dữ liệu. Nó không cho phép người dùng đọc hoặc ghi vào bộ sưu tập cơ sở dữ liệu thực tế. Để làm được điều đó, bạn cần cấp read hoặc là readWrite vai trò.

Xem Vai trò đặc quyền người dùng trong MongoDB và Thêm người dùng vào cơ sở dữ liệu.


4
2017-09-03 09:21





Hãy thử chạy các bước tiếp theo để giải quyết vấn đề xác thực:

  1. bắt đầu mongod mà không cần xác thực được bật và chạy:
  2. tạo nên cơ sở dữ liệu
  3. tạo người dùng với vai trò
  4. tạo một bộ sưu tập giả với một tài liệu
  5. dừng / giết mongod
  6. bắt đầu mongod với xác thực được bật
  7. chuyển sang cơ sở dữ liệu được tạo ở bước 1
  8. xác thực trên cơ sở dữ liệu với người dùng được tạo ở bước 3

lệnh mẫu:

  1. mongod --port 27017 --dbpath /data/db1
  2. use educationDb;
  3. db.createUser({ user : 'readonly', pwd: 'readonly', roles : ['read']})
  4. db.xyz.insert({"name":"nix.education"})
  5. dừng / giết mongod
  6. mongod --auth --port 27017 --dbpath /data/db1
  7. use educationDb;
  8. db.auth('readonly','readonly')

0
2017-07-07 08:25