MySQL创建用户如果不存在

117

我有一个查询来检查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
2个回答

319
在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方法将不会创建用户。


4
如果该用户已存在且有不同的密码,那么这会改变密码吗? - m3z
5
没关系 - 我自己回答了我的问题 - 是的,它可以 - 但如果主机不同,它不能替代用户。 - m3z
1
从技术上讲,如果您有一个用户可以在两个不同的主机上登录,则他们不是同一个用户。他们可以拥有不同的权限、不同的密码和其他一切。 - Ascherer
1
使用 'user'@'%' 来为所有主机创建此用户。 - roundar
1
只有当您不指定密码时,它才是不安全的@B166ER,这很明显。 - Ascherer
显示剩余10条评论

-4

我使用

SELECT EXISTS (SELECT DISTINCT user FROM mysql.user WHERE user = "username") as is_user

如果存在则返回1,否则返回0


2
问题不在于如何检查,而在于如何创建。 - VladL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接