确保SQL查询是只读的

确保SQL查询是只读的,sql,ruby,ruby-on-rails-3.1,sequel,Sql,Ruby,Ruby On Rails 3.1,Sequel,确保SQL查询不会更改数据库的数据的最佳方法是什么 在我的场景中,您无权访问数据库层,只能在应用程序层上执行此逻辑 您是否建议使用gem,一种ruby自定义脚本?您可以管理用户的权限,以便他们有权读取数据库,但无权更改数据库(即,无法插入、更新和删除)。例如,如果您使用的是mysql,那么可以在phpmyadmin或等效工具中轻松完成这项工作 根据您的更改进行更新。即使您只有通过应用程序的访问权限,您仍然以拥有或没有更新、删除、插入或选择权限的用户身份连接到数据库,因此确保不执行此类查询的唯一方

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

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


您是否建议使用gem,一种ruby自定义脚本?

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


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

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


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

在数据库层上,确保Rails应用程序访问数据库的用户仅具有您所需的访问权限,或者仅选择。

在数据库层上,确保Rails应用程序访问数据库的用户仅具有您所需的访问权限,也许只有选择。

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

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

支持使用可写主数据库。只读从机处理
SELECT
查询,其他查询由主数据库完成

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

另一种方法是在保存之前使用(
),以防止写入数据库。

支持使用可写主数据库。只读从机处理
SELECT
查询,其他查询由主数据库完成

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


另一种方法是在保存之前使用(
)来防止写入数据库。

您是在试图阻止SQL注入还是什么?我想阻止使用插入、更新、截断等查询。仅选择。在仅对数据库具有读取权限的连接上运行。您需要了解有关数据库权限和SQL查询的信息。gem或自定义脚本中没有任何内容会影响您的读写能力,它是在数据库级别或由实际发出的SQL语句设置的。您连接到数据库的用户具有设置访问权限的权限。试图控制来自任何其他层的访问是一种幻想,很容易被颠覆。那么@hermiod提出的SQL查询解析解决方案呢?这难道不包括我的场景吗?在这个场景中,数据库权限由第三方处理,这些第三方可能包括数据库层权限,也可能不包括数据库层权限?您是在试图阻止SQL注入还是什么?我想阻止使用INSERT、UPDATE、TRUNCATE(等)查询。仅选择。在仅对数据库具有读取权限的连接上运行。您需要了解有关数据库权限和SQL查询的信息。gem或自定义脚本中没有任何内容会影响您的读写能力,它是在数据库级别或由实际发出的SQL语句设置的。您连接到数据库的用户具有设置访问权限的权限。试图控制来自任何其他层的访问是一种幻想,很容易被颠覆。那么@hermiod提出的SQL查询解析解决方案呢?这不包括我的场景吗?在这种场景中,数据库权限由第三方处理,可能包括也可能不包括数据库层权限?这是一个有效的答案,但我只是更新了我的问题,使其上下文更清晰。这是一个有效的答案,但我只是更新了我的问题,使其上下文更清晰。这是一个有效的答案,但我只是更新了我的问题,让它的背景更清晰。这是一个有效的答案,但我只是更新了我的问题,让它的背景更清晰。