วิธีการระบุฐานข้อมูลการรับรองความถูกต้องและฐานข้อมูลเป้าหมายแยกต่างหากในการเชื่อมต่อ mongodb uri?


13

ฉันใช้ URI การเชื่อมต่อนี้จะเชื่อมต่อกับ mongodb://user:password@localhost/adminMongoDB: มันจะใช้adminเป็นรับรองความถูกต้องบอทและฐานข้อมูลเป้าหมาย ฉันจะทำให้ uri ใช้adminเป็นรับรองความถูกต้อง แต่อนุญาตให้ฉันเชื่อมต่อกับฐานข้อมูลอื่นได้อย่างไร โปรดดูคำสั่งด้านล่างเป็นตัวอย่าง:

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

คำสั่งดังกล่าวจะใช้adminเป็นฐานข้อมูลการตรวจสอบ แต่เชื่อมต่อกับtestฐานข้อมูล ฉันจะทำสิ่งเดียวกันกับ uri ได้อย่างไร

คำตอบ:


26

ใช่ .. ได้อย่างง่ายดาย!

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> 

คุณวาง DB ปลายทางของคุณไว้ท้ายสตริง "base" และเพิ่ม db authentication ไปยังพารามิเตอร์ authSource


ใช่นี่คือสิ่งที่ฉันกำลังมองหา ขอบคุณ
Joey Yi Zhao

4

Ref:

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

คุณจะต้องใช้รูปแบบด้านล่างและไม่จำเป็นต้องใช้ฐานข้อมูลผู้ดูแลระบบ

MongoDB: // ผู้ใช้: รหัสผ่าน @ localhost / ทดสอบ authSource = ผู้ดูแลระบบ

/ ฐานข้อมูลไม่จำเป็น ชื่อของฐานข้อมูลที่จะพิสูจน์ตัวตนหากสตริงการเชื่อมต่อมีข้อมูลรับรองการตรวจสอบสิทธิ์ในรูปแบบชื่อผู้ใช้: รหัสผ่าน @ หากไม่ได้ระบุ / ฐานข้อมูลและสตริงการเชื่อมต่อมีข้อมูลประจำตัวไดรเวอร์จะตรวจสอบสิทธิ์กับฐานข้อมูลผู้ดูแลระบบ

ตรวจสอบให้แน่ใจว่าคุณมีผู้ใช้ในtestฐานข้อมูล ดูส่วนที่ 6 ของเอกสารนี้

เปิดใช้งานการตรวจสอบสิทธิ์

สร้างผู้ใช้เพิ่มเติมตามต้องการสำหรับการปรับใช้ของคุณ

ฐานข้อมูลที่คุณสร้างผู้ใช้ (ในตัวอย่างนี้ทดสอบ) คือฐานข้อมูลการพิสูจน์ตัวตนของผู้ใช้ แม้ว่าผู้ใช้จะรับรองความถูกต้องกับฐานข้อมูลนี้ผู้ใช้สามารถมีบทบาทในฐานข้อมูลอื่น ๆ เช่นฐานข้อมูลการพิสูจน์ตัวตนของผู้ใช้ไม่ได้ จำกัด สิทธิ์ของผู้ใช้

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

ฉันลอง uri แล้ว แต่ใช้ไม่ได้ เพราะมันพยายามที่จะใช้testเป็นฐานข้อมูลการรับรองความถูกต้องซึ่งไม่ถูกต้อง ฉันต้องใช้adminเป็นฐานข้อมูลการรับรองความถูกต้องและเชื่อมต่อกับtestฐานข้อมูล
Joey Yi Zhao

แก้ไขคำตอบแล้ว
SqlWorldWide

ขอบคุณสำหรับคำตอบของคุณ แต่ฉันไม่ต้องการเปลี่ยนบทบาทผู้ใช้ในอินสแตนซ์ฐานข้อมูล มีวิธีใดที่จะไม่ทำการเปลี่ยนแปลงใด ๆ ในอินสแตนซ์?
Joey Yi Zhao

นั่นคือวิธีที่มันถูกออกแบบโดย MongoDB
SqlWorldWide

นี่หมายความว่าฉันไม่สามารถบรรลุสิ่งนี้โดย Mongo uri หรือไม่?
Joey Yi Zhao
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.