MySQL授权功能无法正常工作MySQL WorkBench 8.0

t9aqgxwy  于 2023-05-16  发布在  Mysql
关注(0)|答案(1)|浏览(145)

我为用户John定义了赠款:

grant select on * to JOHN@localhost;

在跑步时:

show grants for JOHN@localhost;

我得到:

GRANT SELECT ON *.* TO `JOHN`@`localhost`

但当我尝试从特定表中删除grant时,actor:

revoke select on sakila.actor from JOHN@localhost;

它说:
错误代码:1147没有为主机“localhost”上的用户“JOHN”定义表“actor”上的此类授权
会出什么差错呢?
我试图在sakila.*上单独给予选择赠款,但它仍然无法识别John在actor表上有授权。只有当我显式地grant select to JOHN for sakila.actor时,它才标识它。

xtupzzrd

xtupzzrd1#

因为,在表sakila.actor上没有给予用户JOHN@localhost的特定授权。所给予的许可是在*上-即所有数据库所有表。
想想这个REVOKE会做什么,如果它被支持的话。
它必须从*.*中减去sakila.actor。这意味着,MySQL必须为该用户添加所有不同的DB.*赠款,然后为sakila的所有表添加,除了actor
MySQL做不到的
MySQL只会撤销显式给出的权限。
如果在*.*上给予了权限,则只能撤销这些权限。
如果您在sakila.actor上给予显式权限,则只能撤销该权限。如果您在sakila.*上给予显式权限,则只能撤销该权限,依此类推...
如果你在sakila.**.*上给予权限,然后试图撤销其中一个子集的权限,MySQL不会这样做,因为如果它这样做了,它将不得不实际承担其他所有内容的权限。

相关问题