создание пользователя и отсутствие привилегий - PullRequest
4 голосов
/ 13 декабря 2011

Есть ли разница между

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 -состояния изменит пароль на 'пароль'
  • create user -состояния потерпит неудачу с ошибкой

1 Ответ

2 голосов
/ 13 декабря 2011

Все эти операторы делают то же самое - они создают нового пользователя без каких-либо привилегий. Первый и второй делают это с помощью оператора GRANT, где USAGE означает - НЕТ ПРИВИЛЕГИЙ.

Но между операторами GRANT + USAGE и CREATE USER есть разница:

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

выдаст ошибку в случае режима sql NO_AUTO_CREATE_USER.

Из справки - NO_AUTO_CREATE_USER Запретить GRANT автоматическое создание новых пользователей, если в противном случае это будет сделано, если только не указан непустой пароль.

Вы правы в отношении операторов GRANT и CREATE USER, когда пользователь существует; CREATE USER выдаст ошибку, но в этом случае, если вы хотите изменить пароль, вы можете использовать оператор SET PASSWORD , например, -

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