Làm cách nào để chỉ định cơ sở dữ liệu xác thực và cơ sở dữ liệu đích riêng biệt trên uri kết nối mongodb?


13

Tôi đang sử dụng uri kết nối này để kết nối với mongodb : mongodb://user:password@localhost/admin. Nó sẽ sử dụng adminnhư xác thực bot và cơ sở dữ liệu đích. Làm cách nào tôi có thể khiến uri sử dụng adminlàm xác thực nhưng cho phép tôi kết nối với cơ sở dữ liệu khác? Vui lòng xem lệnh dưới đây làm ví dụ:

mongo --host localhost -u user -p password --authentication admin test

lệnh trên sẽ sử dụng adminlàm cơ sở dữ liệu xác thực nhưng kết nối với testcơ sở dữ liệu. Làm thế nào tôi có thể làm điều tương tự trên uri?

Câu trả lời:


26

Có .. Dễ dàng!

mongo "mongodb://test:testpwd@localhost/test?authSource=admin"
MongoDB shell version v3.4.6
connecting to: mongodb://test:testpwd@localhost/test?authSource=admin
MongoDB server version: 3.4.6
MongoDB> db
test
MongoDB> 

Bạn đặt DB đích của bạn ở cuối chuỗi "cơ sở" và thêm db xác thực vào tham số authSource


Đúng, đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn
Zhao Yi

4

Tham chiếu:

https://docs.mongodb.com/manual/reference/connection-opes/#connections-connection-options

Bạn sẽ cần sử dụng định dạng dưới đây và không cần sử dụng cơ sở dữ liệu quản trị viên.

mongodb: // user: password @ localhost / test? authSource = admin

/ cơ sở dữ liệu Tùy chọn. Tên của cơ sở dữ liệu để xác thực nếu chuỗi kết nối bao gồm thông tin xác thực dưới dạng tên người dùng: password @. Nếu / cơ sở dữ liệu không được chỉ định và chuỗi kết nối bao gồm thông tin đăng nhập, trình điều khiển sẽ xác thực với cơ sở dữ liệu quản trị viên.

Hãy chắc chắn rằng bạn có một người dùng trong testcơ sở dữ liệu. Xem phần 6 của tài liệu này.

Kích hoạt xác thực

Tạo người dùng bổ sung khi cần thiết cho việc triển khai của bạn.

Cơ sở dữ liệu nơi bạn tạo người dùng (trong ví dụ này, kiểm tra) là cơ sở dữ liệu xác thực của người dùng đó. Mặc dù người dùng sẽ xác thực cơ sở dữ liệu này, nhưng người dùng có thể có vai trò trong các cơ sở dữ liệu khác; tức là cơ sở dữ liệu xác thực của người dùng không giới hạn các đặc quyền của người dùng.

use test
db.createUser(
  {
    user: "myTester",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)

Tôi đã thử uri này nhưng nó không hoạt động. Bởi vì nó cố gắng sử dụng testnhư cơ sở dữ liệu xác thực không chính xác. Tôi cần sử dụng adminlàm cơ sở dữ liệu xác thực và kết nối với testcơ sở dữ liệu.
Zhao Yi

Sửa đổi câu trả lời.
SqlWorldWide

Cám ơn phản hồi của bạn. Nhưng tôi không muốn thay đổi vai trò người dùng trong trường hợp cơ sở dữ liệu. Có giải pháp nào để không thực hiện bất kỳ thay đổi nào trên ví dụ không?
Zhao Yi

Đó là cách nó được thiết kế bởi MongoDB.
SqlWorldWide

Điều này có nghĩa là tôi không thể đạt được điều này bởi mongo uri?
Zhao Yi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.