Gérer les privilèges de vos utilisateurs MySQL
Introduction
Vous trouvez que certains utilisateurs de votre serveur MySQL possèdent trop de droit d’actions et donc, vous voudriez les limiter un peu ? Au contraire, vous voudriez leur en fournir plus ? Ce billet peut vous aidez à le faire. Pour cela, nous allons utiliser la clause SQL « GRANT ». Celle-ci permet d’attribuer ou de révoquer des permissions à un ou plusieurs utilisateurs, et cela, sur un ou plusieurs éléments de votre base de données.
Utilisation des « GRANT »
La clause SQL « GRANT » vous donne la possibilité d’attribuer/révoquer soit des « System Privilèges », soit des « Objects Privileges ».
Gérer les « System Privilèges » :
Derrière cette appellation se cache un principe simple, les privilèges systèmes permettent de gérer la structure de nos bases de données. En effet, c’est grâce à ces privilèges que nous allons ajouter des tables, créer des index ou encore, créer des vues. Pour ce qui est du contenu de nos bases, ce sont les privilèges objets qui nous intéresseront.
Attention, donner tous les privilèges systèmes d’une base de données à un utilisateur peut s’avérer très dangereux ! Plus un utilisateur est en possession d’un grand nombre de privilèges systèmes, plus il possède de pouvoir et s’il est malintentionné, la sécurité du serveur peut être facilement mis à mal. Il est donc indispensable de bien choisir les droits que vous allez associer à vos utilisateurs.
N’oubliez pas qu’un grand pouvoir implique de grandes responsabilités et cela, même dans le domaine des Bases de Données.
Voila la syntaxe de base pour attribuer un privilège système :
GRANT privilège(s)_système_attribué(s)
TO utilisateur(s)_visé(s)
(WITH ADMIN OPTION)
L’option WITH ADMIN OPTION n’est pas obligatoire. Si elle est attribuée à un utilisateur, celui-ci pourra attribuer/révoquer ces propres privilèges systèmes sur un nouvel utilisateur.
Voici une liste (non-exhaustive) des différents privilèges systèmes existants :
- CREATE SESSION : Permet à un utilisateur de pouvoir créer une session avec la base de données.
- CREATE TABLE : Permet à l’utilisateur de créer des tables.
- ALTER DATABASE : Permet à l’utilisateur de modifier la structure d’une base de données.
- CREATE VIEW : Permet à l’utilisateur de créer des vues.
- ALL PRIVILEGES : Donne à l’utilisateur tous les privilèges systèmes existants (à utiliser avec modération!).
Pour exemple, si nous voulons donner la possibilité à notre utilisateur lolokai de se connecter à des bases de données et de créer des vues, nous allons entré cette requête SQL dans notre console MySQL :
GRANT create session, create view
TO lolokai
La syntaxe pour révoquer le(s) privilège(s) système d’un utilisateur est la suivante :
REVOKE privilège(s)_système_à_supprimé(s)
FROM utilisateur(s)_visé(s)
Attention, pour pouvoir le faire, il faut que vous possédiez l’option WITH ADMIN OPTION et que vous vouliez supprimer un privilège système que vous avez vous même attribué.
Gérer les « Objects Privileges » :
Comme nous l’avons vu précédemment, contrairement aux « System Privilèges », les privilèges objets permettent de donner des droits aux utilisateurs pour modifier le contenu (les données) de nos bases de données.
La syntaxe de base pour attribuer un privilège objet est :
GRANT privilège(s)_objet_attribué(s)
ON table_cible
TO utilisateur(s)_cible(s)
(WITH GRANT OPTION)
Tout comme pout l’option WITH ADMIN OPTION, l’option WITH GRANT OPTION est optionnelle et permet à un utilisateur d’attribuer/révoquer un privilège à un autre utilisateur.
Voici quelques privilèges objet que vous pouvez attribuer (liste non-exhaustive) :
- INSERT : Permet d’insérer une nouvelle ligne dans une table.
- SELECT : Permet d’interroger une table.
- DELETE : Permet de supprimer des lignes d’une table.
- UPDATE : Permet de mettre à jour les lignes d’une table.
- ALTER : Permet de modifier la structure d’une table.
Si nous voulons attribuer à l’utilisateur lolokai la possibilité d’interroger et de supprimer des lignes de la table Alpha, voila la requête à utiliser :
GRANT select, delete
ON alpha
FROM lolokai
La syntaxe pour révoquer le(s) privilège(s) objet d’un utilisateur est la suivante :
REVOKE privilège(s)_objet_à_supprimé(s)
ON table_cible
FROM utilisateur(s)_cible(s)
Attention, pour pouvoir le faire, il faut que vous possédiez l’option WITH GRANT OPTION et que vous vouliez supprimer un privilège objet que vous avez vous même attribué. Si vous supprimez le privilège de l’un de vos utilisateurs, tous les utilisateurs-enfants de celui-ci perdront aussi ce droit.
Pour exemple, imaginons que l’utilisateur lolokai possède l’option WITH GRANT OPTION et qu’il donne un privilège objet à l’utilisateur site. Ce même privilège est transmis de l’utilisateur site à l’utilisateur blog. Si dans un moment de folie extrême, l’utilisateur lolokai révoque le privilège à l’utilisateur site, l’utilisateur blog perdra aussi ce droit.
Ce phénomène est appelé « suppression en cascade ».
Conclusion
Cet article est maintenant terminé. Nous avons vu comment utiliser au mieux la clause SQL « GRANT » : clause qui permet d’attribuer ou de révoquer des privilèges système ou objet à un utilisateur.
Utilisez-vous auter chose que l’outil en ligne de commande pour attribuer des droits à vos utilisateurs ?
Si vous avez la moindre question ou remarque, n’hésiter pas. Je serai ravi d’y répondre.olivier.cadet