【问题标题】:in MySQL, revoke a privilege after granting a general privilege在 MySQL 中,在授予一般权限后撤销权限
【发布时间】:2011-10-05 08:28:12
【问题描述】:

使用标准 SQL - 在 PosgresQL 和 Oracle 中反复执行此操作 - 我希望将 SELECT 授予 schema1 中的所有表 except secret 给 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 中设置正确的用户安全性非常困难。

【问题讨论】:

  • 您应该逐个表地为每个表授予 SELECT 权限。
  • 你确定吗? ANSI 标准说我所做的是正确的。

标签: mysql privileges


【解决方案1】:

什么都没有。 MySQL 不会将schema1.* 通配符扩展到各个表,也不会存储“异常”。权限表存储授予的权限。因此,由于您实际上没有在schema1.users 上授予任何东西,因此 MySQL 没有什么可以撤销的。它只是归结为 MySQL 如何处理权限。

【讨论】:

  • 所以 MySQL 中的 GRANT/REVOKE 不是 ANSI 标准?
  • @ccyoung 也许吧。我对这个标准不是很熟悉。我知道 MySQL 在其他几个地方存在偏差,所以我不会感到惊讶。我建议向 MySQL 团队提出一个错误(它可能已经存在),但也建议不要推迟重大的人生决定,直到它得到解决。我们谈论的是已经存在多年(互联网时代的几个世纪)的核心 MySQL。改变的可能性微乎其微。
猜你喜欢
  • 1970-01-01
  • 2016-10-07
  • 2015-01-13
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 2012-01-23
  • 2016-01-19
相关资源
最近更新 更多