Bonjour,
Dans ce petit cours je vais vous expliquer comment installer et configurer un serveur Mysql sous Debian le tout en étant connecté à votre machine en SSH.
Il est important de rappeler que lorsque vous vous connecter à votre Machine en SSH, ne vous connecté pas en “ROOT”, mais en utilisateur ayant des droits limités.
Si vous êtes sous Windows , pour vous connecter en SSH vous pouvez utiliser “Putty”
Si vous êtes sous Linux , pour vous connecter en SSH vous pouvez utiliser le shell en tapant : “ssh xx.xx.xx.xxt -l login”
Une fois que vous serez en face du prompt de votre shell, on va pouvoir commencer, mais avant ça une petite introduction sur ce qu’est Mysql et ses caractéristiques…
Introduction :
Mysql est un SGBD , oula mais qu’est ce qu’un SGBD !
Un SGBD est un Gestionnaire de bases de données. Il permet un accès SQL à une base de données en Client/Serveur.
Ce logiciel est gratuit, il fonctionne sous Linux , mais aussi sous Windows et OS/2. Il existe deux types de licence pour Mysql , une version Commerçiale et une Version OpenSource. ( Voir licence GPL)
Ces Caractéristiques :
Le serveur Mysql à été conçu en multi-thread (Oula les cours !) , il est donc très rapide.
Sa principale utilisation et son utilisation dans les applications web, cette application est activé par un serveur Apachesur Linux vous vous en doutez.
On peut accéder à une base Mysql avec des applications en langage C, en Perl , en PHP, en Java ou encore Python…
Pour comparer aux autres bases de données, comme Oracle ou Informix, Mysql apporte les restrictions suivantes:
* Pas de transactions
* Pas de Triggers
* Pas de procédures stockés
* Pas de sous-sélections
* Pas d’aproches objet
En résumé dans le monde des bases de données libres sous UNIX, Mysql est une très bonne alternative.
Un petit peut d’Histoire sur Mysql :
En 1994, Michael Widenius, de la société suédoise TcX, adapte mSQL pour accéder aux fichiers ISAM de la base maison UNIREG, mSQLavait été créé par David Hughes à l’université Bond en Australie. Il s’était insipiré de la base Postgres (qui succédait à Ingres), mais avec une interface SQL. A l’époque Postgres ne connaissait pas SQL. En 1995, TcX met mysql 1.0 à disposition sur le web.
La Structure de Mysql :
Dans le répertoire “/var/lib/mysql/” il y à différents répertoires qui sont en réalité les bases de votre serveur Mysql
Prenons par exemple la base mysql que vous devez voir si vous faites un “cd /var/lib/mysql” puis un “ls”
Voici ce que j’obtient quand je vous fait ça :
| Code: | |
| ks364345:/# cd /var/lib/mysql ks364345:/var/lib/mysql# ls debian-5.0.flag ibdata1 ib_logfile0 ib_logfile1 mysql mysql_upgrade_info ks364345:/var/lib/mysql# |
Comme vous pouvez le voir, il y à le répertoire “mysql”, ce répertoire représente donc la base “mysql” qui renferme les tables d’administrations de mysql (utilisateurs, ordinateurs, bases de données,…)
Si on va dans ce répertoire ou plutôt base nous allons voir ceci :
| Code: | |
| ks364345:/var/lib/mysql/mysql# ls columns_priv.frm help_relation.MYI time_zone_leap_second.frm columns_priv.MYD help_topic.frm time_zone_leap_second.MYD columns_priv.MYI help_topic.MYD time_zone_leap_second.MYI db.frm help_topic.MYI time_zone.MYD db.MYD host.frm time_zone.MYI db.MYI host.MYD time_zone_name.frm func.frm host.MYI time_zone_name.MYD func.MYD proc.frm time_zone_name.MYI func.MYI proc.MYD time_zone_transition.frm help_category.frm proc.MYI time_zone_transition.MYD help_category.MYD procs_priv.frm time_zone_transition.MYI help_category.MYI procs_priv.MYD time_zone_transition_type.frm help_keyword.frm procs_priv.MYI time_zone_transition_type.MYD help_keyword.MYD tables_priv.frm time_zone_transition_type.MYI help_keyword.MYI tables_priv.MYD user.frm help_relation.frm tables_priv.MYI user.MYD help_relation.MYD time_zone.frm user.MYI |
Selon les versions, on utilise des fichiers ISAM ou MyISAM. Dans chaque cas une table s’exprime sous la forme de trois fichiers.
ISAM : http://fr.wikipedia.org/wiki/Organisation_s%C3%A9quentielle_index%C3%A9e
MyISAM : http://en.wikipedia.org/wiki/MyISAM
ISAM
* latable.ISD -> Le fichier de données
* latable.ISM -> Le fichier qui contient les clés
* latable.frm -> Le fichier qui contient la structure de la table
MyISAM
* latable.MYD -> Le fichier de données
* latable.MYI -> Le fichier qui contient les clés
* latable.frm -> Le fichier qui contient la structure de la table
Passons maintenant à l’administration , installation et configuration de Mysql
Installation :
Il faut donc installer les paquetages de Mysql
Pour RedHat et autes distributions qui utilise le gestionnaire de paquet RPM
| Code: | |
| # rpm -ivh mysql-server-*.rpm
#rpm -ivh mysql-3*.rpm |
Pour les utilisateurs de Debian vous pouvez procéder de la manière suivante :
| Code: | |
| # apt-get install mysql-server |
Puis en complément installer phpmyadmin et les plugins mysql pour PHP
| Code: | |
| # apt-get install php5-mysql # apt-get install phpmyadmin |
Mais avant si vous avez oublier vous devez faire une mise à jour de votre serveur en faisant ceci en root :
| Code: | |
| # apt-get update # apt-get dist-upgrade |
Démarrage et Arrêt de MySQL :
Le démarrage de Mysql, ce déroule très facilement en activant un script RC :
| Code: | |
| # /etc/init.d/mysql start |
| Code: | |
| # /etc/init.d/mysql stop |
| Code: | |
| # /etc/init.d/mysql restart |
Le script de démarrage active le démon mysqld , dans certaines distribution il existe un journal de bord ou plutôt fichier “log” de mysql qui nous détail les dernières actions du démon mysqld, ce fichier se situe dans “/var/log/mysqld.log” ou “/var/log/mysql.log”
Pour éteindre le serveur Mysql on peut aussi passer par la commande de supervision du serveur, la commande “mysqladmin”.
| Code: | |
| # mysqladmin shutdown -u root -p |
L’option “-u” permet d’identifier l’utilisateur
L’option “-p” permet de définir le password
Changement du password de l’utilisateur root :
Après avoir installé votre serveur Mysql , le password du DBA ( Data base Administrator) est vide. par défaut le DBA s’appel root. la commande mysqladmin permet de changer le password
Voir l’exemple ci-dessous:
| Code: | |
| # mysqladmin -u root password votre_password |
Si vous désirez plus atrd supprimer le password, on va utiliser l’option “-p” pour que la commande vous demande le mot de passe actuel
| Code: | |
| # mysqladmin -u root -p password “” |
Si vous voulez mettre à jour votre password root par exemple et que vous êtes déjà connecté à Mysql vous pouvez entrer cette commande SQL dans le prompt de mysql qui fera la mise à jour de votre password :
| Code: | |
| UPDATE user SET password=PASSWORD(’nouveaumotdepasse’) WHERE user=”root”; |
Création et destruction d’une base :
| Code: | |
| # mysqladmin -p create TEST |
| Code: | |
| # mysqladmin -p drop TEST |
Lorsque vous entrez ces commandes, le shell vous proposeras de confirmer votre action, vous répondez par O/N ou Y/N
Affichage d’informations :
Pour afficher l’état du serveur rien de plus simple on passe toujours par notre commande “mysqladmin”
| Code: | |
| # mysqladmin -p status
Enter password: |
Pour afficher la version du serveur toujours aussi simple, je pense même que vous pouvez deviner :
| Code: | |
| # mysqladmin -p version Enter password: mysqladmin Ver 8.41 Distrib 5.0.32, for pc-linux-gnu on i486 Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL license Server version 5.0.32-Debian_7etch6-log Threads: 1 Questions: 133 Slow queries: 0 Opens: 135 Flush tables: 1 Open tables: 17 Queries per second avg: 0.019 |
Pour afficher les Threads actifs ou les processus :
| Code: | |
| # mysqladmin -p processlist Enter password: +—-+——+———–+—-+———+——+——-+——————+ | Id | User | Host | db | Command | Time | State | Info | +—-+——+———–+—-+———+——+——-+——————+ | 8 | root | localhost | | Query | 0 | | show processlist | +—-+——+———–+—-+———+——+——-+——————+ |
Et une dernière pour finir , vérifier si le serveur répond :
| Code: | |
| ~# mysqladmin -p ping Enter password: mysqld is alive |
Sauvegarde, Exportation et Importation des données :
Généralement la sauvegarde sous linux se fait avec des outils traditionnels comme “tar” ou autres mais ici nous allons utiliser “mysqldump”
L’outil “mysqldump” permet de transférer le contenu d’une table dans un fichier sous forme de requêtes SQL.
Voici un exemple d’utilisation de mysqldump :
| Code: | |
| # mysqldump –password=”" –opt TEST > TEST_Sauvegarde.sql |
Cette commande fait la sauvegarde de tous le contenu de la base TEST et redirige le flux vers un fichier qui se nomme “TEST_Sauvegarde.sql”
Pour la restauration ou l’importation d’une sauvegarde de base de données, vous allez voir que c’est très simple et logique :
| Code: | |
| # mysql –password=”" TEST < TEST_Sauvegarde.sql |
Il existe aussi l’outil “mysqlimport” qui permet de remplir une table à partir d’un fichier, en voici un exemple :
| Code: | |
| # mysqlimport –fields-terminated-by=”,” –fields-encoded-by=”\” –local TEST fichier.txt |
Gestion des fichier ISAM et MyISAM :
la commande “isamchk” permet de manipuler les fichiers ISAM
la commande “myisamchk” permet elle de manipuler les fichiers MyISAM
ces commandes permettent de gérer les informations sur les tables …
Pour plus d’informations sur ces deux commandes qui ont beaucoup d’options que je ne détaillerais pas dans ce cours, vous pouvez faire :
| Code: | |
| # myisamchk –help
# isamchk –help |
La sécurité :
Les comptes utilisateurs et les droits d’accès aux bases sont stockés dans les tables de la base “mysql”
* user = Définit les utilisateurs
* db = définit les accès aux tables
* host = définit les hôtes qui peuvent accéder aux tables
* tables_priv …
* columns_priv …
La procédure de connexion à la base de données Mysql est la suivante :
1. A la connexion mysql se sert de la table user pour vérifier si l’utilisateur est autorisé et existe
2. Une fois connecté, Mysql vérifie les accès en se basant sur les tables user, db, host, tables_priv et columns_priv
3. Si authentification réussie -> OK sinon vérification dans les autres tables.
Utilisation de Mysql avec quelques notions de SQL :
Pour vous débrouiller avec Mysql et donc gérer votre base de données avec aisance vous devez connaître le langage SQL
Pour le langage SQL je vais vous donner quelques liens pour vous initier ou maitriser !
Je vous ferais un cours sur le langage SQL plus tard mais en attendant vous pouvez consulter les liens suivants:
* Introduction à SQL : http://sqlpro.developpez.com/cours/sqlaz/fondements/
* Les normes de SQL : http://sqlpro.developpez.com/SQL2008/
* Les fonctions SQL : http://sqlpro.developpez.com/cours/sqlaz/fonctions/
* Les erreurs les plus fréquentes du SQL : http://sqlpro.developpez.com/cours/sqlaz/erreurs/
* Les jointures (Notions Avancé) : http://sqlpro.developpez.com/cours/sqlaz/jointures/
* Création , Supression ou Modification de Bases et Tables : http://sqlpro.developpez.com/cours/sqlaz/ddl/
* Manipulation de données : http://sqlpro.developpez.com/cours/sqlaz/dml/
* Récupération de données : http://sqlpro.developpez.com/cours/sqlaz/select/
Utilisation de Mysql :
Pour se connecter à votre base de données, il vous suffit que le démon mysqld soit lancé et que vous tapez la commande suivante pour vous identifier sur le serveur :
| Code: | |
| # mysql -u login -p |
En voici un exemple :
| Code: | |
| # mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 5.0.32-Debian_7etch6-log Debian etch distribution Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer. mysql> |
Il faut savoir que le nom du DBA par défaut est comme nous l’avons dit plus tôt dans ce cours est le compte “root” qui n’ à pas de password à l’instalation du serveur, donc n’oubliez pas de le définir.
Une fois connecté à mysql , vous devez normalement avoir un prompt qui ressemble à “mysql>” ça veut dire que vous êtes bien identifier et que le serveur mysql attend vos instructions.
Pour avoir une liste de tout les commandes que vous pouvez entrer dans le shell “mysql” vous pouvez faire la commaned suivante :
| Code: | |
| mysql> help
For information about MySQL products and services, visit: List of all MySQL commands: |
For server side help, type ‘help contents’
Donc comme vous pouvez le voir, il y en a pas mal donc je vais pas toutes vous les expliquer mais justes les principales commandes.
Pour utiliser une base de données, voici la commande à utiliser :
| Code: | |
| # mysql> use NOM_BASE; |
(Ah j’ai oublier de vous dire votre instruction doit toujours se terminer par un “;” pour que le prompt puisse valider votre instruction et passer à la suivante)
Pour quitter le prompt mysql et donc fermer la connexion au serveur mysql, vous devez entrer la commande suifvante :
| Code: | |
| # mysql > exit; |
Le serveur vous répondra “Bye” et terminera la connexion avec le vous.
Lister les bases de données :
| Code: | |
| mysql> show databases -> ; +——————–+ | Database | +——————–+ | information_schema | | mysql | +——————–+ 2 rows in set (0.00 sec) |
Lister les tables de la base mysql :
| Code: | |
| mysql> show tables from mysql -> ; +—————————+ | Tables_in_mysql | +—————————+ | columns_priv | | db | | func | | help_category | | help_keyword | | help_relation | | help_topic | | host | | proc | | procs_priv | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | +—————————+ 17 rows in set (0.00 sec) |
Listes les champs de la table user de la base de données mysql :
| Code: | |
| mysql> show columns from user -> ; +———————–+———————————–+——+—–+———+——-+ | Field | Type | Null | Key | Default | Extra | +———————–+———————————–+——+—–+———+——-+ | Host | char(60) | NO | PRI | | | | User | char(16) | NO | PRI | | | | Password | char(41) | NO | | | | | Select_priv | enum(’N',’Y') | NO | | N | | | Insert_priv | enum(’N',’Y') | NO | | N | | | Update_priv | enum(’N',’Y') | NO | | N | | | Delete_priv | enum(’N',’Y') | NO | | N | | | Create_priv | enum(’N',’Y') | NO | | N | | | Drop_priv | enum(’N',’Y') | NO | | N | | | Reload_priv | enum(’N',’Y') | NO | | N | | | Shutdown_priv | enum(’N',’Y') | NO | | N | | | Process_priv | enum(’N',’Y') | NO | | N | | | File_priv | enum(’N',’Y') | NO | | N | | | Grant_priv | enum(’N',’Y') | NO | | N | | | References_priv | enum(’N',’Y') | NO | | N | | | Index_priv | enum(’N',’Y') | NO | | N | | | Alter_priv | enum(’N',’Y') | NO | | N | | | Show_db_priv | enum(’N',’Y') | NO | | N | | | Super_priv | enum(’N',’Y') | NO | | N | | | Create_tmp_table_priv | enum(’N',’Y') | NO | | N | | | Lock_tables_priv | enum(’N',’Y') | NO | | N | | | Execute_priv | enum(’N',’Y') | NO | | N | | | Repl_slave_priv | enum(’N',’Y') | NO | | N | | | Repl_client_priv | enum(’N',’Y') | NO | | N | | | Create_view_priv | enum(’N',’Y') | NO | | N | | | Show_view_priv | enum(’N',’Y') | NO | | N | | | Create_routine_priv | enum(’N',’Y') | NO | | N | | | Alter_routine_priv | enum(’N',’Y') | NO | | N | | | Create_user_priv | enum(’N',’Y') | NO | | N | | | ssl_type | enum(”,’ANY’,'X509′,’SPECIFIED’) | NO | | | | | ssl_cipher | blob | NO | | | | | x509_issuer | blob | NO | | | | | x509_subject | blob | NO | | | | | max_questions | int(11) unsigned | NO | | 0 | | | max_updates | int(11) unsigned | NO | | 0 | | | max_connections | int(11) unsigned | NO | | 0 | | | max_user_connections | int(11) unsigned | NO | | 0 | | +———————–+———————————–+——+—–+———+——-+ 37 rows in set (0.00 sec) |
Afficher le contenu d’une table , ici de la table user de la base de données mysql :
| Code: | |
| mysql> select * from user -> ; [Liste tronqué] |
Passons rapidement sur l’utilisation de PHP et Mysql et PERL et Mysql :
Mysql et PHP :
Il existes à ce jour beaucoup d’applications qui sont écrites avec PHP. Ce langage est un langage dynamique qui permet d’avoir un contenu mise à jour sans intervention du développeur et propriétaire du site internet.
Ce langage nous permet de communiquer avec une base de données de type Mysql pour y stocker des informations, il faut cependant le paquetage php-mysql que nous avons pris soin d’installer au début de ce cours.
Je vais vous donner un exemple de script PHP qui fait appel à une base de données lorsqu’il est exécuté par le serveur web Apache.
| Code: | |
| </hmtl>
<head><title>Script de démonstration PHP - Mysql</title></head> <body> <?php if(!($database = mysql_connect(”localhost”,”root”,”"))) { mysql_error(); exit(); } if(!(mysql_select_db(”TEST”,$database))) { mysql_error(); exit(); } $resultat = mysql_query(”SELECT * FROM matable”, $database); while($ligne = mysql_fetch_array($resultat, MYSQL_ASSOC)) { print(”Nom: ” .ligne["nom"].”<br>\n”); print(”Age: ” .ligne["age"].”<br>\n”); } ?> </body> </html> |
Pour tester ce script vous devez l’enregistrer dans un fichier avec l’extension “.php” puis le mettre dans le répertoire Apache , puis de lancer votre navigateur et d’aller à cette adresse : http://localhost/mon_script.php
Comme navigateur en mode texte sous linux vous avez le navigateur “Lynx” qui est assez simple d’utilisation et très efficace.
Perl et Mysql :
Le langage Perl grâce ç la bibliothèque DBI (Data Base Interface) peut accéder à une base de données.
Dans le cas de mysql, vous devez installer les paquets perl-DBI et perl-DBD-Mysql
Le script que je vais vous donner ci-dessous à pour fonction de se connecter à la base de données TEST sous le login root avec comme password vide et d’afficher le contenu de la table “matable”.
| Code: | |
| #!/usr/bin/perl -w
use DBI; $database = DBI -> connect(”DBI:mysql:TEST:localhost”,”root”,”"); if(not $database) { print $DBI::errstr,”\n”; exit(1); } $requete = $database -> prepare(”SELECT * FROM matable”); $requete -> execute; print DBI::dump_results($requete); |
Pour exécuter votre script perl vous devez avoir installer les paquetages necessaire et bien évidement lancer l’interpréteur Perl.
| Code: | |
| # perl mon_script.pl |
Voila le cours est terminé, j’espère vous avoir appris quelques choses, si vous avez des questions vous savez ou me trouver.
Dans un prochain cours je vous ferais un cours sur l’instalation, la configuration de SSH ainsi que sur son utilisation.
Merci.

La conséquence immédiate est la perte des trois critères précédemment cités, à savoit que le pirate a la possibilité de lire en clair et/ou de modifier les données échangées. WinSSLMiM met en oeuvre cette attaque dite du Man in the Middle SSL (ou HTTPS plus précisément)
Dans le cas de l’attaque, le pirate doit substituer son propre certificat (signé par lui même et non par une CA) à celui du vrai serveur. Le navigateur alerte donc l’utilisateur sur la non conformité de ce certificat. La sécurité du mécanisme repose alors uniquement sur le clique de souris de l’utilisateur sur le bouton “non”. Pour le certificat de notre pirate, il est assez logique de répondre “non” après l’avoir affiché :
Lors d’une véritable attaque, il n’est pas aussi simple de voir la supercherie. Des techniques avancées ont été implémentées dans les outils sous Linux. En ce qui concerne WinSSLMiM, il a l’avantage de fonctionner sous Windows 9x/2000 et de réunir les principales fonctionnalités avancées liées à cette attaque.






