|
Accès initial au serveur
La connexion au serveur Mysql s'effectue initialement sous le compte root et sans mot de passe
Le serveur "MonSQL" naturellement ne sait causer que le SQL. La connaissance de ce langage universel est indispensable. N'oublions pas que dans nos pages PHP, le dialogue avec les bases de données s'effectue toujours en SQL (par l'intermédiaire de la fonction mysql_query($requete, $connexion), où $requete est une chaine de caractères qui contient une commande SQL, exactement semblable à celle que l'on peut passer en ligne de commande ou par l'intermédiaire de phpmyadmin. Nous allons effectuer une première connexion et session de travail de 2 façons différentes.
Utilisation de l'utilitaire "client" mysql
Première connexion, en ligne de commande
# si on travaille avec Windows/EASYPHP, ouvrir une fenetre DOS
# et se placer dans le rép : c:\>cd easyphp\mysql\bin
mysql -u root
Welcome to the MySQL monitor. Commands ends with ; or \g
Your Mysql connection id is ... to server version: 3.23.49
tape help; ou \h for help
mysql>
Dès lors, nous nous sommes connectés comme administrateur du serveur MySql, avec le compte root@localhost sans mot de passe ! et le logiciel "client" mysql attend des commandes SQL
Si root ne peut se connecter que localement (localhost), il possède quand meme tous les droits sur les bases de données et en particulier sur la base d'administration nommée elle aussi mysql
Il faut lui attribuer un mot de passe (voir après)
Interrogation du serveur Mysql, à commenter
mysql> SHOW databases;
mysql> USE test;
mysql> SHOW tables;
mysql> USE mysql;
mysql> SHOW tables;
mysql> SHOW columns FROM user;
mysql> SELECT host, user, password FROM user;
mysql>quit
Utilisation de phpMyAdmin
On lance Phpmyadmin, utilitaire de gestion du serveur Mysql. Il permet d'avoir une vue et une action complètes bien plus aisément qu'en ligne de commande, mais il mobilise pour cela un serveur WEB (Apache), et l'ensemble des scripts PHP appelé phpmyadmin exécutés par Apache.
Examen des bases : 2 bases ont été créées lors de l'installation : test (vide de tables) et mysql, base de gestion des droits du serveur
Examiner les tables de la base mysql, puis la structure de la table user et son unique enregistrement root.
Cette table contient tous ls utilisateurs connus du serveur. Il s'agit du nom de l'administrateur Mysql qui posséde tous les privilèges (droits) sur les bases et le serveur !
Il s'agit d'une situation initiale particulière. Attention, en l'absence de mot de passe sur root, il y a une totale insécurité !
Protéger le compte administrateur root par un mot de passe (root par exemple)
Dans la fenetre de la table user, activer le lien Modifier
Saisir le mot de passe (par exemple root) sur le champ Password, en faisant appel à la fonction PASSWORD, qui va asurer le cryptage
Observer la présence maintenant d'un mot de passe crypté pour l'administrateur local root@localhost
La commande SQL correspondante est : mysql>SET PASSWORD FOR root= PASSWORD('root');
Accès avec mot de passe
Constater que l'accès est toujours possible, tant qu'on a pas redémarré le serveur
Redémarrer Easyphp : dans le menu contextuel ou bien dans la page d'accueil de phpmyadmin activer le lien recharger Mysql
Phpmyadmin ne fonctionne plus ! "accès refusé pour l'utilisateur root@localhost"
En effet le serveur Mysql réclame maintenant un mot de passe ..mais comment le lui donner ?
Avec le client mysql
# mysql -u root -p
Enter password : root (il n'apparait pas à l'écran)
Welcome to the MySQL monitor
......
Avec Phpmyadmin, il faut intervenir dans son fichier de configuration config.inc.php situé dans c:\easyphp\phpmyadmin\ (en faire une copie auparavant ...)
Editer le fichier et compléter la 3 ème ligne de l'extrait qui suit :
.....
$cfgServers[$i]['auth_type'] = 'config';
$cfgServers[$i]['user'] = 'root';
$cfgServers[$i]['password'] = root (ou le mot de passe choisi)
Sauvegarder, puis relancer Phpmyadmin. (Cette façon est pratique pour un usage personnel, mais semble peu sécure(sauf si l'accès à la console du serveur étant réservé à son administrateur)
Authentification par Apache (htacess)
Dans ce cas phpMyAdmin s'en remet au serveur WEB pour l'authentification (sur Apache, mécanisme de protection par fichier .htaccess). C'est la méthode recommandée, qui permet à tous les utilisateurs d'accéder selon leurs droits à phpmyadmin.
....
$cfgServers[$i]['auth_type'] = 'http';
$cfgServers[$i]['user'] = 'root';
$cfgServers[$i]['password'] = '';
Désactiver le contrôle par mot de passe
Bien que cela ne soit pas conseillé, il est possible de désactiver le contrôle par mot de passe, en lançant le serveur mysqld avec une option particulière.
Aller dans le menu configuration d'Easyphp, option Redémarrer mysql, et ajouter l'option --skip-grant-table dans la ligne de commande
Créer des bases de données, importer leurs données
Nous allons voir 2 techniques,
Pour créer une base
La commande SQL est très simple : create database cdi. On peut la passer avec le client mysql ou avec phpmyadmin
Se connecter comme root et dans la page d'accueil "Créer une base de données" --> cdi
Constater qu'un nouveau sous-rép.cdi a été créé.
Création d'une table à partir d'une exportation d'une base access
Créer la table glossaire dans la base test
Avec Phpmyadmin, sélectionner la base test
"Créer une nouvelle table sur la base test" :
Nom : glossaire Champs : 3
Exécuter
A l'aide du formulaire proposé, définir sa structure
Champ Type Null primaire
---------- ------------- ------ --------
sigle varchar(12) not null x
descriptif varchar(50) not null
type char(1) not null
Sauvegarder --> La nouvelle table glossaire est alors créée dans la base test ( ou dans votre base webmestre)
Remarquer que la requête SQL envoyée par phpmyadmin pour créer la table est :
CREATE TABLE glossaire (
sigle VARCHAR(12) NOT NULL,
descriptif VARCHAR(50) default NOT NULL,
type VARCHAR(1) default NOT NULL,
PRIMARY KEY (sigle)
);
Gestion de la table
Phpmyadmin permet maintenant de gérer la table
Observer les rubriques : Supprimer (la table), Insérer (des enregistrements) et la possibilité de modifier ou suppression de champs
Examiner le fichier fourni glossaire.txt
Il a été obtenu en exportant une table access au format délimité, avec le séparateur ; sans délimitateur de texte.
Dans Phpmyadmin, cliquer sur insérer des données provenant d'un fichier de texte dans la table. Renseigner le formulaire:
Emplacement du fichier texte : glossaire.txt
Champs terminée par ;
Supprimer les autres choix
Exécuter
Observer les 283 enregistrements importés et supprimer le premier.
Sauvegarde et restauration d'une base au format sql
Sauvegarde de la base test au format SQL
Sous le système d'exploitation :
mysqldump - u root -p test > C:\stage\fichiers\test.sql
--> donner le mot de passe
Lire et comprendre le contenu du fichier test.sql
Sous Phpmyadmin :
Comme root, sélectionner la base test
"Afficher le schéma de la base de données"
Structure et données
Transmettre
Exécuter
Nom du fichier C:\stage\fichiers\test1.sql
Comparer avec le fichier précédent
Restauration de la base cdi
La structure de la base cdi ainsi que la totalité de ses enregistrements ont été sauvegardés à l'aide de l'utilitaire mysqldump, comme précédemment sous forme du fichier cdi.sql
Sous le système d'exploitation :
mysql -u root -p cdi < cdi.sql
Sous Phpmyadmin
sélectionner la base cdi
"Emplacement du fichier texte"
C:\stage\fichiers\cdi.sql
Exécuter
Comparer le fichier à la structure et aux contenus des tables
Créer des comptes, attribuer des privilèges
Création des comptes
Il s'agit de créer les 2 comptes sur localhost, à l'aide de phpmyadmin :
public (sans mot de passe) et admin/admin
Ces utilisateurs ne doivent posséder aucun droits d'administration globaux sur le serveur lui-meme, mais uniquement des droits d'accès (public) et d'administration (admin) sur la base cdi
Création des comptes d'accès
Dans la base Mysql, table user, lien insérer un nouvel enregistrement
Base mysql; table user; action "insérer"
- host localhost .....
- user public admin
- mdp admin -- fonction=PASSWORD
Laisser tous les droits (globaux) à No
Ne pas oublir de relancer le serveur
Essayer de vous connecter sous le compte admin/admin sous DOS et avec phpmyadmin. admin peut-il accéder à la gestion des utilisateurs ? Conclusion.
Le système de droits sur les bases Mysql
On a vu que la table mysql.user contient la liste des comptes pouvant accéder au serveur. De plus, elle détermine les droits au niveau serveur pour l'ensemble des bases. Elle est notamment consultée lors de chaque demande de connexion par la fonction PHP mysql_connect().
La table mysql.db contient les privilèges d'un utilisateur (autre que root) sur chaque base de données créée (donc pas la table mysql). Elle est consultée à chaque commande SQL de cet utilisateur portant sur les tables de cette base, pour examiner s'il a le droit, le "privilège" de pouvoir utiliser cette commande.
Les tables mysql.tables_priv et mysql.columns_priv déterminent des droits plus précis des utilisateurs respectivement sur une table d'une base et sur un champ d'une table,
Les commandes SQL grant et revoke permettent d'attribuer et de retirer des droits. Voir pour des détails
Exemple : Pour que admin soit le gestionnaire de la base cdi, avec droit d'accès à distance (@% = de partout), et certains privilèves (ALL PRIVILEGES pour les attribuer tous) sur toutes (*) les tables de cdi
mysql> GRANT select,insert,update,delete
ON cdi.*
TO admin@'%'
IDENTIFIED BY "admin";
Attribuer des "privilèges" pour la base cdi
Conformément aux informations suivantes, à l'aide de phpmyadmin (ou si on a le courage avec grant !)
Comptes localhost droits à attribuer
----------------|-----------------------------------------------------------------------
public/... | droit d'accès à la base cdi, sans aucun privilège global
| SELECT (exclusivement) sur les tables inscrits, documents
| INSERT sur la table demande
admin/admin | droits select,insert,update,delete au niveau de la base CDI
Relancer le serveur et bien vérifier l'application de ces droits, comme admin et comme public (avec phpmyadmin ou mysql).
Remarque : il est aussi facile d'utiliser la commande grant (si on la maitrise). Ecrire les commandes grant pour créer le compte pub/pub, avec les memes droits que public.
Installer la table etablissements à partir du fichier etablissements.sql dans la base test, et permettre à public d'y accéder juste en interrogation
Administrer un serveur Mysql distant
Il s'agit maintenant de créer un nouveau compte permettant de se connecter à partir d'une machine distante au serveur Mysql. L'expérience se mènera sur un réseau local, mais ce pourrait etre sur Internet. On suppose qu'il n'y a pas de problème de résolution de nom (ie de traduction réciproque nom de machine <--> adresse IP)
Exemple de dispositif de test
PC1 sur lequel s'exécute Easyphp (ce pourrait etre une machine Linux hébergeant Mysql). Il est utilisé dans la suite comme serveur MySQL (dans le contexte académique c'est le serveur Mysql io.ac-creteil.fr)
PC2 sur lequel s'exécute Easyphp (ou machine Linux avec Apache+PHP). Il est utilisé comme serveur WEB exécutant des scripts PHP (dans le contexte académique, c'est le serveur WEB www.ac-creteil.fr)
PC3 station de travail cliente. L'utilisateur s'adresse au moyen de son navigateur "favori" au serveur WEB de PC2 (en contexte académique, c'est un utilisateur quelconque dans son établissement ou chez lui)
PC1 PC2 PC3
--------- ---------- ----------
| Mysql | | Apache | | Client |
| | | + PHP | | WEB |
--------- ---------- ----------
| | |
----|-----------------------------|------------------------|----------------
| | |
| | |
Le compte login/mdp |
http://pc2/script.php
doit etre défini |
comme login@pc2 |
| script.php
| --------------------------------------
| /* chaque script doit se connecter
| * au serveur Mysql sur pc1 */
| $host ="pc1";
| $login = ..;
| $mdp = ...;
| mysql_connect($host, $login, $mdp);
|
-----------------------------------
| base système mysql - table user |
------------------------------------------------------
| host | user | password | champs privilèges ..
|localhost | root | xxxxxx | Y Y Y ....
| pc2 | root | xxxxxx | .....
| % | admin | xxxxxx | .....
| pc2 |personne| xxxxxx | .....
Fonctionnement
Lorsque le serveur reçoit une demande de connexion (pour nous, via l'instruction PHP mysql_connect),serveur il consulte la table user de sa base de données système mysql et décide selon les cas d'accepter ou de rejeter la connexion. La décision est fondée à la fois sur l'examen du champ host (les noms ou ip des machines à partir de laquelles les connexions sont permises) et du champ user (le nom du compte Mysql de l'utilisateur), puis ensuite sur l'exactitude du mot de passe fourni.
Pour le système mysql, la demande de connexion émane de user@host.
On peut utiliser des métacaractères `%' (tous) et `_' dans le champ host
Expérimenter
Choisir les 3 machines, qu'on désignera ensuite par leur nom de machine, ou s'il y a des difficultés de résolution des noms par leur adresse ip
S'authentifier comme root à phpMyadmin. Créer les comptes root@pc2 et admin@% (mot de passe admin)
Copier les fichiers form_connexion_distante.html et connexion_distante.php dans le site WEB de PC2.
Comprendre exactement ce que font ces fichiers.
Tester avec un navigateur sur PC3 : http://pc2/form_connexion_distante.html : pouvez vous vous connecter comme root, admin aux bases de Mysql ?
[Précédent] [Sommaire] [Suivant] [Haut]
|