我正在使用 Ruby on Rails 开发数据仓库,我应该允许用户对应用程序数据库执行任意 SELECT 查询。
我知道这是你通常不应该做的,但它是我的客户实际需要的接口(我想不出用户可能想要做的所有可能的查询并将它们转换为 ActiveRecord 查询)。可能有复杂的连接和子查询等等。我宁愿这样做(将它集成到我的应用程序中)而不是让他们通过 pgAdmin 访问数据库(我正在使用 postgresql)。
我的问题是:这样做最安全的方法是什么?我应该能够逃避任何东西,如 INSERT、UPDATE、DROP TABLE 等......
我正在考虑获取查询字符串并清理这些“危险”单词,然后使用 ActiveRecord::Base.connection.execute(sanitized_sql_string)。这是一个合理的方法吗?