MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Connessione ai database MongoDB


Introduzione

Una volta che hai un server MongoDB disponibile, una delle prime e più comuni azioni che dovrai intraprendere è quella di connetterti al database vero e proprio. Ciò richiede un coordinamento per assicurarsi che il database sia configurato in modo da consentire al client di connettersi e autenticarsi.

Ciò significa che dovrai capire come connetterti al tuo database MongoDB fornendo la posizione del server, i parametri di connessione e le credenziali corrette. In questa guida, ci concentreremo su come connettersi al database dal lato client utilizzando mongo Client shell MongoDB, progettato principalmente per sessioni interattive con i tuoi database.

In una guida complementare, puoi scoprire come configurare le impostazioni di autenticazione di MongoDB per soddisfare i tuoi requisiti. Prendi in considerazione la lettura di entrambi i pezzi per un quadro completo di come viene implementata l'autenticazione dal punto di vista di entrambe le parti.



Informazioni di base sul mongo cliente

Il mongo client è un client JavaScript della riga di comando per la connessione, il controllo e l'interazione con i server di database MongoDB. In molti modi, è il modo più semplice per connettersi e iniziare a utilizzare il database MongoDB perché è incluso nell'installazione di MongoDB e disponibile su tutte le piattaforme più diffuse. Il mongo client è particolarmente utile per eseguire la configurazione iniziale e per sessioni interattive in cui desideri esplorare i tuoi dati o scorrere le query in base ai risultati preliminari.

Il modo in cui ti connetti con mongo shell dipende dalla configurazione del server MongoDB e dalle opzioni disponibili per l'autenticazione a un account. Nelle sezioni seguenti, esamineremo alcune delle opzioni di connessione di base. Per motivi di chiarezza, faremo una distinzione tra connessioni locali e remote:

  • connessione locale :una connessione in cui il client e l'istanza MongoDB si trovano sullo stesso server
  • connessione remota :dove il client si connette a un'istanza MongoDB accessibile in rete in esecuzione su un computer diverso

Iniziamo con la connessione a un database dallo stesso computer.



Connessione a un database locale con mongo

Senza alcun argomento, il mongo il comando tenta di connettersi a un'istanza MongoDB locale.

Per fare ciò, tenta di connettersi alla porta 27017 sull'indirizzo di loopback locale:127.0.0.1:27017 . Questa è una delle interfacce a cui i server MongoDB si legano nella loro configurazione predefinita (MongoDB può anche essere accessibile tramite un file socket locale).

Puoi connetterti a un server MongoDB locale in esecuzione con la sua configurazione predefinita digitando:

mongo

In una connessione riuscita, vedrai probabilmente un insieme abbastanza lungo di messaggi seguito da un prompt della shell MongoDB:

 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() --- >

L'output mostra i log generati da mongo comando durante la creazione della connessione, seguito da alcuni avvisi generati dal server MongoDB all'avvio. Infine, c'è un avviso su un servizio di monitoraggio MongoDB che puoi scegliere di sfruttare o disabilitare.

Uno degli avvisi dal server MongoDB indica che il controllo dell'accesso non è attualmente abilitato. Questo è il motivo per cui siamo riusciti a connetterci senza fornire credenziali o altri dettagli di autenticazione.

Se ti stai connettendo a un server MongoDB locale che ha stato configurato con controllo accessi, sarà necessario fornire informazioni aggiuntive per connettersi. Dovrai fornire almeno un nome utente e una password per connetterti utilizzando il --username associato e --password opzioni:

mongo --username <mongo_username> --password

Inserimento del --password l'opzione alla fine e non fornire la password inline indica che si desidera che MongoDB richieda invece una password. Questo è più sicuro che fornire una password nel comando stesso in quanto potrebbe essere visibile o recuperabile attraverso la cronologia della shell, gli elenchi di processi e altri meccanismi.

Il server MongoDB ti chiederà la password dell'utente prima di collegarti al database:

MongoDB shell version v.4.4.6Enter password:

Dopo l'autenticazione, dovresti essere connesso al database e in grado di continuare la tua sessione normalmente.

Puoi anche fornire queste informazioni passando una stringa di connessione invece di usare il --username e --password opzioni:

mongo "mongodb://<mongo_username>:@127.0.0.1"

