Dans la première partie de cet article, nous avons vu comment effectuer la plupart des actions de base sous MySQL.
Aujourd’hui, voyons comment gérer les droits de nos bases de données. Comment ajouter des utilisateurs, comment les autoriser ou non à accéder aux données.
Comment créer un utilisateur Mysql sur un serveur dédié
Une commande à utiliser :
CREATE USER 'bertrand'@'localhost' IDENTIFIED BY 'monpass';
Ici nous créons l’utilisateur bertrand auquel on associe le mot de passe monpass . Jusque là rien de bien méchant…
Intéressons nous maintenant à la partie qui succède l’utilisateur dans notre commande, @’localhost’. Il s’agit d’un premier niveau de gestion des droits d’accès. @’localhost’ signifie que bertrand ne pourra se connecter que depuis ‘l’hôte local‘ ou ‘localhost‘, autrement dit le serveur qui héberge MySQL. Concrètement si l’on tente de se connecter depuis notre serveur :
mysql -p -u bertrand Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. [...]
Pas de problème ! Par contre si l’on fait la même chose depuis une machine distante (l’option -h permet simplement de renseigner l’adresse du serveur sur lequel on veut se connecter) :
mysql -p -u bertrand -h <adresse_ip_de_mon_vps> Enter password: ERROR 1045 (28000): Access denied for user 'bertrand'@'192.168.1.22' (using password: YES)
Alors l’accès nous est refusé. Nous verrons dans le dernière article consacré à MySQL comment ouvrir l’accès à la base depuis l’extérieur et ce que cela implique.
Comment donner des droits à un utilisateur Mysql
Voyons ce qui se passe si l’on se connecte avec l’utilisateur bertrand et que l’on tente d’accéder à une base quelconque :
mysql -p -u bertrand Enter password: [...] mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | +--------------------+ 1 row in set (0.01 sec)
Nous n’avons accès qu’à la base information_schema qui contient des informations sur les tables que vous allez créer, mais où sont les autres bases, notamment celle créées lors du première article, la base catalogue ?
Et bien l’utilisateur bertrand n’a tout simplement pas le droit d’y accéder. Remédions à cela grâce à la commande GRANT :
GRANT ALL PRIVILEGES ON catalogue.* TO 'bertrand'@'localhost'; FLUSH PRIVILEGES;
GRANT permet de donner des droits à un utilisateur. FLUSH PRIVILEGES permet d’informer MySQL que des modifications ont été faites au niveau des droits utilisateurs. Décortiquons un peu la commande exécutée :
- ALL PRIVILEGES : On donne tous les droits
- ON catalogue.* : Sur toutes les tables (.*) de la base catalogue
- TO ‘bertrand’@’localhost’ : Pour l’utilisateur bertrand autorisé à se connecter en local (localhost)
Pour lister les droits existants :
SHOW GRANTS FOR 'bertrand'@'localhost';
Si l’on désire retirer ces droits, il suffit d’utiliser la commande REVOKE. La syntaxe est la même que pour GRANT, TO devient simplement FROM :
REVOKE ALL PRIVILEGES ON catalogue.* FROM 'bertrand'@'localhost'; FLUSH PRIVILEGES;
Toutes ces commandes doivent être exécutées avec l’utilisateur MySQL ROOT. Ici notre utilisateur bertrand n’aura pas le droit de s’autoriser ou non à accéder à la base catalogue.
Pour aller plus loin :
Il est possible d’affiner la gestion des droits en spécifiant en plus d’une base une table et surtout de sélectionner les droits que l’on veut donner ou enlever. Voici la liste des droits que l’on peut manipuler :
- SELECT
- INSERT
- UPDATE
- DELETE
- CREATE
- DROP
- GRANT
- REFERENCES
- INDEX
- ALTER
Nous pouvons donc donner les droits SELECT et UPDATE à l’utilisateur bertrand sur la table produits de la base catalogue :
GRANT SELECT,UPDATE ON catalogue.produits TO 'bertrand'@'localhost'; FLUSH PRIVILEGES;
Ou lui retirer :
REVOKE SELECT,UPDATE ON catalogue.produits FROM 'bertrand'@'localhost'; FLUSH PRIVILEGES;
Vous voulez en savoir plus ? Visitez notre blog régulièrement, vous y trouverez chaque jour un nouvel article publié !