如何解决MySQL - 只有在提供某个键时才可以强制更新行
我似乎找不到相关信息。
假设我有一个表 users
,为了安全起见,我希望任何 SQL 查询只有在引用 id
列时才能执行。
例如这不应该工作:
UPDATE users SET source="google" WHERE created_time < 20210303;
上面的更新语句在语法上是有效的,但因为它没有引用 id
列,所以它不应该是可执行的。
只有以下内容是可执行的:
UPDATE users SET source="google" WHERE id in (45,89,318);
有没有办法从 MySQL 服务器端强制执行此操作?
解决方法
我认为您真正可以做您想做的唯一方法是使用存储过程,您可以在其中传递 id 并在那里进行更新。您可以将安全设置为:
- 为只有一个用户的所有用户关闭对基础表的更新。
- 以有权修改表的用户身份运行存储过程(使用
DEFINER
)。
这会很麻烦,因为您需要传入表中的所有值。
您可以接近安全更新模式。但是,这也允许 LIMIT
以及键比较,因此这不足以满足您的目的。
注意:此类问题通常以另一种方式处理。大多数用户没有修改此类表的权限。然后,会假设这样做的“特殊”用户对更改更加了解和谨慎。如果数据是敏感的,那么更改将被记录下来,因此撤消已进行的更改会(相对)容易。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。