无法删除 mysql.user 的权限

use*_*997 3 mysql permissions

我正在尝试删除 mysql 用户的权限,以便无法删除特定的数据库。但是如果我运行这个命令:

revoke all privileges on test.* from 'demo'@'localhost';
Run Code Online (Sandbox Code Playgroud)

或这个

revoke drop on test.* from 'demo'@'localhost';
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

错误 1141 (42000):没有为主机“localhost”上的用户“demo”定义此类授权

test是数据库的名称。

演示用户的权限是这样的:

mysql> show grants for demo@'localhost';
+----------------------------------------------------------------------------------------------------------------------+
| Grants for demo@localhost |
+----------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'demo'@'localhost' IDENTIFIED BY PASSWORD '*C142FB215B6E05B7C134B1A653AD4B455157FD79' |
Run Code Online (Sandbox Code Playgroud)

此外,当我以用户 demo 登录时,我可以删除数据库测试。

当我尝试从用户演示中删除权限时,为什么会出现此错误?

Rol*_*DBA 5

这有一个很大的原因。MySQL 中有四个级别的授权

  • 全局(存储在mysql.user
  • 数据库(存储在mysql.db
  • 表(存储在mysql.tables_priv
  • 列(存储在mysql.columns_priv

当你跑

show grants for demo@'localhost';
Run Code Online (Sandbox Code Playgroud)

mysqld 阅读了赠款并看到demo@'localhost'mysql.user

当你跑

revoke all privileges on test.* from 'demo'@'localhost';
Run Code Online (Sandbox Code Playgroud)

mysqld 寻找补助金,不是在mysql.user,而是mysql.db

您不能从具有全局授权的用户那里提取对单个数据库的授权。

  • 我不明白一些事情:如果我创建一个用户并全局授予他权限,那么我无法撤销此全局权限,我必须删除该用户,然后再次创建它并授予他权限,而不是全局权限,而仅授予特定数据库的权限,如果我不希望他获得全球许可。那是对的吗? (2认同)