MySQL“mysql there is no such grant defined for user”意为“MySQL中用户没有定义此授权”。

10
这个错误发生在我给一个新创建的root账户授予所有权限时。
产生问题的步骤:
CREATE USER 'root'@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
SHOW GRANTS for 'root'@'localhost';

在执行"show grants"后,我收到了错误消息"mysql there is no such grant defined for user 'root' on host 'localhost'"。在执行前三个命令时没有出现任何错误。新用户已经成功创建。

我该如何解决这个问题?

更多信息: 我在我的MacOS笔记本电脑(OSX 10.10.5)上运行MySQL 5.7。


我在OSX 10.11.4上的MySQL 5.6.25上测试了这段代码,它可以正常工作(不适用于'root',因为该账户已经存在)。 - M4tini
我在Ubuntu的5.7.12上测试了这段代码,它可以正常工作。 - Dan-Dev
3个回答

7

您发布的代码没有问题,但是可以尝试使用通配符符号%,例如:

SHOW GRANTS for 'root'@'%';

(或者)

作为替代方案,使用创建的用户'root'@'localhost'登录,只需使用SHOW GRANTS命令即可。请参阅文档


感谢您的回复。然而,由于在DB服务器中不存在'root'@'%',因此当使用"SHOW GRANTS for 'root'@'%'"时我仍然遇到了相同的错误。此外,在输入我列出的那些命令之后,创建的用户'root'@'localhost'不再具有任何权限,甚至没有"Usage"权限。因此,我甚至无法使用该帐户登录。 - eaglesky

1
我认为mysql不允许您创建另一个root帐户。因此,创建操作会导致错误。
CREATE USER 'root'@'localhost';

ERROR 1396 (HY000): Operation CREATE USER failed for 'root'@'localhost'

你应该在用户表中检查是否存在根账户,你会发现通配符是“%”,这意味着你不需要创建本地主机的根用户。
select * from user where user = 'root';

要求在根本地主机上显示授权应该是有效的,并且对我来说也有效。
show grants for 'root'@'localhost';

实际上,在我输入所有这些命令之前,我已经删除了用户'root'@'%'。用户'root'@'localhost'确实成功创建。在更改其权限之前,我能够使用该帐户登录。 - eaglesky

0

步骤1: sudo mysql -u root -p

步骤2: REVOKE ALL PRIVILEGES, GRANT OPTION FROM '用户名'@'localhost';

例如: REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'admin'@'localhost';

步骤3: FLUSH PRIVILEGES;

我认为这会起作用。


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