Mysql
 sql >> Base de données >  >> RDS >> Mysql

En savoir plus sur les autorisations au niveau de la table MySQL

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;

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)