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 MongoDBmongo
: le Shell qui permet de se connecter à la base de données
et un troisième mongos
dont 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 ****