Il est très courant de voir une déclaration d'octroi comme celle-ci qui donne accès à toutes les tables d'une base de données donnée.
GRANT SELECT, SHOW VIEW
ON mydatabase.*
TO myreaduser@myhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;
Où mydatabase
, myreaduser
, myhoost
, et somepassword
sont les variables appropriées pour votre base de données. Notez que les FLUSH PRIVILEGES
La commande réinitialise les privilèges de MySQL et vous ne pourrez pas utiliser les nouveaux droits d'utilisateur tant qu'elle n'aura pas été exécutée.
Un tel utilisateur pourra lire et accéder à toutes les tables d'une base de données. Pour cet exemple nous allons utiliser la base de données boatio qui comporte 3 tables :boats
, trips
, et users
.
mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| boats |
| trips |
| users |
+------------------+
3 rows in set (0.00 sec)
Si nous souhaitons créer un utilisateur qui n'a accès qu'aux trips
table, nous remplaçons simplement le caractère générique splat (*) qui représente toutes les tables, par les tables spécifiques que vous souhaitez (dans ce cas :trips
).
GRANT SELECT, SHOW VIEW
ON boatio.trips
TO myreaduser@localhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;
Nous pouvons maintenant nous connecter en tant que nouvel utilisateur et exécuter des tables d'affichage pour voir qu'il n'a accès qu'aux trips
table et non les deux autres. Ce nouvel utilisateur ne sait tout simplement pas que les autres tables existent.
$ mysql -umyreaduser boatio -psomepassword
mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| trips |
+------------------+
1 row in set (0.00 sec)
Pour donner à l'utilisateur l'accès à plus de tables, relancez simplement le même GRANT
instruction avec les noms de table supplémentaires. Par exemple, les éléments suivants accorderont l'accès aux trips
et users
tables mais pas les boats
.
GRANT SELECT, SHOW VIEW ON boatio.trips TO myreaduser@localhost IDENTIFIED BY 'somepassword';
GRANT SELECT, SHOW VIEW ON boatio.users TO myreaduser@localhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;
Et la preuve :l'utilisateur a désormais accès aux trips
et users
tables mais pas boats
.
$ mysql -umyreaduser boatio -psomepassword
mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| trips |
| users |
+------------------+
2 rows in set (0.00 sec)