Comment spécifier la base de données d'authentification et la base de données cible séparément sur l'URI de connexion mongodb?

13

J'utilise cette uri de connexion pour se connecter à MongoDB: mongodb://user:password@localhost/admin. Il utilisera l' adminauthentification bot et la base de données cible. Comment puis-je utiliser l'URI admincomme authentification mais me permettre de me connecter à une autre base de données? Veuillez voir la commande ci-dessous à titre d'exemple:

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

la commande ci-dessus utilisera adminla base de données d'authentification, mais se connectera à la testbase de données. comment puis-je faire la même chose sur uri?

Zhao Yi
la source

Réponses:

26

Oui .. facilement!

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> 

Vous mettez votre base de données de destination à la fin de la chaîne "de base" et ajoutez la base de données d'authentification au paramètre authSource

JJussi
la source
Oui, c'est exactement ce que je recherche. Merci
Zhao Yi
4

Réf:

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

Vous devrez utiliser le format ci-dessous et vous n'avez pas besoin d'utiliser la base de données d'administration.

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

/ database Facultatif. Nom de la base de données à authentifier si la chaîne de connexion inclut des informations d'authentification sous la forme d'un nom d'utilisateur: mot de passe @. Si / database n'est pas spécifié et que la chaîne de connexion inclut des informations d'identification, le pilote s'authentifiera auprès de la base de données d'administration.

Assurez-vous d'avoir un utilisateur dans la testbase de données. Voir la section 6 de ce document.

Activer l'authentification

Créez des utilisateurs supplémentaires selon vos besoins pour votre déploiement.

La base de données dans laquelle vous créez l'utilisateur (dans cet exemple, test) est la base de données d'authentification de cet utilisateur. Bien que l'utilisateur s'authentifie auprès de cette base de données, l'utilisateur peut avoir des rôles dans d'autres bases de données; c'est-à-dire que la base de données d'authentification de l'utilisateur ne limite pas les privilèges de l'utilisateur.

use test
db.createUser(
  {
    user: "myTester",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)
SqlWorldWide
la source
J'ai essayé cet uri mais cela ne fonctionne pas. Parce qu'il essaie d'utiliser testcomme base de données d'authentification qui n'est pas correcte. Je dois utiliser admincomme base de données d'authentification et me connecter à la testbase de données.
Zhao Yi
Réponse modifiée.
SqlWorldWide
Merci pour votre réponse. Mais je ne veux pas changer le rôle d'utilisateur sur l'instance de base de données. Existe-t-il une solution pour ne pas apporter de modification à l'instance?
Zhao Yi
C'est ainsi qu'il est conçu par MongoDB.
SqlWorldWide
Est-ce à dire que je ne peux pas y arriver par mongo uri?
Zhao Yi