mysql crea usuario si no existe

94

Tengo una consulta para verificar la lista de usuarios de mysql para crear un nuevo usuario.

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

Pero obtengo este error:

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
fuente

Respuestas:

275

En 5.7.6 y superior, debería poder utilizar CREATE USER

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

Tenga en cuenta que el método 5.7.6 en realidad no otorga ningún permiso.


Si no está utilizando una versión que tenga esta capacidad (algo por debajo de 5.7.6), puede hacer lo siguiente:

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

Esto creará el usuario si no existe


Tenga en cuenta que si está en MySQL 8, el GRANT ALLmétodo no creará un usuario.

Ascherer
fuente
3
¿Esto cambia la contraseña si el usuario existiera y tuviera una contraseña diferente?
m3z
5
No importa - respondí mi propia pregunta - sí lo hace - pero no reemplaza al usuario si el Host es diferente
m3z
1
@ m3z técnicamente, si tiene un usuario que puede iniciar sesión en dos hosts diferentes, no es el mismo usuario. Pueden tener diferentes permisos, diferentes contraseñas y todo.
Ascherer
1
Sí @roundar, sin embargo eso deja agujeros de seguridad. Sea consciente.
Ascherer
1
Solo es inseguro si no especifica una contraseña @ B166ER, que .... duh.
Ascherer
-3

yo suelo

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

debe devolver 1 si existe o 0 si no

ingocnito
fuente
2
la pregunta no es cómo verificar, sino cómo crear
VladL