Inleiding
Zodra u een MongoDB-server beschikbaar heeft, is een van de eerste en meest voorkomende acties die u moet ondernemen, verbinding maken met de eigenlijke database. Dit vereist coördinatie om ervoor te zorgen dat de database zo is geconfigureerd dat uw klant verbinding kan maken en zich kan verifiëren.
Dit betekent dat u moet begrijpen hoe u verbinding kunt maken met uw MongoDB-database door de serverlocatie, verbindingsparameters en de juiste referenties op te geven. In deze handleiding zullen we ons concentreren op het verbinden met de database vanaf de clientzijde met behulp van de mongo
MongoDB shell-client, voornamelijk ontworpen voor interactieve sessies met uw databases.
In een begeleidende gids kunt u ontdekken hoe u de authenticatie-instellingen van MongoDB kunt configureren om aan uw vereisten te voldoen. Overweeg om beide stukken te lezen voor een compleet beeld van hoe authenticatie wordt geïmplementeerd vanuit het perspectief van beide partijen.
Basisinformatie over de mongo
klant
De mongo
client is een opdrachtregel JavaScript-client voor het verbinden met, besturen van en communiceren met MongoDB-databaseservers. In veel opzichten is het de eenvoudigste manier om verbinding te maken met uw MongoDB-database en deze te gaan gebruiken, omdat deze is opgenomen in de MongoDB-installatie en beschikbaar is op alle populaire platforms. De mongo
client is vooral handig voor het uitvoeren van initiële configuratie en voor interactieve sessies waarin u uw gegevens wilt verkennen of query's wilt herhalen op basis van voorlopige resultaten.
De manier waarop je verbinding maakt met de mongo
shell hangt af van de configuratie van de MongoDB-server en de beschikbare opties voor authenticatie met een account. In de volgende secties zullen we enkele van de basisverbindingsopties bespreken. Voor de duidelijkheid maken we onderscheid tussen lokale en externe verbindingen:
- lokale verbinding :een verbinding waarbij de client en de MongoDB-instantie zich op dezelfde server bevinden
- verbinding op afstand :waar de client verbinding maakt met een voor het netwerk toegankelijke MongoDB-instantie die op een andere computer wordt uitgevoerd
Laten we beginnen met het verbinden met een database vanaf dezelfde computer.
Verbinding maken met een lokale database met mongo
Zonder enige argumenten, de mongo
opdracht probeert verbinding te maken met een lokale MongoDB-instantie.
Om dit te doen, probeert het verbinding te maken met poort 27017 op het lokale loopback-adres:127.0.0.1:27017
. Dit is een van de interfaces waaraan MongoDB-servers binden in hun standaardconfiguratie (MongoDB kan ook toegankelijk zijn via een lokaal socketbestand).
U kunt verbinding maken met een lokale MongoDB-server die draait met de standaardconfiguratie door te typen:
mongo
Bij een succesvolle verbinding ziet u waarschijnlijk een vrij lange reeks berichten gevolgd door een MongoDB-shell-prompt:
MongoDB shell version v4.4.6 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("9cf2d126-d25f-4ed8-b159-ef3bba4fcc53") } MongoDB server version: 4.4.6 --- The server generated these startup warnings when booting: 2021-06-04T12:26:53.374+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem 2021-06-04T12:26:54.562+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted --- --- Enable MongoDB's free cloud-based monitoring service, which will then receive and display metrics about your deployment (disk utilization, CPU, operation statistics, etc). The monitoring data will be available on a MongoDB website with a unique URL accessible to you and anyone you share the URL with. MongoDB may use this information to make product improvements and to suggest MongoDB products and deployment options to you. To enable free monitoring, run the following command: db.enableFreeMonitoring() To permanently disable this reminder, run the following command: db.disableFreeMonitoring() --- >
De uitvoer toont logs die zijn gegenereerd door de mongo
commando tijdens het tot stand brengen van de verbinding, gevolgd door enkele waarschuwingen die bij het opstarten door de MongoDB-server worden gegenereerd. Ten slotte is er een melding over een MongoDB-bewakingsservice waarvan u kunt kiezen om hiervan te profiteren of deze uit te schakelen.
Een van de waarschuwingen van de MongoDB-server geeft aan dat toegangscontrole momenteel niet is ingeschakeld. Dit is de reden waarom we verbinding konden maken zonder inloggegevens of andere authenticatiegegevens te verstrekken.
Als u verbinding maakt met een lokale MongoDB-server die heeft is geconfigureerd met toegangscontrole, moet u aanvullende informatie opgeven om verbinding te maken. U moet ten minste een gebruikersnaam en wachtwoord opgeven om verbinding te maken met de bijbehorende --username
en --password
opties:
mongo --username <mongo_username> --password
Het --password
plaatsen optie aan het einde en het niet inline opgeven van het wachtwoord geeft aan dat u wilt dat MongoDB in plaats daarvan om een wachtwoord vraagt. Dit is veiliger dan het opgeven van een wachtwoord in de opdracht zelf, omdat dit zichtbaar of herstelbaar kan zijn via de shell-geschiedenis, proceslijsten en andere mechanismen.
De MongoDB-server zal u om het wachtwoord van de gebruiker vragen voordat verbinding wordt gemaakt met de database:
MongoDB shell version v.4.4.6Enter password:
Na succesvolle authenticatie, zou u verbonden moeten zijn met de database en in staat zijn om uw sessie normaal voort te zetten.
U kunt deze informatie ook verstrekken door een verbindingsreeks door te geven in plaats van de --username
en --password
opties:
mongo "mongodb://<mongo_username>:@127.0.0.1"
Aangezien we hebben aangegeven dat de gebruiker een wachtwoord heeft met de <username>:
syntaxis, maar heb er geen gegeven, de mongo
shell zal om het wachtwoord vragen.
Als alternatief kunt u zich ook authenticeren nadat u verbinding heeft gemaakt met de normale mongo
commando met behulp van de db.auth
commando.
Maak eerst verbinding met de MongoDB-database zonder inloggegevens op te geven:
mongo
U krijgt zoals gewoonlijk een opdrachtprompt, maar als toegangscontrole is ingeschakeld, heeft u geen toestemming om veel acties uit te voeren totdat u zich authenticeert. Bijvoorbeeld, de show dbs
commando zal waarschijnlijk leeg zijn omdat je geen toegang hebt om de beschikbare databases te doorzoeken:
show dbs
Om te verifiëren, selecteert u eerst de database waarin uw gebruiker is gedefinieerd. Meestal is dat de admin
databank:
use admin
Gebruik daarna db.auth()
om uw gebruikersnaam op te geven en een wachtwoordverzoek aan te vragen:
db.auth({user: "<mongo_username>", passwordPrompt()})
U wordt net als voorheen om het wachtwoord van de gebruikersaccount gevraagd:
Enter password:
Als je succesvol bent, zal de server 1
. uitvoeren :
Enter password:1
Je hebt nu de normale toegang van de gebruiker die je hebt geauthenticeerd als:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
U kunt de lijst met geverifieerde gebruikers en rollen die aan de huidige verbinding zijn gekoppeld op elk moment bekijken door te typen:
db.runCommand("connectionStatus")
{ "authInfo" : { "authenticatedUsers" : [ { "user" : "root", "db" : "admin" } ], "authenticatedUserRoles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "readWriteAnyDatabase", "db" : "admin" } ] }, "ok" : 1}
Verbinding maken met een externe database
Als u verbinding wilt maken met een externe MongoDB-database, moet u enkele aanvullende details opgeven bij het gebruik van de mongo
schelp.
In het bijzonder moet u de --host
optie en mogelijk de --port
optie ook als de MongoDB-server luistert op een niet-standaardpoort. In bijna alle gevallen moet u ook de --user
. opgeven en --password
opties om ook bij de externe server te authenticeren.
De basisstructuur van de opdracht bij het verbinden met een externe MongoDB-database ziet er daarom ongeveer zo uit:
mongo --host <mongo_server_address> --port <mongo_server_port> --user <mongo_username> --password
Zoals vermeld in de sectie over verbinding maken met een lokale database, plaatst u het --password
optie aan het einde en het niet invoeren van het wachtwoord inline geeft aan dat je de mongo
. wilt shell om in plaats daarvan om een wachtwoord te vragen. Dit is veiliger dan het opgeven van een wachtwoord in de opdracht zelf, omdat dit zichtbaar of herstelbaar kan zijn via de shell-geschiedenis, proceslijsten en andere mechanismen.
De MongoDB-server zal u om het wachtwoord van de gebruiker vragen voordat verbinding wordt gemaakt met de database:
MongoDB shell version v.4.4.6Enter password:
Na succesvolle authenticatie, zou u verbonden moeten zijn met de database en in staat zijn om uw sessie normaal voort te zetten.
U kunt deze informatie ook verstrekken door een verbindingsreeks door te geven in plaats van de --host
, --port
, --username
en --password
opties:
mongo "mongodb://<mongo_username>:@<mongo_server_address>:<mongo_server_port>"
Aangezien we hebben aangegeven dat de gebruiker een wachtwoord heeft met de <username>:
syntaxis, maar heb er geen gegeven, de mongo
shell zal om het wachtwoord vragen.
De authenticatieconfiguratie van een MongoDB-server aanpassen
Als u de regels wilt wijzigen die bepalen hoe gebruikers zich kunnen verifiëren bij uw MongoDB-instanties, kunt u dit doen door de configuratie van uw server aan te passen. In dit artikel leest u hoe u de authenticatieconfiguratie van MongoDB kunt wijzigen.
Conclusie
In deze handleiding hebben we MongoDB-authenticatie vanaf de clientzijde behandeld. We hebben laten zien hoe de mongo
. te gebruiken shell om op verschillende manieren verbinding te maken met zowel lokale als externe database-instanties.
Weten hoe u verbinding kunt maken met verschillende MongoDB-instanties is van vitaal belang als u met het databasesysteem begint te werken. U kunt voor ontwikkeling een lokale MongoDB-instance uitvoeren die geen speciale authenticatie nodig heeft, maar uw databases in fasering en productie zullen vrijwel zeker authenticatie vereisen. Als je in beide gevallen kunt authenticeren, kun je goed werken in verschillende omgevingen.