MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Chaîne de connexion dans MongoDB (avec exemples)

Pour que les applications se connectent à un serveur de base de données, elles doivent utiliser une chaîne de connexion, qui est une expression contenant tous les paramètres nécessaires. Les chaînes de connexion fournissent l'instance du serveur, le nom de la base de données, les détails d'authentification et d'autres paramètres pour interagir avec le serveur de base de données.

Formats des chaînes de connexion

L'une ou l'autre des méthodes données configurera une chaîne de connexion MongoDB. Le format de connexion de la liste de départ DNS ou le format de chaîne de connexion standard.

Le format standard pour connecter les chaînes

Il existe trois types de déploiement MongoDB de base :autonome, jeu de réplicas et cluster partagé, qui sont tous décrits ici.

C'est la manière typique de joindre des URI.

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

Exemples :

Autonome
mongodb://mongodb0.example.com:27017
Autonome qui applique le contrôle d'accès :
mongodb://myDBReader:D1fficultP%[email protected]:27017/?authSource=admin
Ensemble de répliques
mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl
Jeu de répliques qui applique le contrôle d'accès :
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?authSource=admin&replicaSet=myRepl
Cluster partagé
mongodb://mongos0.example.com:27017,mongos1.example.com:27017,mongos2.example.com:27017
Cluster partagé qui applique le contrôle d'accès :
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongos1.example.com:27017,mongos2.example.com:27017/?authSource=admin

Composants d'une chaîne de connexion

Composants de la chaîne de connexion URI standard :

  1. mongodb:// – Un préfixe nécessaire indiquant une chaîne de connexion standard.
  2. nom d'utilisateur :mot de passe@ – Les identifiants d'authentification sont facultatifs. Si authSource est donné, le client essaiera d'authentifier l'utilisateur. Sans spécifier d'authSource, le client vérifiera l'utilisateur par rapport à defaultauthdb. De plus, la base de données d'administration est utilisée si le defaultauthdb n'est pas donné.
  3. hôte[:port] – L'hôte (et éventuellement le numéro de port) sur lequel l'instance mongod fonctionne (ou l'instance mongos dans le cas d'un cluster fragmenté). Vous pouvez indiquer un nom d'hôte, une adresse IP ou un socket dans un domaine UNIX. Indiquez le nombre d'hôtes requis pour votre topologie de déploiement :
    Dans le cas d'une seule instance mongod, indiquez le nom d'hôte de l'instance mongod.
    Indiquez le ou les noms d'hôte de la ou des instances mongod spécifiées dans les paramètres du jeu de répliques pour un jeu de répliques.
    Indiquez le ou les noms d'hôte de l'instance mongos pour un cluster fragmenté. Sans spécifier de numéro de port, le port générique 27017 est utilisé.
  4. /defaultauthdb – Optionnel. Si la chaîne de connexion contient username:password@ informations d'identification, mais que l'option authSource n'est pas fournie, la base de données d'authentification est utilisée. Le client utilise la base de données d'administration pour authentifier l'utilisateur si authSource et defaultauthdb ne sont pas fournis.
  5. ? Optionnel. Les paramètres spécifiques à la connexion sont spécifiés dans les paires nom>=valeur> dans la chaîne de requête. La liste des choix disponibles peut être consultée dans la section Options de chaîne de connexion. Une barre oblique (/) doit être incluse entre l'hôte et le point d'interrogation (?) pour commencer la chaîne d'options si aucune base de données n'est spécifiée dans la chaîne de connexion.

Format de connexion pour la liste de départ DNS

Il existe également une liste de départ construite par DNS pour les connexions MongoDB. L'utilisation de DNS pour créer la liste des serveurs accessibles offre une plus grande flexibilité de déploiement et la possibilité de changer de serveur par cycles sans reconfigurer les clients.

Utilisez le préfixe mongodb+srv au lieu du préfixe de chaîne de connexion MongoDB habituel pour utiliser la liste de départ DNS. Pour indiquer à l'utilisateur que le nom d'hôte suivant est un enregistrement DNS SRV, utilisez le préfixe +srv. Ensuite, le mongosh ou le pilote interrogera le système de noms de domaine (DNS) pour découvrir quels hôtes exécutent les instances mongod.

Remarque : L'option tls (ou l'option ssl correspondante) est définie sur true si la variable de chaîne de connexion +srv est utilisée. En spécifiant explicitement l'option tls sur false dans la chaîne de requête, vous pouvez remplacer ce comportement et utiliser tls=false à la place.

Les chaînes de connexion de la liste de départ DNS ressemblent souvent à l'exemple suivant :

mongodb+srv://server.example.com/

La configuration DNS peut ressembler à ceci :

Record                            TTL   Class    Priority Weight Port  Target

_mongodb._tcp.server.example.com. 86400 IN SRV   0        5      27317 mongodb1.example.com.

