Easy-Micro

ESPACEMEMBRE MySQL/MariaDB
Privilèges

Gestion des privilèges MySQL

Formation MySQL par Easy-Micro 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 commande
mysql> mysql -h localhost -u root -p
Enter password: ********
Vous pouvez aussi spécifier ces informations de connexion dans la section [client] du fichier de configuration .my.cnf:
[client]
host=nom_d_hote
user=nom_d'utilisateur
password=votre_mot_de_passe

Formation MySQL par Easy-Micro 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 mysql
mysql> USE mysql;
et la requête suivante pour lister les tables
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.

Formation MySQL par Easy-Micro 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 DESCRIBE
mysql> 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, Password
mysql> 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 %.
Remarquez que le mot de passe est crypté.

< Page précédente MYSQL/MARIADB Page suivante >