在MySQL中,授予一项普通权限后,如何撤销该权限?

5
使用标准的 SQL 语句 - 我已经在 PosgresQL 和 Oracle 中多次执行过此操作 - 我希望将 SELECT 权限授予用户 user1,但排除 schema1 中的所有表中的 secret 表。
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中设置正确的用户安全性是非常困难的。

1
你应该逐个表格地授予 SELECT 权限。 - Devart
你确定吗?ANSI标准说我所做的是正确的。 - cc young
1个回答

5

没有什么。MySQL不会将schema1.*通配符扩展为单个表,也不会存储“例外情况”。权限表存储授予的权限。因此,由于您实际上没有在schema1.users上授予任何权限,因此MySQL没有要撤销的内容。这只是关于MySQL如何处理权限的问题。


MySQL中的GRANT/REVOKE不符合ANSI标准? - cc young
1
@ccyoung 可能吧。我对标准不是非常熟悉。我知道MySQL有几个其他地方偏离标准,所以这并不奇怪。我建议向MySQL团队报告错误(可能已经存在),但也建议不要推迟重大人生决定,直到解决为止。我们谈论的是核心MySQL,它已经存在很多年了(在互联网时间中已经有数百年了)。它被改变的机会微乎其微。 - Mac

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