我想授予用户update
权限以更新除一个之外的所有列 - 在我的情况下为Id(更改Id可能会使数据,现有URL等混乱) - 外键不解决方案)。是否可以在没有列出所有其他列的mysql中?例如。莫名其妙地说:
grant update on db.table to user;
NOT grant update id on db.table to user;
或类似的东西?
我不想列出所有列的原因:
它更健壮 - 我经常在以后为表添加一些列,我可能会忘记我还必须更新此规则,
我没有grant
权限,所以我必须要求我的托管服务提供商运行每个grant
命令,所以我想最小化这些请求,因为它是一个高于标准的服务(这是他们的恩典)。
特别是对于mysql,但我也对gereric sql解决方案感兴趣。
答案 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。