Document-page-setup.png Attenzione: questo articolo è ancora incompleto e in fase di scrittura da parte del suo autore.

Sentitevi liberi di contribuire, proponendo modifiche alla guida tramite l'apposita pagina di discussione, in modo da non interferire con il lavoro portato avanti sulla voce. Per altre informazioni si rimanda al template.


Cos'è MongoDB ?

MongoDB è un database opensource che fa parte di una tipologia particolare: è un database NoSQL.
E' da tempo che si parla di questi prodotti che cercano di gestire i dati rompendo con la tradizione dei database relazionali e il linguaggio dichiarativo SQL.
MongoDB è un database orientato ai documenti e sfrutta molto il formato JSON per il trattamento delle informazioni.

Installare MongoDB

Se lo si vuole installare sulla propria macchina Debian è sufficiente utilizzare un unico comando aptitude, infatti:

# aptitude installa mongodb

procederà all'installazione del server e del client.
Nella tipica nomenclatura del mondo GNU/Linux:

  • il server prenderà il nome di mongod;
  • il client sarà mongo.

Start, Stop e Restart

L'avvio del servizio e le corrispondenti azioni di stop e riavvio sono disponibili tramite le rispettive seguenti operazioni:

# /etc/init.d/mongo start
# /etc/init.d/mongo stop
# /etc/init.d/mongo restart

Utilizzando il comando ps sarà possibile osservare l'effettivo successo dell'operazione impartita.

Configurazione

MongoDB è configurabile tramite il file /etc/mongodb.conf. Come capita spesso, il file predisposto ha valore di default ed è fornito di commenti esplicativi.
Comunque una configurazione normale di MongoDB ha bisogno solo di poche righe di configurazione pertanto conviene salvare il file originario di configurazione con un nuovo nome:

# mv /etc/mongodb.conf /etc/mongodb.conf.orig

e creare un nuovo file di configurazione di nome /etc/mongodb.conf, con un contenuto simile a questo:

bind_ip = 127.0.0.1
port = 27017
quiet = true
dbpath = /srv/mongodb
logpath = /var/log/mongodb/mongod.log
logappend = true

I pochi parametri impostati sono:

  • bind_ip: definire l'indirizzo su cui il server è in ascolto;
  • port: la porta TCP su cui il server sarà contattato;
  • dbpath: la directory che conterrà i database;
  • logpath: file di log.

Sicurezza

La sicurezza di MongoDB può essere curata sotto tre aspetti.

Firewall

Essendo un servizio di rete, contattabile tramite l'infrastruttura TCP/IP, il primo modo per proteggere la nostra installazione di MongoDB è la configurazione di regole firewall tramite iptables che permettano il traffico sulle porte solo per gli indirizzi che si desidera.
Lo stesso parametro bind_ip della configurazione di cui si è parlato rappresenta un primo elemento di sicurizzazione in quanto permette di agganciare il server ad un indirizzo specifico.

Autenticazione: il Secure Mode

Di default, MongoDB non lavora in secure mode ossia non fa uso dell'autenticazione. Ciò comunque in un ambiente di produzione ciò non può bastare ed abilitare l'autenticazione per gli utenti è doveroso.
Farlo comunque non è oneroso. Sarà sufficiente aggiungere nel file di configurazione /etc/mongodb.conf la seguente riga:

auth=true

A questo punto si dovrà abilitare degli utenti. Ciò che si deve specificare per ogni accesso è:

  • nome utente e password;
  • a quale database è consentito l'accesso;
  • se l'accesso è in sola lettura o in lettura/scrittura (default).

Quindi si dovrà fare un log come amministratore e collocarsi sul database che per il quale si vuole configurare l'accesso, ad esempio 'persone':

use persone

dopodichè si creerà l'utente con tanto di username e password, ad esempio username="manager" e password="12345":

db.addUser("manager","12345")

L'accesso è stato così creato ed è in modalità lettura/scrittura. Per averlo read-only si sarebbe dovuto dare il comando:

db.addUser("manager","12345",true)

Per effettuare l'accesso tramite le credenziali utente ci si dovrà connettere tramite client:

# mongo 192.168.1.10/persone

Il comando specificato richiederà la connessione al server MongoDB con indirizzo 192.168.1.10 ed in particolare al database persone.
A questo punto si potrà richiedere l'utilizzo del database "loggandosi" con il comando db.auth:

> db.auth("manager","12345")

In output si vedrà apparire un solo numero:

  • 1 = incaso di login effettuato con successo;
  • 0 = in caso di errore.

Se non si effettuasse il login, ad ogni tentativo di lettura dei dati del database si riceverà un messaggio di errore di tipo:

Error: uncaught exception: error: { "$err" : "unauthorized for db [persone] lock type: -1 " }