FUNIX

Mettez un manchot dans votre PC


Encourager FUNIX

La consultation du site est totalement libre et gratuite, sans publicités. Les dons sont néanmoins appréciés pour payer l'hébergement et encourager son auteur


MySQL
PrésentationInstallation  |  Mise en place des utilisateurs   |    Création d'une base de données  | Perte du mot de passe administrateur ]

Dernière modif 17 octobre 2015

MySQL

Manips diverses

Présentation

Cette n'a pas pour but de vous présenter ce qu'est un SGBD et encore moins de vous expliquer le langage SQL mais de vous présenter l'installation et la configuration de MySQL afin de pouvoir l'utiliser avec Apache+PHP.
Pour une installation de MySQL avec compilation complète voir la page correspondante.

Cette page concerne la Mandriva et la ubuntu, sauf mention du contraire les manips sont à faire quelque soit la distribution.

Le chapitre Installation concerne l'installation des packages binaires, pour une installation en utilisant les sources (version plus récente) voir ma page installation apache+PHP+MySQL.
Les autres chapitres concernent les deux types d'installation.

Installation

Vous avez le choix d'installer les packages binaires, ou d'installer les sources, je préfère la dernière option car elle permet d'obtenir une version optimisée pour la machine. Pour plus d'info sur la compil, voir la page installation Apache+PHP+MySQL
Pour une install par package un urpmi mysql devrait faire l'affaire (mysql-server sous ubuntu).

Cela va nous créer un ensemble d'exécutables sous /usr/sbin (ceux réservés à root) et sous /usr/bin (pour tous les utilisateurs), par ailleurs un répertoire /var/lib/mysql va être créé. Le fichier de démarrage du daemon MySQL se trouve sous /etc/rc.d/init.d pour une Mandriva/Mageia et sous /etc/init.d sous ubuntu.

L'installation par rpm n'a pas lancé le daemon il faudra le faire manuellement en tapant

systemctl start mysqld

NOTE Vous noterez que si vous faites un:

ps aux | grep mysqld

L'utilisateur mysql est proprio du daemon mysqld. Vous vous rendrez compte que même si c'est root qui lance le daemon aussitôt après  c'est l'utilisateur mysql qui en devient le proprio, ainsi si jamais il y avait une faille de sécurité dans MySQL, le hacker ne se retrouverait pas root mais mysql avec les droits limités qui vont avec.


Mise en place des utilisateurs

La première chose à faire est de mettre un mot de passe pour root pour l'accès à l'administration des bases de données. La commande à taper en tant que root est:

/usr/local/mysql/bin/mysql_secure_installation

voilà le résultat

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!




All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!


Cleaning up...


Le mot de passe peut être différent de celui du login. Si vous rencontrez l'erreur suivante bien que vous ayez configuré proprement l'emplacemen de la socket dans le fichier /etc/my.cnf

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

vous pouvez créer le lien suivant

ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock

Maintenant on va créer un compte utilisateur (olivier dans mon exemple), pour cela on doit se connecter en tant qu'administrateur de la base à la base de donnée mysql contenant les infos sur les utilisateurs et leurs droits.

/usr/local/mysql/bin/mysql -u root -p mysql
Enter password:

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.6.27 Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

A présent on va entrer l'utilisateur olivier qui sera un super utilisateur avec les mêmes droits que root:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'olivier'@'localhost'
         > IDENTIFIED BY 'mot-de-passe' WITH GRANT OPTION;

pour créer un utilisateur toto qui n'aura accès qu'à la base test avec certaines fonctions citées ci-dessous à partir de la machine asterix.fr on tapera

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
            ON test.*
            TO toto@asterix.fr
            IDENTIFIED by 'mot-de-passe';
             
si  vous tapez

mysql> SELECT * FROM user;

vous voyez chacun des droits attribués à vos utilisateurs, vous avez la possibilité également de préciser les droits en fonction de ces colonnes avec cette commande

