2

背景:我的州政府有一个网站以“政府透明度”的名义提供财务数据,但我对它的呈现方式非常不满意。这是一个尴尬的老式网站,没有 API,没有办法下载数据,网站本身也没有提供聚合分析。您可以通过姓名找到任何国家雇员的工资和差旅报销记录,但这需要一些协调一致的努力。而且肯定没有简单的方法来回答“高中教师的平均工资是多少?”等有用的问题。所以,作为第一步,我只是截取了大部分信息,这些信息现在以 json 格式保存在 GitHub 存储库中。

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

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

是否存在诸如 SQL 子集或完全不同的查询语言之类的东西,可以保证查询评估复杂性的上限?还是我想太多了-也许正确的答案就像在 DBMS 上设置较低的最大查询时间一样微不足道?

4

1 回答 1

0

根据您的风险承受能力,您可以简单地在开放的 Internet 上提供数据库服务器。

您可以使用哪些数据库?

在按用户角色隔离数据方面有哪些要求?任何人都可以访问它吗?只有那些具有登录角色的人?不同登录角色的不同数据?

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

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

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

于 2014-04-15T21:30:28.473 回答