Bagaimana cara menentukan basis data otentikasi dan basis data target secara terpisah pada koneksi mongodb uri?

13

Saya menggunakan koneksi ini uri untuk terhubung ke mongodb: mongodb://user:password@localhost/admin. Ini akan digunakan adminsebagai otentikasi bot dan basis data target. Bagaimana saya bisa membuat uri untuk digunakan adminsebagai otentikasi tetapi memungkinkan saya untuk terhubung ke database yang berbeda? Silakan lihat perintah di bawah ini sebagai contoh:

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

perintah di atas akan digunakan adminsebagai database otentikasi tetapi terhubung ke testdatabase. bagaimana saya bisa melakukan hal yang sama pada uri?

Joey Yi Zhao
sumber

Jawaban:

26

Ya .. Mudah!

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> 

Anda meletakkan DB tujuan Anda di akhir string "basis" dan menambahkan otentikasi db ke parameter authSource

JJussi
sumber
Yap, inilah yang saya cari. Terima kasih
Joey Yi Zhao
4

Ref:

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

Anda harus menggunakan format di bawah ini dan tidak perlu menggunakan database admin.

mongodb: // pengguna: kata sandi @ localhost / test? authSource = admin

/ database Opsional. Nama database yang akan diautentikasi jika string koneksi menyertakan kredensial otentikasi dalam bentuk nama pengguna: kata sandi @. Jika / database tidak ditentukan dan string koneksi termasuk kredensial, driver akan mengautentikasi ke database admin.

Pastikan Anda memiliki pengguna di testbasis data. Lihat bagian 6 dokumen ini.

Aktifkan Auth

Buat pengguna tambahan sesuai kebutuhan untuk penyebaran Anda.

Basis data tempat Anda membuat pengguna (dalam contoh ini, pengujian) adalah basis data otentikasi pengguna tersebut. Meskipun pengguna akan mengautentikasi ke database ini, pengguna dapat memiliki peran dalam database lain; yaitu database otentikasi pengguna tidak membatasi hak pengguna.

use test
db.createUser(
  {
    user: "myTester",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)
SqlWorldWide
sumber
Saya sudah mencoba uri ini tetapi tidak berhasil. Karena itu mencoba untuk digunakan testsebagai database otentikasi yang tidak benar. Saya perlu menggunakan adminsebagai database otentikasi dan terhubung ke testdatabase.
Joey Yi Zhao
Jawaban yang dimodifikasi.
SqlWorldWide
Terimakasih atas tanggapan Anda. Tapi saya tidak ingin mengubah peran pengguna pada instance database. Apakah ada solusi untuk tidak melakukan perubahan pada instance?
Joey Yi Zhao
Begitulah dirancangnya oleh MongoDB.
SqlWorldWide
Apakah ini berarti saya tidak dapat mencapainya oleh mongo uri?
Joey Yi Zhao