如何在MySQL中撤销新用户对*.*的访问权限?

9
在mysql 5.6命令行客户端(以root身份登录)中,我使用以下命令创建了一个用户:
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';

使用以下命令授予权限:

GRANT ALL PRIVILEGES ON databasename.* TO 'admin'@'localhost';

使用以下代码检查权限:

SHOW GRANTS FOR 'admin'@'localhost';

上面分配的数据库的权限正在显示,同时还有一个权限:

GRANT USAGE ON *.* TO 'admin'@'localhost' IDENTIFIED BY PASSWORD...

我试图使用以下命令撤销权限:

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

但它不会移除对*.*的使用。

如何在MySQL中撤销新用户对*.*的访问权限?


我从不通过命令行创建用户,但我想GRANT USAGE ON *.*的对应项应该是REVOKE USAGE ON *.* :-? 你忘记了ON *.*这一部分。 - Álvaro González
2个回答

12

如果您想撤销用户的USAGE权限,实际上需要先删除该用户。在MySQL中,USAGE是全局级别的特权,表示“无权限”。

USAGE特权指定符代表“无权限”。它与GRANT在全局级别一起使用,用于修改帐户属性(如资源限制或SSL特性),而不影响现有的帐户权限。

以上内容来自MySQL文档提供的特权

因此,如果您想要删除USAGE特权,只需使用以下命令:

DROP USER 'admin'@'localhost';

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION ON *.* FROM 'admin'@'localhost'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON *.* FROM 'admin'@'localhost'' at line 1 - user1063287
抱歉,我在一开始误读了您的问题。请查看更新后的答案。 - Rolando Isidoro

4

可以使用以下方法在MySQL中从用户中移除USAGE授权。

SHOW GRANTS FOR 'user'@'%';

如果您看到这个命令的输出
GRANT USAGE ON `<database>`.* TO 'user'@'%' WITH GRANT OPTION

然后使用revoke with flush privileges来删除它。

REVOKE ALL PRIVILEGES ON `<database>`.* from 'user'@'%';

FLUSH PRIVILEGES;

REVOKE GRANT OPTION ON `<database>`.* from 'user'@'%';

FLUSH PRIVILEGES;

使用此命令验证用户特权的更新。
SHOW GRANTS FOR 'user'@'%';

你应该对代码进行格式化以使其更易读。https://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks 是一个很好的关于正确代码格式化的资源。 - Dan

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