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?

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


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" } ]
  }
)

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.