mysql>  INSERT INTO user
        ->  VALUES('localhost','olivier',PASSWORD('mot-de-passe'),
        ->  'Y','Y','Y','Y','Y','Y',' (...) Y','Y','Y','Y','Y','Y','Y', Y','Y','Y','Y','Y',' ',' ',' ',' ','0','0','0','0');
Query OK, 1 row affected (0.00 sec)

Le nombre de champ varie en fonction de la version de mysql.

NOTE Il n'est pas obligatoire de rentrer le login pour le nom d'utilisateur et le mot de passe de login.

Maintenant pour prendre tout ça en compte

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.08 sec)

Pour quitter

mysql>quit

Création de tables

Maintenant notre utilisateur olivier va créer une table qui nous servira plus tard pour nos expérimentations avec Apache. Il doit d'abord se connecter:

/usr/local/mysql/bin/mysql -u olivier -p
Enter password:

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.6.27 Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Pour voir la liste des bases de données disponibles, on tapera:

mysql> SHOW DATABASES;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0,00 sec)

On va maintenant créer une base de données essai:

mysql> CREATE DATABASE essai;
Query OK, 1 row affected (0.00 sec)

On va utiliser maintenant cette base de donnée

mysql> USE essai
Database changed

Comme la base vient d'être crée, elle ne contient aucune table, pour s'en convaincre il suffit de taper:

mysql> SHOW TABLES;
Empty set (0.00 sec)

Pour notre première exemple Apache+PHP+MySQL, on va créer la table suivante:

mysql> CREATE TABLE coord (
    -> nom VARCHAR(20),
    -> prenom VARCHAR(20),
    -> email VARCHAR(30)
    -> );
Query OK, 0 rows affected (0.03 sec)

Jetons un coup d'oeil maintenant sur les tables disponibles:

mysql>  SHOW TABLES;
+---------------------+
| Tables in essai    |
+---------------------+
| coord                  |
+---------------------+
1 row in set (0.00 sec)

La table nouvellement créée apparaît bien. Pour avoir le détail de cette table, on tapera:
 

mysql> DESCRIBE coord;
+-----------+--------------+--------+------+-----------+------+
| Field      | Type           | Null   | Key  | Default |Extra |
+-----------+--------------+--------+------+-----------+------+
| nom       | varchar(20) | YES  |          | NULL    |         |
| prenom  | varchar(20) | YES  |          | NULL    |         |
| email     | varchar(30) | YES  |          | NULL    |         |
+-----------+--------------+--------+------+-----------+------+
3 rows in set (0.00 sec)

Pour notre deuxième exemple Apache+PHP+MySQL, on créera la table suivante:

 mysql> CREATE TABLE ref (
         -> date VARCHAR(20),
         -> host VARCHAR(20),
        -> ip VARCHAR(15),
        -> os VARCHAR(20),
        -> page VARCHAR(30)
        -> );
Query OK, 0 rows affected (0.05 sec)

Elle contiendra les informations sur les visiteurs du site. A présent pour quitter tapez simplement quit.

Reportez vous maintenant à la page Apache et au paragraphe correspondant pour la manipulation de ces tables avec Apache+PHP.

Perte du mot de passe d'administrateur

Si vous avez perdu le mot de passe root pour le réinitialiser il faut stopper le serveur

systemctl stop mysqld

On redémarre le daemon en désactivant l'identification et l'écoute du réseau (afin d'éviter d'être piraté à ce moment où MySQL est vulnérable) :

 /usr/local/mysql/bin/mysqld --user=mysql --skip-grant-tables --skip-networking &

Maintenant on modifie le mot de passe en se connectant à la base mysql 

/usr/local/mysql/bin/mysql  mysql -u root

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.6.27 Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.



mysql>UPDATE user SET password=PASSWORD('nouveau-mot-de-passe') WHERE user="root";
Query OK, 4 rows affected (0,06 sec)
Rows matched: 4  Changed: 4  Warnings: 0

On prend en compte les changement en tapant la commande suivante :

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0,04 sec)

on relance ensuite le daemon mysqld

systemctl restart mysqld
 

[Retour page d'accueil FUNIX] [Retour haut de la page]