如何在开放数据库上安全地提供免费查询访问

时间:2013-05-09 03:56:10

标签: web-services relational-database denial-of-service

背景:我的州政府有一个网站,以“政府透明度”的名义提供财务数据,但我对它的呈现方式非常不满意。这是一个笨拙的老式网站,没有API,无法下载数据,网站本身也没有提供聚合分析。您可以按名称查找任何州雇员的工资和旅行报销记录,但需要一些共同的努力。当然,没有简单的方法来获得有用的问题的答案,例如“普通高中教师的薪水是多少?”所以,作为第一步,我只是屏幕上抓取了大量的这些信息,现在以gson格式存放在GitHub上。

所以我的下一步是以有用的方式呈现这些数据。当然,我会尝试自己做一些分析和图形,提供RESTful API,并提供包含整个数据集的tarball。但是我还想要另一件事,但我不确定......

问题:如果我将此数据放入关系数据库,我如何“安全”公开该数据库系统以进行通用公共查询?我无法想象简单地编写一个执行任意SQL选择的Web服务是一个好主意,因为这是一个公开的邀请,任何人都可以将我的处理器与长时间运行的查询(恶意或非恶意)捆绑在一起。

是否存在SQL子集或完全不同的查询语言这样的东西,可以保证查询评估复杂性的上限?或者我是否在思考这个问题 - 也许正确的答案与在DBMS上设置较低的最大查询时间一样微不足道?

1 个答案:

答案 0 :(得分:0)

您可以简单地在开放的互联网上提供数据库服务器,具体取决于您的风险承受能力。

您可以使用哪些数据库?

按用户角色分隔数据有哪些要求?任何人都可以访问吗?只有登录角色的人?不同登录角色的不同数据?

您需要一个支持基于角色的安全性的数据库,并且仅授予SELECT对正确表的权限。

确保您的root用户只能从特定网络连接,并且密码非常复杂,并且通过TLS进行登录。考虑fail2ban。

您可以使用PostgreSQL中的workmem参数来限制查询内存使用量。 MySQL支持用户查询限制。 http://dev.mysql.com/doc/refman/5.7/en/user-resources.html