mysql utwórz użytkownika, jeśli nie istnieje

95

Mam zapytanie, aby sprawdzić listę użytkowników mysql pod kątem utworzenia nowego użytkownika.

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

Ale pojawia się ten błąd:

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
źródło

Odpowiedzi:

280

W wersji 5.7.6 i nowszych powinieneś móc używać CREATE USER

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

Zauważ, że metoda 5.7.6 w rzeczywistości nie daje żadnych uprawnień.


Jeśli nie używasz wersji, która ma taką możliwość (coś poniżej 5.7.6), możesz wykonać następujące czynności:

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

Spowoduje to utworzenie użytkownika, jeśli nie istnieje


Uwaga, jeśli korzystasz z MySQL 8, GRANT ALLmetoda nie utworzy użytkownika.

Ascherer
źródło
3
Czy powoduje to zmianę hasła, jeśli użytkownik istniał i miał inne hasło?
m3z
5
Nevermind - odpowiedziałem na moje własne pytanie - tak, ale nie zastępuje użytkownika, jeśli Host jest inny
m3z
1
@ m3z technicznie rzecz biorąc, jeśli masz użytkownika, który może zalogować się na dwóch różnych hostach, nie jest to ten sam użytkownik. Mogą mieć różne uprawnienia, różne hasła i wszystko.
Ascherer
1
Tak, @roundar, jednak pozostawia to luki w zabezpieczeniach. Być świadomym.
Ascherer,
1
Jest to niebezpieczne tylko wtedy, gdy nie określisz hasła @ B166ER, które ... duh.
Ascherer
-3

używam

SELECT EXISTS (SELECT DISTINCT userFROM mysql. userWHERE user= "nazwa użytkownika") jako is_user

powinien zwrócić 1, jeśli istnieje, lub 0, jeśli nie

ingocnito
źródło
2
nie chodzi o to, jak sprawdzić, ale jak stworzyć
VladL