使用标准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如何处理权限.