web-dev-qa-db-fra.com

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

J'ai une requête pour vérifier la liste d'utilisateurs de 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 je reçois 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
84
sweb

Dans les versions 5.7.6 et supérieures, 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 aucune autorisation.


Si vous n'utilisez pas de version dotée de cette fonctionnalité (inférieure à 5.7.6), vous pouvez procéder comme 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, le GRANT ALL La méthode ne créera pas d'utilisateur.

255
Ascherer