2011-12-13 73 views
4

有没有假设用户已经不存在创建用户并授予任何权限

grant usage on databasename.* to 'username'@'localhost' identified by 'password' 

grant usage on *.* to 'username'@'localhost' identified by 'password' 

create user 'username'@'localhost' identified by 'password' 

之间的差异?我的理解是,每一个都会为用户创建一个密码,并且不会授予用户特权。

如果用户不存在,那么我期待有一些差异:

  • grant -statements将密码更改为“密码”
  • create user语句来将失败,错误

回答

2

所有这些语句都是这样做的 - 它们创建没有任何特权的新用户。 第一次和第二次使用GRANT语句,其中使用意味着 - 没有特权。

但有GRANT +使用和CREATE USER语句之间的差异:

grant usage on *.* to 'username1'@'localhost'; -- when password is not specified 

将在NO_AUTO_CREATE_USER SQL模式的情况下,抛出一个错误。

从引用 - NO_AUTO_CREATE_USER阻止GRANT自动创建新用户,除非还指定了非空密码。

当用户存在时,您对GRANT和CREATE USER语句是正确的; CREATE USER将发出错误信息,但在这种情况下,如果您想更改密码,则可以使用SET PASSWORD语句,例如, -

SET PASSWORD FOR 'username'@'localhost' = PASSWORD('new password');