mysql crée un utilisateur s'il n'existe pas


94

J'ai une requête pour vérifier la liste des utilisateurs mysql pour créer un nouvel utilisateur.

IF (SELECT EXISTS(SELECT 1 FROM `mysql`.`user` WHERE `user` = '{{ title }}')) = 0 THEN
    CREATE USER '{{ title }}'@'localhost' IDENTIFIED BY '{{ password }}'
END IF;

Mais j'obtiens cette erreur:

ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF (SELECT EXISTS(SELECT 1 FROM `mysql`.`user` WHERE `user` = 'cms_localhost')) = 0 ' at line 1

Réponses:


275

Dans 5.7.6 et au-dessus, vous devriez pouvoir utiliser CREATE USER

CREATE USER IF NOT EXISTS 'user'@'localhost' IDENTIFIED BY 'password';

Notez que la méthode 5.7.6 n'accorde en fait aucune autorisation.


Si vous n'utilisez pas une version qui a cette capacité (quelque chose en dessous de 5.7.6), vous pouvez faire ce qui suit:

GRANT ALL ON `database`.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Cela créera l'utilisateur s'il n'existe pas


Notez que si vous êtes sur MySQL 8, la GRANT ALLméthode ne créera pas d'utilisateur.


3
Cela change-t-il le mot de passe si l'utilisateur existait et avait un mot de passe différent?
m3z

5
Nevermind - a répondu à ma propre question - oui c'est le cas - mais cela ne remplace pas l'utilisateur si l'hôte est différent
m3z

1
@ m3z techniquement, si vous avez un utilisateur qui peut se connecter sur deux hôtes différents, ils ne sont pas le même utilisateur. Ils peuvent avoir différentes autorisations, différents mots de passe et tout.
Ascherer

1
Oui @roundar, mais cela laisse des failles de sécurité. Être conscient.
Ascherer

1
Ce n'est pas sûr si vous ne spécifiez pas de mot de passe @ B166ER, qui .... duh.
Ascherer

-3

j'utilise

SELECT EXISTS (SELECT DISTINCT userFROM mysql. userWHERE user= "username") comme is_user

devrait retourner 1 s'il existe ou 0 si ce n'est pas le cas


2
la question n'est pas de savoir comment vérifier, mais comment créer
VladL
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.