Wie kann ich die Authentifizierungsdatenbank und die Zieldatenbank auf der Mongodb-Verbindungs-URL separat angeben?


12

Ich benutze diese Verbindung uri, um eine Verbindung zu mongodb herzustellen : mongodb://user:password@localhost/admin. Es wird adminals Bot-Authentifizierung und Zieldatenbank verwendet. Wie kann ich die URL adminals Authentifizierung verwenden, aber eine Verbindung zu einer anderen Datenbank herstellen? Bitte sehen Sie den folgenden Befehl als Beispiel:

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

Der obige Befehl wird adminals Authentifizierungsdatenbank verwendet, stellt jedoch eine Verbindung zur testDatenbank her. Wie kann ich dasselbe mit Uri machen?

Antworten:


25

Ja .. leicht!

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> 

Sie setzen Ihre Ziel-DB am Ende der "Basis" -String und fügen dem Parameter authSource eine Authentifizierungsdatenbank hinzu


Ja, genau das suche ich. Vielen Dank
Zhao Yi

4

Ref:

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

Sie müssen das folgende Format verwenden und müssen keine Admin-Datenbank verwenden.

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

/ database Optional. Der Name der Datenbank, die authentifiziert werden soll, wenn die Verbindungszeichenfolge Authentifizierungsdaten in Form des Benutzernamens enthält: password @. Wenn / database nicht angegeben ist und die Verbindungszeichenfolge Anmeldeinformationen enthält, authentifiziert sich der Treiber bei der Administratordatenbank.

Stellen Sie sicher, dass Sie einen Benutzer in der testDatenbank haben. Siehe Abschnitt 6 dieses Dokuments.

Auth aktivieren

Erstellen Sie nach Bedarf zusätzliche Benutzer für Ihre Bereitstellung.

Die Datenbank, in der Sie den Benutzer erstellen (in diesem Beispiel Test), ist die Authentifizierungsdatenbank dieses Benutzers. Obwohl sich der Benutzer bei dieser Datenbank authentifizieren würde, kann er Rollen in anderen Datenbanken haben. Das heißt, die Authentifizierungsdatenbank des Benutzers schränkt die Berechtigungen des Benutzers nicht ein.

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

Ich habe dieses Uri ausprobiert, aber es funktioniert nicht. Weil es versucht, testals Authentifizierungsdatenbank zu verwenden, was nicht korrekt ist. Ich muss adminals Authentifizierungsdatenbank verwenden und eine Verbindung zur testDatenbank herstellen.
Zhao Yi

Geänderte Antwort.
SqlWorldWide

Vielen Dank für Ihre Antwort. Ich möchte jedoch die Benutzerrolle in der Datenbankinstanz nicht ändern. Gibt es eine Lösung, um keine Änderungen an der Instanz vorzunehmen?
Zhao Yi

So wird es von MongoDB entworfen.
SqlWorldWide

Heißt das, ich kann das nicht mit Mongo Uri erreichen?
Zhao Yi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.