2010-12-16 68 views
0

背景如何提供对数据库子集的公共访问?

我的研究,我正在开发一个database来存储我们的数据,我们正在建立一个software tool,简化了访问这些数据。该数据库将保存已发布的数据,以及我们希望提供的数据,以及尚未发布且属于其他研究人员的数据。

目的

我们想为我们的工作是容易复制,并且到这个程度,我们需要让公众在其上运行的数据SELECT语句。三种可能的解决方案包括:

  1. 每个发布(可能在虚拟机中,这样的软件工具的相关性得以满足)创建一个可以自由下载的数据库的一个子集
  2. 每个发布,创建一个将数据记录链接到发布的多对多查找表,然后提供公开的SELECT访问这些记录的权限。我们可以很容易地复制数据库供公众使用 参数模块 自动化前一代

然而,我被告知,甚至允许通配符陈述损害的安全性,这也是为什么我认为选择1更为合理。选项1还可以使我们对数据库进行归档,因为它与特定的出版物一起使用。

更新:澄清,我希望用户能够重现整个计算流程,这就需要使用SELECT语句可以加入与auxillary数据数据表(如协,实验细节)在查找表中。

问题

什么是提供给数据库的一个子集公共接入的最佳方式是什么?

回答

1

你可以分配数据的子集作为SQLite数据库,即创建一个独立的数据文件,人们可以下载到自己的计算机。许多学者,经济学家等都使用SQLite来共享数据集,因为它是独立的,并且安装非常简单(我应该添加,跨平台的)。

+0

听起来像一个不错的解决方案;你能举一个例子说明如何将一个MySQL数据库的一个子集作为一个SQLite数据库来重现吗? – 2010-12-16 22:49:13

+0

笨拙而又久经考验:为要导出的表子集创建视图;以CSV格式导出视图;将导出的CSV文件导入SQLite。 – Tim 2010-12-16 23:28:00

+1

@David:编写一个小程序(Python是一种很好的语言),将记录从现有的MySQL安装中提取出来,然后将它们重新插入到SQLite容器中,然后每次需要时运行该小程序导出新的数据集。 – 2010-12-17 01:48:41

0

创建具有适当访问权限的视图,以及只能访问这些视图但不包含基础表的用户。

+0

@Mchi我希望用户能够使用我所做的相同软件复制整个分析。 – 2010-12-16 20:59:36

+0

好的...所以具有不同于实际表格的名称视图将不允许这样做。所以我想选项1是最好的。 – Mchl 2010-12-16 21:08:57

+1

用于内部或私有应用程序的数据库服务器理想情况下不应由Internet上的主机节点访问。如果它们可以访问,则只应在加密连接和强认证需要时才能访问。否则,它是一个大的攻击媒介:如果数据库软件有缓冲区溢出或(lol)堆栈溢出错误会给远程攻击者执行任意代码 - 或者更糟?此外,最好让私人和公众的资料放在不同的系统上,以便监控资源和带宽使用并保持隔离。 – 2010-12-17 01:52:03