mysql створити користувача, якщо не існує


94

У мене є запит, щоб перевірити список користувачів mysql для створення нового користувача.

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

Але я отримую цю помилку:

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

Відповіді:


275

У версії 5.7.6 і вище ви повинні мати можливість використовувати CREATE USER

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

Зауважте, що метод 5.7.6 насправді не дає жодних дозволів.


Якщо ви не використовуєте версію, яка має таку можливість (щось нижче 5.7.6), ви можете зробити наступне:

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

Це створить користувача, якщо його не існує


Зауважте, якщо ви працюєте на MySQL 8, GRANT ALLметод не створить користувача.


3
Чи змінює це пароль, якщо користувач існував і мав інший пароль?
m3z

5
Nevermind - відповів на моє власне запитання - так, але це не змінює користувача, якщо хост інший
m3z

1
@ m3z технічно, якщо у вас є користувач, який може увійти на двох різних хостах, вони не є тим самим користувачем. Вони можуть мати різні дозволи, різні паролі та все.
Ascherer

1
Так @roundar, однак це залишає дірки в безпеці. Бережись.
Ascherer

1
Це лише небезпечно, якщо ви не вказали пароль @ B166ER, який .... duh.
Ascherer

-3

я використовую

ВИБІР ІСНУЄ (ВИБЕРІТЬ ВИЗНАЧЕННЯ userВІД mysql. userWHERE user= "ім'я користувача") як is_user

повинен повернути 1, якщо він існує, або 0, якщо його немає


2
питання не в тому, як перевірити, а в тому, як створити
VladL
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.