_mongodb._tcp.server.example.com. 86400 IN SRV   0        5      27017 mongodb2.example.com.

La connexion avec les membres de la liste de départ permet aux clients d'accéder à un répertoire d'autres membres du jeu de réplicas pour établir une connexion. L'hôte peut produire une liste de serveurs différente de la liste de départ puisque les clients utilisent couramment des alias DNS dans leurs listes de départ. Les membres de l'ensemble de répliques ne sont accessibles que via leurs noms d'hôte ; par conséquent, si cela se produit, les utilisateurs utiliseront les noms d'hôte fournis par la réplication plutôt que ceux indiqués dans la liste de départ.

Remarque : Les enregistrements SRV fournis par le nom d'hôte spécifié doivent avoir le même domaine parent (example.com) que le nom d'hôte lui-même. Vous ne serez pas autorisé à vous connecter si les domaines parents et les noms d'hôte ne correspondent pas.

De plus, les chaînes de connexion de la liste de départ DNS vous permettent de fournir des paramètres dans le cadre d'une URL de la même manière que les chaînes ordinaires. Vous pouvez également utiliser un enregistrement TXT pour indiquer les paramètres suivants lors de l'utilisation d'une chaîne de connexion de liste de départ DNS :

authSource
replicaSet

Un seul enregistrement TXT peut être spécifié pour chaque instance mongod. Le client renverra une erreur si le DNS a plusieurs entrées TXT ou si l'entrée TXT contient un attribut autre que replicaSet ou authSource.

L'enregistrement TXT pour server.example.com ressemblerait à ceci :

Record              TTL   Class    Text

server.example.com. 86400 IN TXT   "replicaSet=mySet&authSource=authDB"

Cette chaîne de connexion est générée à partir des entrées DNS SRV ainsi que des paramètres d'enregistrement TXT comme suit :

mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?replicaSet=mySet&authSource=authDB

Les choix d'un enregistrement TXT peuvent être remplacés en fournissant le paramètre de chaîne de requête de l'URL. La chaîne de requête dans le scénario suivant remplace l'option authSource définie dans l'enregistrement TXT de l'entrée DNS.

mongodb+srv://server.example.com/?connectTimeoutMS=300000&authSource=aDifferentAuthDB

En utilisant le remplacement authSource, la chaîne de connexion typique ressemblerait à ceci :

mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?connectTimeoutMS=300000&replicaSet=mySet&authSource=aDifferentAuthDB

Remarque : Si le nom d'hôte spécifié dans la chaîne de connexion n'est associé à aucun enregistrement DNS, le paramètre mongodb+srv échouera. Enfin, lors de l'utilisation de la modification de la chaîne de connexion +srv, l'option permettant d'utiliser TLS (ou la sécurité SSL équivalente) est définie sur true pour la connexion. En spécifiant explicitement l'option tls sur false dans la chaîne de requête, vous pouvez remplacer ce comportement et utiliser tls=false à la place.

Obtenez votre chaîne de connexion MongoDB

Vous aurez besoin d'une chaîne URI pour vous connecter à MongoDB. Si vous créez un lien vers un déploiement MongoDB à l'aide du shell mongo, de Compass ou des pilotes MongoDB, l'URI (Uniform Resource Identifier) ​​vous sera demandé.

Il est supposé que vous avez déjà configuré l'authentification dans MongoDB et généré un nom d'utilisateur et un mot de passe pour les droits de lecture et d'écriture sur une base de données MongoDB lors de l'utilisation de la chaîne URI fournie.

Dans ce cas, vous pouvez utiliser l'identifiant et le mot de passe que vous avez créés pour le rôle readWriteAnyDatabase ainsi que le nom de la base de données d'administration dans votre chaîne de connexion pour vous connecter à MongoDB.

Options pour la chaîne de connexion

Cette section explique les différentes manières de vous connecter à Internet.

  1. Sous la forme d'une paire nom=valeur, des options de connexion sont disponibles.
  2. Lorsque vous utilisez un pilote, le nom de l'option n'est pas sensible à la casse.
  3. Le nom de l'option est insensible à la casse lors de l'utilisation de mongosh ou du shell mongo traditionnel (version 4.2 ou ultérieure).
  4. Le nom de l'option est sensible à la casse lors de l'utilisation d'un ancien shell mongo version 4.0 ou antérieure.
  5. La casse n'est jamais un problème lors de l'affichage de la valeur.

L'esperluette (&) peut séparer les choix, tels que nom1=valeur1&nom2=valeur2. Les paramètres ReplicaSet et connectTimeoutMS sont inclus dans la connexion suivante :

mongodb://db1.example.net:27017,db2.example.net:2500/?replicaSet=test&connectTimeoutMS=300000

Remarque : Les pilotes acceptent désormais les points-virgules (;) comme séparateurs d'options pour préserver la compatibilité avec les anciens logiciels.

