Jak określić bazę danych uwierzytelniania i docelową bazę danych osobno dla URI połączenia Mongodb?

13

Używam tego połączenia URI, aby połączyć się MongoDB: mongodb://user:password@localhost/admin. Będzie używany adminjako uwierzytelnianie botów i docelowa baza danych. Jak mogę użyć adminidentyfikatora URI jako uwierzytelnienia, ale zezwolić na połączenie z inną bazą danych? Zobacz poniższe polecenie jako przykład:

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

powyższe polecenie będzie używane adminjako baza danych uwierzytelniania, ale połączy się z testbazą danych. jak mogę zrobić to samo na URI?

Joey Yi Zhao
źródło

Odpowiedzi:

26

Tak .. łatwo!

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> 

Umieszczasz docelową bazę danych na końcu łańcucha „podstawowego” i dodajesz bazę danych uwierzytelniania do parametru authSource

JJussi
źródło
Tak, właśnie tego szukam. Dzięki
Joey Yi Zhao
4

Ref:

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

Musisz użyć poniższego formatu i nie musisz korzystać z administracyjnej bazy danych.

mongodb: // użytkownik: hasło @ localhost / test? authSource = admin

/ baza danych Opcjonalne. Nazwa bazy danych do uwierzytelnienia, jeśli ciąg połączenia zawiera dane uwierzytelniające w postaci nazwy użytkownika: hasło @. Jeśli nie określono / baza danych, a ciąg połączenia zawiera poświadczenia, sterownik uwierzytelni się w administracyjnej bazie danych.

Upewnij się, że masz użytkownika w testbazie danych. Patrz sekcja 6 tego dokumentu.

Włącz uwierzytelnianie

Utwórz dodatkowych użytkowników zgodnie z potrzebami dla swojego wdrożenia.

Baza danych, w której utworzono użytkownika (w tym przykładzie test), jest bazą danych uwierzytelniania tego użytkownika. Chociaż użytkownik uwierzytelniałby się w tej bazie danych, może on pełnić role w innych bazach danych; tzn. baza danych uwierzytelniania użytkownika nie ogranicza uprawnień użytkownika.

use test
db.createUser(
  {
    user: "myTester",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)
SqlWorldWide
źródło
Próbowałem tego URI, ale to nie działa. Ponieważ próbuje użyć testjako bazy danych uwierzytelniania, co jest nieprawidłowe. Muszę użyć adminjako bazy danych uwierzytelniania i połączyć się z testbazą danych.
Joey Yi Zhao,
Zmodyfikowana odpowiedź.
SqlWorldWide
Dzięki za twoją odpowiedź. Ale nie chcę zmieniać roli użytkownika w instancji bazy danych. Czy istnieje jakieś rozwiązanie, aby nie wprowadzać żadnych zmian w instancji?
Joey Yi Zhao,
Tak to jest zaprojektowane przez MongoDB.
SqlWorldWide
Czy to znaczy, że nie mogę tego osiągnąć za pomocą mongo uri?
Joey Yi Zhao,