4.2 Règles de sécurité et droits d'accès au serveur MySQL
4 Administration du serveur
Manuel de Référence MySQL 4.1 : Version Française
. Instructions générales de sécurité . Comment protéger MySQL contre les pirates . Options de démarrage qui concernent la sécurité . Problèmes de sécurité avec LOAD DATA LOCAL . Rôle du système de privilèges . Comment fonctionne le système de droits ->Droits fournis par MySQL . Se connecter au serveur MySQL . Contrôle d'accès, étape 1 : Vérification de la connexion . Contrôle d'accès, étape 2 : Vérification de la requête . Causes des erreurs Access denied
|
4.2.7 Droits fournis par MySQL
Les droits des utilisateurs sont stockés dans les tables
user
,
db
,
host
,
tables_priv
et
columns_priv
de la base
mysql
(c'est-à-dire, la base nommée
mysql
). Le serveur MySQL lit ces tables
au démarrage, et dans les circonstances indiquées dans la section Quand les changements de privilèges prennent-ils effet ? .
Les noms utilisés dans ce manuel font référence aux droits fournis par
MySQL version 4.0.2, tel que présentés dans la table ci-dessous, avec
le nom de la colonne associée au droit, dans la table de droits, et dans
le contexte d'application :
Droit
|
Colonne
|
Contexte
|
ALTER
|
Alter_priv
|
tables
|
DELETE
|
Delete_priv
|
tables
|
INDEX
|
Index_priv
|
tables
|
INSERT
|
Insert_priv
|
tables
|
SELECT
|
Select_priv
|
tables
|
UPDATE
|
Update_priv
|
tables
|
CREATE
|
Create_priv
|
bases de données, tables ou index
|
DROP
|
Drop_priv
|
bases de données ou tables
|
GRANT
|
Grant_priv
|
bases de données ou tables
|
REFERENCES
|
References_priv
|
bases de données ou tables
|
CREATE TEMPORARY TABLES
|
Create_tmp_table_priv
|
administration du serveur
|
EXECUTE
|
Execute_priv
|
administration du serveur
|
FILE
|
File_priv
|
accès aux fichiers du serveur
|
LOCK TABLES
|
Lock_tables_priv
|
administration du serveur
|
PROCESS
|
Process_priv
|
administration du serveur
|
RELOAD
|
Reload_priv
|
administration du serveur
|
REPLICATION CLIENT
|
Repl_client_priv
|
administration du serveur
|
REPLICATION SLAVE
|
Repl_slave_priv
|
administration du serveur
|
SHOW DATABASES
|
Show_db_priv
|
administration du serveur
|
SHUTDOWN
|
Shutdown_priv
|
administration du serveur
|
SUPER
|
Super_priv
|
administration du serveur
|
Les droits de
SELECT
,
INSERT
,
UPDATE
et
DELETE
vous permettent de faire des opérations sur les lignes qui existent, dans une
table existante d'une base.
La commande
SELECT
requiert le droit de
SELECT
uniquement si des
lignes sont lues dans une une table. Vous pouvez exéctuer une commande
SELECT
même sans aucun droit d'accès à une base de données dans le serveur. Par exemple,
vous pourriez utiliser le client
mysql
comme une simple calculatrice :
mysql> SELECT 1+1; mysql> SELECT PI()*2;
|
Le droit de
INDEX
vous donne le droit de créer et détruire des
index de table.Le droit de
ALTER
vous donne le droit de modifier une table avec la commande
ALTER TABLE
.
Les droits de
CREATE
et
DROP
vous permettent de créer de nouvelles
tables et bases de données, et de les supprimer.
Notez que si vous donnez le droit de
DROP
pour la base de données
mysql
à un utilisateur, cet utilisateur pourra détruire la base qui contient les droits
d'accès du serveur !
Le droit de
GRANT
vous permet de donner les droits que vous possédez à d'autres
utilisateurs.
Le droit de
FILE
vous donne la possibilité de lire et écrire des fichiers sur le
serveur avec les commandes
LOAD DATA INFILE
et
SELECT ... INTO
OUTFILE
. Tout utilisateur qui possède ce droit peut donc lire ou écrire
dans n'importe quel fichier à l'intérieur duquel le serveur MySQL peut lire ou écrire.
Les autres droits sont utilisés pour les opérations administratives qui sont
exécutées par l'utilitaire
mysqladmin
. La table ci-dessous montre quelle
commande est associée à
mysqladmin
avec un de ces droits :
Droit
|
Commande autorisée
|
RELOAD
|
reload
,
refresh
,
flush-privileges
,
flush-hosts
,
flush-logs
et
flush-tables
|
SHUTDOWN
|
shutdown
|
PROCESS
|
processlist
|
SUPER
|
kill
|
La commande
reload
indique au serveur de relire les tables de droits.
La commande
refresh
vide les tables de la mémoire, écrit les données
et ferme le fichier de log.
flush-privileges
est un synonyme de
reload
.
Les autres commandes
flush-*
effectuent des fonctions similaires à la commande
refresh
mais sont plus limitées dans leur application, et sont préférables
dans certains contextes. Par exemple, si vous souhaitez simplement vider les
tampons dans le fichier de log, utilisez
flush-logs
, qui est un meilleur
choix que
refresh
.
La commande
shutdown
éteint le serveur.
La commande
processlist
affiche les informations sur les threads qui s'exécutent
sur le serveur. La commande
kill
termine un des threads du serveur.
Vous pouvez toujours afficher et terminer vos propres threads, mais vous
aurez besoin des droits de
PROCESS
pour afficher les threads, et le droit
de
SUPER
pour terminer ceux qui ont été démarrés par d'autres utilisateurs.
Syntaxe de
KILL
.
C'est une bonne idée en général, de ne donner les droits de Grant qu'aux utilisateurs
qui en ont besoin, et vous devriez être particulièrement vigilant pour
donner certains droits :
-
Le droit de
GRANT
permet aux utilisateurs de donner leurs droits à d'autres
utilisateurs. Deux utilisateurs avec des droits différents et celui de
GRANT
pourront combiner leurs droits respectifs pour gagner un autre niveau d'utilisation
du serveur.
-
Le droit de
ALTER
peut être utilisé pour tromper le système en renommant les
tables.
-
Le droit de
FILE
peut servir à lire des fichiers accessibles à tous sur le serveur,
et les placer dans une base de données. Le contenu pourra alors être lu et manipulé
avec
SELECT
. Cela inclus le contenu de toutes les bases actuellement
hébergées sur le serveur !
-
Le droit de
SHUTDOWN
peut conduire au dénis de service, en arrêtant
le serveur.
-
Le droit de
PROCESS
permet de voir en texte clair les commandes qui
s'exécutent actuellement, et notamment les changements de mot de passe.
-
Les droits sur la base de données
mysql
peuvent être utilisés pour changer
des mots de passe ou des droits dans la table des droits (Les mots de passe sont
stockés chiffrés, ce qui évite que les intrus ne les lisent). S'ils accèdent
à un mot de passe dans la table
mysql.user
, ils pourront l'utiliser
pour se connecter au serveur avec cet utilisateur (avec des droits suffisants,
le même utilisateur pourra alors remplacer un mot de passe par un autre).
Il y a des choses qui ne sont pas possibles avec le système de droits de MySQL :
-
Vous ne pouvez pas explicitement interdire l'accès à un utilisateur
spécifique. C'est à dire, vous ne pouvez pas explicitement décrire un
utilisateur et lui refuser la connexion.
-
Vous ne pouvez pas spécifier qu'un utilisateur a les droits de créer et
de supprimer des tables dans une base, mais qu'il n'a pas les droits pour
créer et supprimer cette base.
|