如何限制Sequel ruby​​只允许SELECT语句获取方法?

时间:2018-01-24 08:52:35

标签: ruby sequel

我让我的用户在我正在构建的应用程序中执行sql查询。他们可以输入数据库连接字符串(支持mysq,pg和其他rdbms) 有没有办法只在像这样的提取方法上允许SELECT语句

   client = Sequel.connect "mysql2://user:pass@hostname/some_db"
   client.fetch("SELECT * FROM sample_table").all

并禁止以下

   client.fetch("DROP DATABASE some_db").all
   client.fetch("TRUNCATE some_table").all
   client.fetch("ALTER some_table").all

我可以使用续集gem获取每个表列的表和数据类型吗?

1 个答案:

答案 0 :(得分:0)

这听起来像是危险的事情。针对所有情况很难对输入进行适当的清理。 只需考虑过程,动态创建SQL,连接语句,PLSQL,up / downcase,SQL变体,清理程序中的错误,......

你永远不应低估恶意用户的创造力。

最好是在数据库级别处理此问题,并创建具有适当访问权限的只读用户。