41

我正在尝试执行此查询-

DROP DATABASE IF EXISTS `hotel`;

GRANT USAGE ON *.* TO 'user'@'localhost';
DROP USER 'user'@'localhost';

CREATE USER user@localhost IDENTIFIED BY 'user';

CREATE DATABASE `hotel`
    CHARACTER SET 'utf8'
    COLLATE 'utf8_general_ci';

GRANT USAGE ON *.* to 'user'@'localhost' identified by 'user';

但我总是出错

GRANT USAGE ON *.* TO 'user'@'localhost' Error Code: 1133. Can't find any matching row in the user table    0.000 sec

我认为Grant usage如果用户不存在则创建新用户。怎么了?

4

4 回答 4

109

我遇到了同样的错误

grant all on newdb.* to newuser@localhost;

用“识别者”解决:

grant all on newdb.* to newuser@localhost  identified by 'password';
于 2014-09-12T17:50:44.337 回答
21

我认为如果用户不存在,授予使用会创建新用户。怎么了?

在以前版本的 mysql 中是这样的。如果您想以新方式进行操作,请参阅此答案。如果您想修改系统设置以使其像以前一样工作,请继续阅读。但是,请注意,这是一种已弃用的行为,因为链接的文档指出

NO_AUTO_CREATE_USER 将在未来的 MySQL 版本中删除,此时其效果将始终启用(GRANT 不会创建帐户)

文档中,您可以设置一个选项以允许 mysql 在用户不存在时创建用户。

NO_AUTO_CREATE_USER

防止 GRANT 语句自动创建新用户,否则它会这样做,除非还指定了非空密码。

设置选项:

您可以在运行时更改 SQL 模式,方法是使用 SET [GLOBAL|SESSION] sql_mode='modes' 语句设置 sql_mode 系统值。

于 2013-07-11T17:36:18.870 回答
20

GRANT命令不再自动创建用户。

不要更改NO_AUTO_CREATE_USER变量,而是首先使用CREATE USER命令创建用户,然后授予权限:

DROP USER IF EXISTS 'user'@'localhost';
CREATE USER 'user'@'localhost' IDENTIFIED BY 'pass';
GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'localhost';
于 2019-01-07T10:47:51.350 回答
2

尝试添加到脚本的末尾:

FLUSH PRIVILEGES;
于 2019-04-18T19:33:02.210 回答