Exemples de chaînes de connexion

Vous trouverez des exemples d'URI pour les points de connexion populaires dans les exemples ci-dessous.

Exécuter le serveur de base de données localement

Le port par défaut d'un serveur de base de données local peut être utilisé pour établir une connexion avec la commande suivante :

mongodb://localhost
Base de données administrative

Pour vous connecter à la base de données d'administration en tant que foss avec le mot de passe fosslinux, les commandes suivantes doivent être suivies :

mongodb://foss:fosslinux@localhost
Une base de données d'enregistrements

Connexion et connexion à la base de données des enregistrements en utilisant le mot de passe fosslinux en tant qu'administrateur système.

mongodb://foss:fosslinux@localhost/records
Sockets de domaine sous UNIX

Lors de la connexion à un socket de domaine UNIX, utilisez une chaîne de connexion chiffrée par URL.

MongoDB est lié à un point de terminaison de domaine UNIX avec le chemin suivant :

mongodb://%2Ftmp%2Fmongodb-27017.sock

Remarque : tous les pilotes ne prennent pas en charge les sockets de domaine UNIX. Pour en savoir plus sur votre pilote, accédez à la section Documentation du pilote.

Ensemble de répliques avec des utilisateurs sur des machines distinctes

Vous trouverez ci-dessous une connexion à un jeu de réplicas à deux membres sur db1.example.net et db2.example.net :

mongodb://db1.example.net,db2.example.com/?replicaSet=test

Remarque : La ou les instances mongod fournies dans la configuration du jeu de répliques doivent être spécifiées pour un jeu de répliques.

Ensemble de répliques avec des utilisateurs sur l'hôte local

Les ports 27017, 27018 et 27019 sont utilisés pour établir une connexion à un jeu de répliques fonctionnant sur localhost :

mongodb://localhost,localhost:27018,localhost:27019/?replicaSet=test
Lire l'ensemble de répliques de distribution

La connexion à un jeu de répliques à trois membres et la distribution des lectures aux membres secondaires impliquent la méthode indiquée ci-dessous :

mongodb://example1.com,example2.com,example3.com/?replicaSet=test&readPreference=secondary
Ensemble de répliques de problèmes d'écriture de haut niveau

La connexion à un jeu de répliques contenant un problème d'écriture et un délai d'attente de deux secondes en attendant la réplication sur une majorité de membres votants porteurs de données s'effectue à l'aide de cette configuration :

mongodb://example1.com,example2.com,example3.com/?replicaSet=test&w=majority&wtimeoutMS=2000
Cluster partagé

Il est possible de se connecter à un cluster partagé multi-instance en utilisant ce qui suit :

mongodb://router1.example.com:27017,router2.example2.com:27017,router3.example3.com:27017/
Cluster Atlas MongoDB

Ce qui suit établit une connexion à un cluster MongoDB Atlas à l'aide des informations d'identification AWS IAM pour l'authentification :

mongosh 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'

Cet exemple montre comment utiliser la méthode d'authentification MONGODB-AWS et la $external authSource pour se connecter à Atlas via les informations d'identification AWS IAM.

La valeur AWS SESSION TOKEN authMechanismProperties doit être fournie si vous utilisez un jeton de session AWS, comme suit :

mongosh 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<aws session token>'

Remarque : Tant que l'ID de clé d'accès AWS ou la clé d'accès secrète contient l'un des caractères suivants :(: / ? # [ ] @ ), vous devez utiliser l'encodage en pourcentage pour les encoder.

Vous pouvez également utiliser des variables d'environnement AWS IAM standard pour spécifier ces informations d'identification sur votre plateforme. Lors de l'utilisation de l'authentification MONGODB-AWS, mongosh vérifie et vérifie si les variables d'environnement suivantes sont présentes :

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN

Une chaîne de connexion n'a pas besoin d'inclure ces informations d'identification si elle est configurée.

Dans le shell bash, les variables suivantes sont définies dans l'exemple suivant :

export AWS_ACCESS_KEY_ID='<aws access key id>'

export AWS_SECRET_ACCESS_KEY='<aws secret access key>'

export AWS_SESSION_TOKEN='<aws session token>'

La syntaxe d'établissement des variables d'environnement sera différente dans d'autres shells, soyez donc conscient de cela. Pour plus d'informations, rendez-vous dans la documentation de votre plateforme.

La commande suivante confirmera si certaines variables d'environnement ont été définies ou non :

env | grep AWS

Le code suivant montre comment établir une connexion à un cluster MongoDB Atlas à l'aide des variables répertoriées ci-dessous :

mongosh 'mongodb+srv://cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'

C'est tout ce que vous devez savoir sur les chaînes de connexion dans MongoDB. Nous espérons que vous avez trouvé le guide de l'article utile. Si oui, veuillez laisser une remarque dans la section des commentaires. Merci d'avoir lu.