确保SQL查询是只读的

时间:2012-01-08 20:51:01

标签: sql ruby ruby-on-rails-3.1 sequel

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

在我的方案中,您无权访问数据库层,只能在应用程序层上执行此逻辑。

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

4 个答案:

答案 0 :(得分:3)

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

根据您的更改

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

答案 1 :(得分:2)

一种简单但非常简单的方法是使用不能在查询中的单词黑名单,例如插入,更新等。 或者,您可以在sql查询上使用解析器,该解析器将为您提供必要的信息,以获取是否允许查询。 我会将选项1作为最后的手段,或者如果您的检查需求相对简单。

答案 2 :(得分:1)

在数据库层,确保Rails应用程序的用户正在访问数据库,因为它只具有您想要的访问权限,可能只有SELECT。

答案 3 :(得分:0)

Sequel支持read only slave databases可写主数据库。只读从站处理SELECT查询,其他查询由主数据库完成。

也许你可以将master数据库设置为nil?

另一种方法可能是使用hooksbefore_save)来阻止写入数据库。

相关问题