0

确保SQL 查询不会更改数据库数据的最佳方法是什么?

在我的场景中,你没有访问数据库层的权限,只能在应用层做这个逻辑。

你会推荐使用 gem,一个 ruby​​ 自定义脚本吗?

4

4 回答 4

3

您可以管理用户的权限,使他们有权读取数据库但无权更改数据库(即无法插入、更新和删除)。例如,如果您使用 mysql,您可以在 phpmyadmin 或等效工具中轻松完成此操作。

根据您的更改进行更新。即使您只能通过应用程序访问,您仍然以具有或不具有更新、删除、插入或选择权限的用户身份连接到数据库,因此确保不执行此类查询的唯一方法是更改该用户的权限。

于 2012-01-08T20:54:13.277 回答
2

一个简单但远非万无一失的方法是使用查询中不能包含的单词的黑名单,例如插入、更新等。或者,您可以在 sql 查询上使用解析器,该解析器将为您提供推导所需的信息是否允许查询。我只会将选项 1 作为最后的手段,或者如果您的检查需求相对简单。

于 2012-01-08T21:25:35.490 回答
1

在数据库层,确保 Rails 应用程序正在访问数据库的用户只有您想要的访问权限,也许只有 SELECT。

于 2012-01-08T20:54:24.107 回答
0

Sequel支持具有可写主数据库的只读从数据库。只读从属处理SELECT查询,其他查询由主数据库完成。

也许您可以将主数据库设置为零?

另一种方法是使用钩子( before_save) 来防止写入数据库。

于 2013-07-17T09:56:44.307 回答