2

我想授予用户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命令,所以我想尽量减少这些请求,因为它是一项高于标准的服务(这是他们对我的恩惠)。

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

4

5 回答 5

2

您应该了解更多关于数据库完整性的信息,只是关于外键

外键是 Dabase 关系系统保持完整性的方式,无需人为。来自mySql FK 文档

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

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

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

已编辑应有的 OP 评论

不可能对对象授予高级特权然后撤销低级特权,看看MySQL 中的选择性特权(并投票赞成答案)。

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

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

于 2012-01-26T08:21:07.103 回答
1

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

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

于 2012-01-26T09:20:31.397 回答
1

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

于 2012-01-26T08:28:58.710 回答
1

我想这可能有效:-

revoke update (id) on db.table from user;
于 2012-01-26T08:31:38.923 回答
0

这是不可能的 - 有关更多详细信息,请参阅此问题

于 2013-06-15T19:22:40.773 回答