Utiliser un wildcard pour donner des droits sur des tables à un utilisateur avec MySQL et MariaDB

L'attribution de droit dans MySQL et MariaDB est parfois un casse tête surtout si l'on souhaite avoir un contrôle  par table pour un utilisateur. Il est possible d'utiliser un wildcard dans la commande GRANT mais sa syntaxe n'est pas des plus explicite.

Imaginons que pour mon blog je travaille avec une équipe SEO. Cette équipe a besoin d’accéder à la BDD pour gérer leur donner et faire de l'anayse sur des stats. L'équipe n'étant pas composé de développeurs, je ne souhaite pas leur donner trop de droits sur les tables.

Toutes les tables dont ils ont besoin sont préfixées par "seo_". La commande qui me vient donc en tête est la suivante:

GRANT SELECT, INSERT, UPDATE, DELETE ON `blog`.seo_* TO 'seo_team'@'localhost';


Vous l'aurez deviné, c'est trop facile, ça ne fonctionne pas. MySQL et MariaDB n'accepte pas la notation "seo_*" comme nom de table. Je pourrais donc faire une commande par table en indiquant explicitement la table, mais ça implique de maintenir  les droits au fur et à mesure que des tables vont être ajoutées ou supprimées.

Il est possible de contourner le problème, MySQL et MariaDB accepte un wildcard (enfin le signe %) au niveau du nom de la base de donnée. La syntaxe a utiliser devient:

GRANT SELECT, INSERT, UPDATE, DELETE ON `blog.seo_%`.* TO 'seo_team'@'localhost';


Plutôt simple, mais il fallait le trouver, d'où ce post "pense bête".



Ajouter un commentaire