Poiché abbiamo indicato che l'utente ha una password con il <username>: sintassi, ma non ne ho fornita una, il mongo shell chiederà la password.

In alternativa, puoi anche autenticarti dopo esserti connesso con il normale mongo comando utilizzando il db.auth comando.

Innanzitutto, connettiti al database MongoDB senza fornire le credenziali:

mongo

Ti verrà dato un prompt dei comandi come al solito, ma se il controllo di accesso è abilitato, non avrai l'autorizzazione per eseguire molte azioni finché non ti autentichi. Ad esempio, show dbs il comando sarà probabilmente vuoto poiché non hai accesso per interrogare i database disponibili:

show dbs

Per autenticarti, seleziona innanzitutto il database in cui è definito il tuo utente. Molto spesso, sarà l'admin banca dati:

use admin

Successivamente, usa db.auth() per fornire il tuo nome utente e richiedere una password richiesta:

db.auth({user: "<mongo_username>", passwordPrompt()})

Ti verrà richiesta la password dell'account utente come prima:

Enter password:

Se hai successo, il server emetterà 1 :

Enter password:1

Ora avrai l'accesso regolare dell'utente che hai autenticato come:

show dbs
admin   0.000GBconfig  0.000GBlocal   0.000GB

Puoi visualizzare l'elenco degli utenti autenticati e dei ruoli associati alla connessione corrente in qualsiasi momento digitando:

db.runCommand("connectionStatus")
{        "authInfo" : {                "authenticatedUsers" : [                        {                                "user" : "root",                                "db" : "admin"                        }                ],                "authenticatedUserRoles" : [                        {                                "role" : "userAdminAnyDatabase",                                "db" : "admin"                        },                        {                                "role" : "readWriteAnyDatabase",                                "db" : "admin"                        }                ]        },        "ok" : 1}


Connessione a un database remoto

Se vuoi connetterti a un database MongoDB remoto, dovrai fornire alcuni dettagli aggiuntivi quando usi mongo guscio.

In particolare, dovrai includere --host opzione e potenzialmente il --port opzione anche se il server MongoDB è in ascolto su una porta non predefinita. In quasi tutti i casi, dovrai anche fornire il --user e --password opzioni per autenticarsi anche sul server remoto.

La struttura di base del comando durante la connessione a un database MongoDB remoto è quindi simile a questa:

mongo --host <mongo_server_address> --port <mongo_server_port> --user <mongo_username> --password

Come accennato nella sezione sulla connessione a un database locale, inserendo il --password opzione alla fine e non fornire la password inline indica che vuoi il mongo shell per richiedere invece una password. Questo è più sicuro che fornire una password nel comando stesso in quanto potrebbe essere visibile o recuperabile attraverso la cronologia della shell, gli elenchi di processi e altri meccanismi.

Il server MongoDB ti chiederà la password dell'utente prima di collegarti al database:

MongoDB shell version v.4.4.6Enter password:

Dopo l'autenticazione, dovresti essere connesso al database e in grado di continuare la tua sessione normalmente.

Puoi anche fornire queste informazioni passando una stringa di connessione invece di usare il --host , --port , --username e --password opzioni:

mongo "mongodb://<mongo_username>:@<mongo_server_address>:<mongo_server_port>"

Poiché abbiamo indicato che l'utente ha una password con il <username>: sintassi, ma non ne ho fornita una, il mongo shell chiederà la password.



Regolazione della configurazione di autenticazione di un server MongoDB

Se desideri modificare le regole che determinano il modo in cui gli utenti possono autenticarsi sulle tue istanze MongoDB, puoi farlo modificando la configurazione del tuo server. Puoi scoprire come modificare la configurazione di autenticazione di MongoDB in questo articolo.



Conclusione

In questa guida, abbiamo trattato l'autenticazione MongoDB dal lato client. Abbiamo dimostrato come utilizzare mongo shell per connettersi a istanze di database locali e remote utilizzando una varietà di metodi.

Sapere come connettersi a varie istanze MongoDB è fondamentale quando inizi a lavorare sul sistema di database. Puoi eseguire un'istanza MongoDB locale per lo sviluppo che non richiede alcuna autenticazione speciale, ma i tuoi database in staging e produzione richiederanno quasi sicuramente l'autenticazione. Essere in grado di autenticarti in entrambi i casi ti consentirà di lavorare bene in ambienti diversi.