mysql - 如何授予除一列以外的所有列的权限?

标签 mysql sql permissions sql-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 命令,所以我想尽可能减少这些请求是一种超标准的服务(这是他们对我的恩典)。

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

最佳答案

你应该了解更多关于数据库完整性的知识,就 foreign keys .

外键是 Dabase 关系系统保持完整性而无需人工操作的方式。来自 mySql FK documentation :

"RESTRICT: Rejects the delete or update operation for the parent table."

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

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

根据 OP 评论编辑

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

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

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

关于mysql - 如何授予除一列以外的所有列的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9015371/

相关文章:

mysql - 如何优化此 MySQL 报告查询的时间范围和聚合?

php - Yii框架未定义偏移: 0

mysql - 什么是 utf8mb4 而不是 MySQL 的 utf8?

php - 如果执行 mysql 更新语句则返回 true,如果没有更新行则返回 false

powershell - 在 PowerShell 中执行 icacls 以授予对域计算机的文件共享的访问权限

mysql - MySQL 中何时使用单引号、双引号和反引号

SQL 设计问题 - 是否有很多表?

sql - 将 MySQL 别名字段加在一起

PHP exec函数不执行我编译的程序权限相关

java - 拒绝权限 OPPO_COMPONENT_SAFE