2011-12-13 70 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');