我发现我的很多Web服务都提供对某些关系数据的CRUD访问。例如,我有users
,profiles
和hosts
等概念,每个都有属性,以及它们之间的关系(users
有profiles
,{{1 }}属于hosts
等。)
我认为指定所需内容的最佳方式是在SQL中表达它。
users
使Web服务接受输入为SQL查询的好/可行/安全方法是什么?
我可以重用某种可重用的SQL解析器/引擎吗?
编辑:我并不是指允许人们直接访问数据库。我只是想让他们表达他们的需求("我想要所有用户名,连同他们相应的个人资料的名称,创建日期,关联主机的数量,所有用户按照上次修改日期排序& #34;)在SQL中。它并不意味着Web服务必须逐字地将SQL查询转发到数据库。
由于
答案 0 :(得分:3)
这听起来是一个非常糟糕的主意。首先,打开Web服务界面以支持SQL查询,在下一步中,您需要过滤掉可能有害的所有内容 - 这是在SQL的上下文中有很多。
请不要这样做。定义客户需要的操作并准确支持这些查询。使用此方法,您可以在服务器端定义SQL查询,并从客户端传入参数。使用输入验证和预准备语句来避免安全问题。
答案 1 :(得分:2)
这听起来像是一种domain-specific language,您想要实现并传递给Web服务。
在how to implement a domain-specific language上查看groovy的功能。
答案 2 :(得分:0)
如前所述,将SQL注入Web服务是一个安全问题。但是,如果你真的,真的需要这种灵活性,你不应该害怕编写自己的翻译。然后你就可以把那些可能对你的应用程序造成伤害的东西剪掉。