web-dev-qa-db-fra.com

"IDENTIFIÉ PAR 'mot de passe'" dans MySQL

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?

15
user3461823

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'; 
22
SystemParadox

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.

3
Zafar Malik

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.

0
Robbie Averill