仅当用户不存在时才创建MySQL用户

12

我想执行一个CREATE USER语句,但仅当该用户不存在时才执行。
如何最好地实现这个功能?


请参见https://dev59.com/jUnSa4cB1Zd3GeqPPZhS。 - Rudie
1
使用 GRANT 有什么问题? - Danosaure
2个回答

59
如果您创建一个用户,您需要同时创建一个授权。如果授权不存在,则隐式地创建一个用户(这就是为什么在创建授权时建议包括密码的原因,以防万一他们不存在)。请参见http://dev.mysql.com/doc/refman/5.1/en/grant.html
因此,一个选择是只创建带密码的授权,用户将被隐式创建。
例如:
GRANT ALL PRIVILEGES  ON db_name.* 
TO 'user'@'%' IDENTIFIED BY 'password' 
WITH GRANT OPTION;

简单直接的方法。 - ihavprobs
在我的情况下,我需要启用mode_no_auto_create_user http://dev.mysql.com/doc/refman/5.5/en/server-sql-mode.html#sqlmode_no_auto_create_user,这在旧版本中默认启用,但在新版本(5.5、5.6)中默认禁用。 - iMysak
当我执行此操作时,我收到了以下响应:0 行受影响,1 个警告:1287 使用 GRANT 创建新用户已被弃用,并将在未来版本中删除。请使用 CREATE USER 语句创建新用户。 - Leonmax
@Leonmax 是的 - 看起来这个语法最近已经被弃用,推荐使用新的语法 CREATE USER IF NOT EXISTS,请参考 http://dev.mysql.com/doc/refman/5.7/en/grant.html(弃用)和 http://dev.mysql.com/doc/refman/5.7/en/create-user.html(如果不存在)。 - Tim Diggins
谢谢@TimDiggins,我想可能是因为我的WorkBench过时了,它提示如果不存在则创建用户是语法错误... - Leonmax
显示剩余2条评论

2

您可以在默认的mysql数据库上从"user"表中进行选择。像这样:

select *
from user
where User = 'username'

如果没有返回结果,则创建一个新用户。

1
问题在于,当您发出“创建”命令时,用户可能已经被创建了。如果您正在创建一个突然变得流行的Web应用程序,则发生这种情况的风险远非微不足道。 - Confusion

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