mysql criar usuário se não existir

94

Eu tenho uma consulta para verificar a lista de usuários do mysql para criar um novo usuário.

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

Mas eu recebo este erro:

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
sweb
fonte

Respostas:

275

Em 5.7.6 e acima, você deve ser capaz de usar CREATE USER

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

Observe que o método 5.7.6 não concede nenhuma permissão.


Se não estiver usando uma versão com esse recurso (algo abaixo de 5.7.6), você pode fazer o seguinte:

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

Isso criará o usuário se ele não existir


Observe, se você estiver no MySQL 8, o GRANT ALLmétodo não criará um usuário.

Ascherer
fonte
3
Isso altera a senha se o usuário existisse e tivesse uma senha diferente?
m3z
5
Deixa pra lá
1
@ m3z tecnicamente, se você tem um usuário que pode fazer login em dois hosts diferentes, eles não são o mesmo usuário. Eles podem ter permissões diferentes, senhas diferentes e tudo mais.
Ascherer
1
Sim @roundar, no entanto, isso deixa brechas de segurança. Estar ciente.
Ascherer
1
Só é inseguro se você não especificar uma senha @ B166ER, que .... duh.
Ascherer
-3

eu uso

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

deve retornar 1 se existir ou 0 se não

ingocnito
fonte
2
a questão não é sobre como verificar, mas como criar
VladL