Je vois souvent dans de nombreux tutoriels MySQL que les utilisateurs utilisent la commande IDENTIFIED BY 'password'
lors de la création de l’utilisateur et lors de l’octroi de privilèges.
Par exemple:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost' IDENTIFIED BY 'password';
J'ai essayé d'utiliser GRANT
sans IDENTIFIED BY
et cela fonctionne.
Quelqu'un peut-il m'expliquer pourquoi il est utilisé deux fois? Pourrait-il y avoir un autre mot de passe pour des privilèges spécifiques?
GRANT
est destiné à ajouter des privilèges aux utilisateurs. De manière confuse, il a également la possibilité de créer des utilisateurs et de modifier leurs mots de passe. Cette fonctionnalité est obsolète et ne doit pas être utilisée.
Si vous utilisez GRANT
avec IDENTIFIED
, vous pouvez modifier le mot de passe de l'utilisateur:
Lorsque IDENTIFIED est présent et que vous disposez du privilège d'octroi global (GRANT OPTION), tout mot de passe spécifié devient le nouveau mot de passe du compte, même si le compte existe déjà et qu'il en possède déjà un. Sans IDENTIFIED, le mot de passe du compte reste inchangé.
Depuis MySQL 5.7.2, si le compte existe déjà, IDENTIFIED WITH est interdit car il est uniquement destiné à être utilisé lors de la création de nouveaux comptes.
De plus, GRANT
peut créer l'utilisateur s'il n'existe pas:
Si un compte nommé dans une instruction GRANT n'existe pas, l'action entreprise dépend du mode SQL NO_AUTO_CREATE_USER:
- Si NO_AUTO_CREATE_USER n'est pas activé, GRANT crée le compte. Ceci est très dangereux sauf si vous spécifiez un mot de passe non vide à l'aide de IDENTIFIED BY.
- Si NO_AUTO_CREATE_USER est activé, GRANT échoue et ne crée pas le compte, sauf si vous spécifiez un mot de passe non vide à l'aide de IDENTIFIED BY ou nommez un plug-in d'authentification à l'aide de IDENTIFIED WITH.
L'utilisation de GRANT pour définir les caractéristiques d'authentification d'un compte est obsolète à partir de MySQL 5.7.6. À la place, établissez ou modifiez les caractéristiques d'authentification à l'aide de CREATE USER ou ALTER USER. Cette fonctionnalité GRANT sera supprimée dans une prochaine version de MySQL.
Voir https://dev.mysql.com/doc/refman/5.7/en/grant.html
En résumé, utilisez CREATE
pour créer un utilisateur, puis GRANT
pour ajouter des privilèges:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost';
En tant que utilisateur auto-créé, la ligne ci-dessous est suffisante pour les droits.
GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost' IDENTIFIED BY 'password';
Remarque: Identify représente pour votre mot de passe le mot de passe que vous souhaitez enregistrer pour la vérification des informations d'identification.
C'est juste une mesure de sécurité supplémentaire. Vous pouvez avoir des mots de passe différents pour le même utilisateur sur des serveurs différents, par exemple dans un environnement hôte partagé. S'il s'agit de votre propre serveur et que vous et vos collègues êtes les seuls à l'utiliser, vous n'avez pas besoin d'identifier les utilisateurs auxquels vous accordez des privilèges.
Si vous identifiez des utilisateurs, seul le mot de passe que vous spécifiez peut être utilisé avec cet utilisateur pour exécuter ces privilèges.