Installer, configurer et utiliser MongoDB sur Debian

On va voir aujourd’hui comme faire ses premiers pas avec MongoDB, une base de données orientée documents sur Linux, précisément sur Debian.

1. Installer MongoDB

Installer MongoDB peut se faire de deux façons:

  • Depuis le dépôt de votre système via apt-get
  • En téléchargeant l’archive manuellement

Depuis Debian 9, MongoDB n’est plus disponible depuis le dépôt standard de Debian, et il vous faudra ajouter celui de MongoDB ainsi que la clé publique de ce dépôt.

Si vous téléchargez l’archive, vous verrez qu’elle ne contient que deux binaires principaux:

  • mongod: le démon de MongoDB
  • mongo: le Shell qui permet de se connecter à la base de données

et un troisième mongosdont on ne parlera pas ici: il n’est utile que pour les installations en cluster.

L’intérêt d’utiliser l’archive étant de pouvoir installer MongoDB où vous voulez et ce sans avoir besoin des droits d’administration.

2. Démarrer MongoDB

Par la passé, l’installation de MongoDB démarrait son service.

Ce n’est plus le cas maintenant et il faut désormais démarrer le service avec:

$ systemctl start mongod.service

MongoDB se met alors à l’écoute sur le port 27017.

On peut le vérifier avec:

$ sudo netstat -n -a -tcp | grep 27017

3. Se connecter à MongoDB

Si vous avez installé Robo3T, vous pouvez alors vous connecter à votre base de données et ce sans fournir de nom d’utilisateur ni de mot de passe. Comment est-ce possible ?

En fait, MongoDB est configuré à l’installation sans activer l’authentification, et ce afin que vous puissiez créer les utilisateurs et configurer les droits d’accès.

Cette absence d’authentification se manifeste dans le fichier de configuration /etc/mongod.conf par la section suivante:

security:
    authorization: "disabled"

section que vous ne verrez pas après installation dans votre fichier puisque c’est la configuration par défaut !

Par contre, remplacez "disabled" par "enabled" et vous verrez que vous ne parviendrez plus à vous connecter:

Cannot connect to the MongoDB at localhost:27017.
Error:
Failed to execute "listdatabases" command.

4. Créer un administrateur

On va maintenant créer un utilisateur MongoDB ayant les droits de créer et d’administrer nos bases de données.

Pour cela, on va se connecter à la base admin et créer un utilisateur nommé admin ayant le role userAdminAnyDatabase:

$ mongo
MongoDB shell version v4.4.1
...
MongoDB server version: 4.4.1
Welcome to the MongoDB shell.
...
> use admin
switched to db admin
> db.createUser(
...   {
...     user: "admin",
...     pwd: "******",
...     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
...   }
... )
Successfully added user: {
	"user" : "admin",
	"roles" : [
		{
			"role" : "userAdminAnyDatabase",
			"db" : "admin"
		}
	]
}
> 
bye

Une fois la base redémarrée avec l’authentification activée, on pourra s’y connecter avec ce nouvel utilisateur.

5. Créer une nouvelle base de données

Notre utilisateur admin va nous permettre de créer un utilisateur pour se connecter à une nouvelle base de données.

Mais comment créer une base de données avec MongoDB ?

Contrairement à Oracle où la procédure est complexe, si on fait l’opération manuellement, MongoDB crée la base de données la première fois que l’on demande à l’utiliser.

Après connexion sur notre base admin avec l’utilisateur admin:

$ mongo admin -u admin -p *****
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c6d1950c-5aa7-4b44-85b2-cb04e737726d") }
MongoDB server version: 4.4.1
> use test
switched to db test

Il suffit de dire que l’on va utiliser la base test avec la commande use test pour que celle-ci soit créée !

6. Créer un utilisateur

Il ne nous reste plus qu’à créer un utilisateur avec les droits readWrite:

$ mongo admin -u admin -p *****
MongoDB shell version v4.4.1
...
use test
db.createUser(
  {
    user: "test",
    pwd: "*****",
    roles: [ { role: "readWrite", db: "test" } ]
  }
)

Nous pouvons maintenant accéder à notre base de données:

$ mongo test -u test -p ****