2012-11-13 12 views
60

Ich habe eine Abfrage zu überprüfen mysql Benutzer Liste für neue Benutzer erstellen.mysql Benutzer erstellen, wenn nicht existiert

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

Aber ich bekomme diese Fehlermeldung:

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 

Antwort

207

In 5.7.6 und höher, sollten Sie in der Lage sein CREATE USER

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

Hinweis zu verwenden, dass die 5.7.6 Verfahren erteilt keine tatsächlich alle Berechtigungen.


Wenn Sie nicht eine Version, die diese Fähigkeit hat, mit (etwas unter 5.7.6), können Sie wie folgt vorgehen:

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

Diese den Benutzer zu erstellen, wenn es nicht der Fall ist existieren

+6

Ich denke, das sollte wirklich die akzeptierte Antwort sein. – GoinAum

+1

Ändert dies das Passwort, wenn der Benutzer existiert und ein anderes Passwort hat? – m3z

+2

Nevermind - beantwortete meine eigene Frage - ja, es tut - aber es ersetzt den Benutzer nicht, wenn der Host anders ist – m3z

-4

I

SELECT EXISTS (SELECT DISTINCT user VON mysql verwenden. user WHERE user = „usernam e ") als is_user

sollte 1 zurückgeben, wenn vorhanden oder 0, wenn es nicht

+2

Die Frage geht nicht darum, wie man prüft, sondern wie man erstellt – VladL

Verwandte Themen