1

我的场景:

我正在尝试开发一种可以查询不同数据库的服务。

要清除上述声明:

  1. 我在最广泛的意义上使用了服务这个词:一个为数据库所有者提供一些价值的软件组件。

  2. 这些数据库绝不会在我的控制之下,因为它们将属于不同的公司。他们不会事先知道,并且要支持多个供应商:Oracle、MS (SQL Server)、MySql、PostgreSQL。此外,还将支持 OLE DB 和 ODBC 连接。

问题:数据库凭据和整体流量的安全性是一个大问题,但配置工作应至少减少。理想情况下,所有安全问题都应该在服务实现中以编程方式解决,并且除了提供有效的连接字符串外,不需要数据库所有者进行任何配置工作。

通常,数据库 SSL 支持是通过服务器证书完成的,我想避免这样做,因为这对客户端(数据库所有者)来说很麻烦。我一直在研究如何做到这一点无济于事。希望这可以通过 openssl、SSPI、客户端 SSL 证书或任何形式的隧道来完成;或者可能是不可能的。一些建议将不胜感激。

4

2 回答 2

0

SSL 对于保证客户端数据库的安全非常重要。但不仅如此。您必须确保每个数据库帐户都已锁定。每个客户端只能访问自己的数据库。此外,每个数据库都有其他令人讨厌的特权。例如 MySQLFILE_PRIV允许一个帐户读/写文件。MS-SQLxp_cmdshell 允许用户从 sql 访问 cmd.exe(他们为什么要这样做!?)。PostgreSQL 允许您使用任何语言编写存储过程,并且您可以从那里调用各种讨厌的函数。

然后,还有其他问题。格式错误的查询可能导致缓冲区溢出,这将为攻击者提供进入王国的钥匙。您必须确保所有数据库都是最新的,然后祈祷没有人放弃 0-day。

于 2011-02-15T16:28:23.253 回答
0

即使在您尝试使用数据库保护流量之前,我也很难理解该服务如何工作,而不会给数据库所有者带来极大的麻烦。

尤其是 Oracle(尽管我认为其他数据库也会有类似的问题)。为了让您的服务访问 Oracle 数据库,数据库的所有者必须在他们的防火墙中打开一个洞,以允许您的服务器访问特定端口上的数据库,因此他们需要知道 IP 地址您的服务器,并且很有可能他们需要配置一个在单个端口上进行所有通信的服务(默认情况下,Oracle 侦听器会经常将客户端重定向到不同的端口,以便与数据库进行实际交互)。如果他们有安全意识,他们将不得不在单独的机器上安装 Oracle Connection Manager 来代理服务器和数据库之间的连接,而不是将数据库直接暴露在 Internet 上。那'

如果你想加密与数据库的通信,你要么需要建立一个到数据库所有者网络的 VPN 连接(这可能会消除一些防火墙问题),要么你需要使用 Oracle Advanced Security 之类的东西来加密服务器之间的通信。创建与许多不同客户网络的 VPN 连接可能需要大量的配置工作,并且可能需要您为每个客户维护一台服务器,因为不同的客户将有可能相互不兼容的不同 VPN 软件要求。高级安全选项是企业版 Oracle 许可证之上的额外成本许可证,客户必须出去购买(而且价格不便宜)。你' d 只有在跳过所有这些其他环节后,才会担心获得适当的 SSL 证书。SSL 证书交换似乎是整个过程中最简单的部分。

这只是为了支持甲骨文。对其他数据库的支持将涉及一系列类似的步骤,但确切的过程往往会略有不同。

我倾向于期望您会得到更好的服务,具体取决于您要解决的业务问题,方法是创建一个产品,您的客户可以将其安装在其网络内的自己的服务器上,该服务器将连接到数据库并具有一个接口,可以通过诸如 HTTPS POST 调用之类的方式将数据发送到您的中央服务器,或者可以侦听可以发送到数据库并通过 HTTP 返回结果的 HTTPS 请求。

于 2011-04-20T20:38:50.767 回答