如何为除一个列之外的所有列授予权限?

时间:2012-01-26 08:16:15

标签: mysql sql permissions grant

我想授予用户update权限以更新除一个之外的所有列 - 在我的情况下为Id(更改Id可能会使数据,现有URL等混乱) - 外键解决方案)。是否可以在没有列出所有其他列的mysql中?例如。莫名其妙地说:

grant update on db.table to user;
NOT grant update id on db.table to user;

或类似的东西?

我不想列出所有列的原因:

  1. 它更健壮 - 我经常在以后为表添加一些列,我可能会忘记我还必须更新此规则,

  2. 我没有grant权限,所以我必须要求我的托管服务提供商运行每个grant命令,所以我想最小化这些请求,因为它是一个高于标准的服务(这是他们的恩典)。

  3. 特别是对于mysql,但我也对gereric sql解决方案感兴趣。

5 个答案:

答案 0 :(得分:2)

您应该了解有关数据库完整性的更多信息,只需 foreign keys

外键是Dabase Relational系统保持完整性的方式。来自mySql FK documentation

  

“RESTRICT:拒绝父项的删除或更新操作   表“。

使用外键避免损坏具有一些优点

  • 内置功能:性能优于触发器或其他系统。
  • 这是执行此操作的标准方法:其他开发人员可以了解您在做什么。
  • 报告解决方案和其他应用程序可以了解关系船数据库字典。

已编辑OP评论

无法对对象授予高级别权限,然后撤销低级别权限,请查看selective privileges in MySQL(并对答案进行投票)。

这意味着您应该为表授予插入权限,在所有字段上选择权限,并仅在非id字段上进行更新。您可以编写一个脚本来为您执行此操作。

我希望这最终能回答你的问题。

答案 1 :(得分:1)

AFAIK是不可能的,如果你害怕数据库的一致性,你应该使用外键约束来保持数据库的一致性。

答案 2 :(得分:1)

我想这可能有用: -

revoke update (id) on db.table from user;

答案 3 :(得分:1)

创建对数据执行(选择,插入,更新,删除)操作的存储过程。

仅授予用户访问程序的权限,而不是表格。

答案 4 :(得分:0)

这是不可能的 - 有关详细信息,请参阅this question