mysql crea utente se non esiste


94

Ho una domanda per controllare l'elenco degli utenti di mysql per creare un nuovo utente.

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

Ma ottengo questo errore:

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

Risposte:


275

In 5.7.6 e versioni successive, dovresti essere in grado di usare CREATE USER

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

Tieni presente che il metodo 5.7.6 in realtà non concede alcuna autorizzazione.


Se non stai utilizzando una versione che ha questa capacità (qualcosa sotto 5.7.6), puoi fare quanto segue:

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

Questo creerà l'utente se non esiste


Nota, se sei su MySQL 8, il GRANT ALLmetodo non creerà un utente.


3
Questo cambia la password se l'utente esisteva e aveva una password diversa?
m3z

5
Non importa - ha risposto alla mia stessa domanda - sì, lo fa - ma non sostituisce l'utente se l'host è diverso
m3z

1
@ m3z tecnicamente, se hai un utente che può accedere a due host diversi, non sono lo stesso utente. Possono avere autorizzazioni diverse, password diverse e tutto il resto.
Ascherer

1
Sì @roundar, tuttavia questo lascia buchi di sicurezza. Sii consapevole.
Ascherer

1
È solo insicuro se non si specifica una password @ B166ER, che .... duh.
Ascherer

-3

Io uso

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

dovrebbe restituire 1 se esiste o 0 se non lo fa


2
la domanda non riguarda come controllare, ma come creare
VladL
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.