在MySQL中,在授予一般权限后撤销权限

使用标准SQL – 已在PosgresQL和Oracle中重复执行此操作 – 我希望为schema1中的所有表授予SELECT,但对user1的秘密除外

grant select on schema1.* to user1;
revoke select on schema1.users from user1;

收到错误:

ERROR 1147 (42000): There is no such grant defined for user 'user1' on host '%' on table 'secret'

我究竟做错了什么?

显然这是标准的MySQL行为!!

使用MySQL的应用程序更容易理解缺乏安全性的复杂性 – 在MySQL中设置正确的用户安全性是非常困难的.

最佳答案
没有. MySQL不会将schema1.*通配符扩展到各个表,也不存储“异常”.权限表存储授予的权限.因此,由于您实际上没有在schema1.users上授予任何内容,因此MySQL无法撤销.它归结为MySQL如何处理权限.

转载注明原文:在MySQL中,在授予一般权限后撤销权限 - 代码日志