Privilèges
Gestion des privilèges MySQL
Système de privilèges
La sécurité de MySQL est basée sur un système de privilèges simple. Chaque utilisateur qui veut se connecter doit s'identifier auprès du serveur MySQL. Cette identification est une combinaison de trois critères: l'hôte (la machine) depuis lequel la connexion est établie, un nom d'utilisateur et un mot de passe.
Attributs
A cette identification est associé un ensemble d'attributs qui vont permettre de définir des privilèges sur certaine bases de données, tables, colonnes ou opérations particulières.
Root : super utilisateur
Un seul utilisateur peut se connecter en local. Il se nomme root, c'est le super utilisateur, il dispose de tous les privilèges sur le serveur. Cet utilisateur n'a pas de mot de passe.
Note: Avant la version 5.0 de MySQL, existait un utilisateur anonyme sans nom (champ blanc qui signifiait "tous les utilisateurs") qui pouvait se connecter depuis n'importe quelle machine (via le symbole % qui signifie "tous les hôtes"). Cet utilisateur est - heureusement- supprimé par défaut depuis la version 5.0
Connexion au serveur sous invite de commandemysql> mysql -h localhost -u root -p
Enter password: ********
[client]
host=nom_d_hote
user=nom_d'utilisateur
password=votre_mot_de_passe
Principe de fonctionnement du système de privilèges
MySQL conserve les privilèges dans la base de donnée mysql présente dès l'installation du serveur. MySQL permet d'octroyer des privilèges aux utilisateurs mais ne permet pas d'en refuser. Il utilise les tables user, db, host, tables_priv et columns_priv pour gérer les privilèges des utilisateurs.
Vérifions la présence de la base de donnée mysqlmysql> USE mysql;
mysql> SHOW TABLES;
On peut voir la liste des tables de privilèges: user, db, host, tables_priv et columns_priv.
MySQL contrôle l'accès en deux temps:
1 - Il vérifie l'identité de l'utilisateur à sa connexion via l'hôte de connexion, le nom d'utilisateur et le mot de passe.
2 - Il vérifie ensuite chacune des requêtes envoyées pour s'assurer que l'utilisateur a les privilèges nécessaires.
La connexion
MySQL utilise la table user pour vérifier qu'un utilisateur est autorisé à se connecter.
Visualisons la structure de la table user avec une commande DESCRIBEmysql> DESCRIBE user;
La colonne FIELD liste le trois champs de connexion (Host, User et password) puis les différents privilèges globaux de l'utilisateur, c'est à dire, ceux s'appliquant à toutes les bases de données et au serveur lui-même. Chaque champ est caractérisé par un type enum (qui n'accepte que les valeurs listés, ici : Y ou N). La valeur par défaut est N, le refus de privilège.
Voir le descriptif des privilèges dans Vérif requêtes.
Nous remarquons que le nom (User) et le mot de passe (Password) sont limités à 16 caractères et le nom d'hôte (Host) à 60 caractères.
Les colonnes Host, User et Password de la table user
Visualisons uniquement les trois colonnes Host, User, Passwordmysql> SELECT Host, User, Password FROM user;
Pour permettre la connexion d'un utilisateur "titi" à un domaine (mondomaine.com), il faudrait ajouter
- dans la colonne Host le champ "%.mondomaine.com" pour une connexion depuis toutes machines (sinon: pc1.mondomaine.com)
- et dans la colonne User le nom "titi".
Le champ host peut accepter un nom d'hôte tel que
- srv,
- un nom complet tel que srv.mondomaine.com
- ou le caractère générique %.