La base de données sera donc une base Mysql. Elle présente l'avantage d'être rapide et facile d'utilisation.
La base de données sera hébergée sur un serveur linux debian, toutes les commandes suivantes seront pour debian, il faudra adapté si vous utilisez un autre système d'exploitation.
Le plus important dans une base de données c'est son architecture. Il faut toujours bien réfléchir à l'utilisation que l'on souhaite en faire et essayer de l'organiser de la manière la plus logique possible.
Dans notre cas notre base de données sera constituée de trois tables différentes, l'une stockant les différents utilisateurs, l'une stockant la liste des projets réalisés au sein du lab et enfin une qui recense l'ensemble l'historique des accès au lab.
Il est également nécessaire de définir le type de données pour chacun des éléments des tables, il faut que le type soit le plus léger possible afin que la base de données reste rapide, mais que cela permette de stocker l'ensemble des données possibles. Ainsi le prénom de l'utilisateur sera stocké sur 15 caractères ce qui est en général suffisant. Au final la base de données ressemblera à ceci:
À présent que l'architecture de la base de données est faite, il ne reste plus qu'à la créer, nous supposerons ici que Mysql est déjà installé sur votre serveur et que vous connaissez le mot de passe root.
Tout d'abord il faut lancer mysql grâce à la commande suivante
mysql -u root -p
Puis on va créer notre base de données grâce à la commande suivante :
CREATE DATABASE RFID;
À présent qu'elle est crée il faut la sélectionner. Pour se faire, on utilise la commande suivante :
USE RFID;
Il ne nous reste plus qu'à créer les différentes tables que nous avons présentées plutôt.
La table stockant l'historique d'accès
CREATE TABLE `ACCESS_HISTORY` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT, `rfid_id` BIGINT(20) UNSIGNED NOT NULL, `access_time` datetime DEFAULT NULL, `location` VARCHAR(30) DEFAULT NULL, `id_project` BIGINT(20) DEFAULT NULL, PRIMARY KEY (`id`) );
La base stockant la liste des projets
CREATE TABLE `PROJECT` ( `id_project` BIGINT(20) NOT NULL AUTO_INCREMENT, `project_name` VARCHAR(30) DEFAULT '', `project_description` text, PRIMARY KEY (`id_project`) );
La base stockant la liste des utilisateurs
CREATE TABLE `USERS` ( `rfid_id` BIGINT(20) UNSIGNED NOT NULL, `student_id` INT(10) UNSIGNED DEFAULT NULL, `phone_number` INT(10) UNSIGNED DEFAULT NULL, `last_name` VARCHAR(15) DEFAULT 'Unset', `first_name` VARCHAR(15) DEFAULT 'Unset', `email` VARCHAR(40) DEFAULT 'Unset', `sex` CHAR(1) DEFAULT 'N', `register_date` datetime DEFAULT NULL, `member_type` INT(11) DEFAULT NULL, `authorization` BIGINT(20) DEFAULT NULL, `current_project_id` BIGINT(20) DEFAULT NULL, PRIMARY KEY (`rfid_id`) );
Maintenant que la base de données est créée, il faut en autoriser l'accès à distance. En effet les bases Mysql ne permettent qu'une utilisation locale par defaut. Par mesure de sécurité nous allons également créer un utilisateur mysql dédié à notre base RFID.
On commence donc par créer notre utilisateur grâce à la commande suivante
CREATE USER 'RFID'@'%' IDENTIFIED BY 'somepassword';
Ou RFID représente le nom d'utilisateur et somepassword le mot de passe qui lui est associé.
Puis on donne à cet utilisateur uniquement les privilèges dont il a besoin sur notre base de données nouvellement créée. Ainsi en cas de brèche on limite les dégâts.
GRANT SELECT, INSERT, DELETE, UPDATE ON RFID TO 'RFID'@'%';
Il ne nous reste plus qu'à autoriser les connexions extérieures. Pour ce faire, il faut modifier le ficher de configuration de mysql. On utilisera un éditeur de texte pour se faire.
nano /etc/mysql/my.cnf
et modifier la ligne suivante:
bind-address = 127.0.0.1
par
bind-address = 37.187.4.166
Ou 37.187.4.166 représente l'adresse IP du serveur sur lequel mysql est installé. Puis redémarrer le service mysql
/etc/init.d/mysql restart
Voici quelques commandes permettant d'interagir avec notre base de donnée:
INSERT INTO USERS (rfid_id,student_id,phone_number,last_name,first_name,email,sex,register_date,member_type,authorization,current_project_id) VALUES (123456, 3200222, 0612345678,'John','Doe','john.doe@gmail.com','H',NOW(),1, 0,10);
SELECT * FROM USERS WHERE rfid_id=123456;
Ou 123456 est l'identifiant RFID recherché
SELECT * FROM ACCESS_HISTORY;
SELECT USERS.last_name,USERS.first_name,ACCESS_HISTORY.location, ACCESS_HISTORY.access_time,PROJECT.project_name FROM ACCESS_HISTORY LEFT OUTER JOIN USERS ON ACCESS_HISTORY.rfid_id = USERS.rfid_id LEFT OUTER JOIN PROJECT ON ACCESS_HISTORY.id_project=PROJECT.id_project;