Oracle数据库查询信息是在服务器上还是在客户端上处理的



我们正在讨论数据安全问题,出现了一个我需要确认的问题

我们有两个Oracle数据库:一个在源服务器上,另一个在客户端服务器上。源服务器包含敏感信息,并且已完全安全并被视为符合要求。我们希望运行group by查询来聚合来自源的数据,并将其存储在客户端上,一旦聚合,数据将不再敏感。

简单地说。。。这有三个部分:1)源服务器上的数据,2)网络上的数据传输,以及3)客户端服务器上的信息。

有人能解释一下聚合发生在哪里吗?传输的数据是什么?

换句话说,是哪种方式:

  1. 数据首先在源服务器上聚合,通过网络发送的只是聚合数据

  2. 数据通过网络从源服务器详细发送,然后在客户端服务器上聚合

  3. 它是#1和#2 的混合体

  4. 或者。。。我还缺少什么?

Oracle优化分布式查询以尽可能高效地执行它们,尤其是它寻求最大限度地减少通过网络发送的数据量。它将始终尝试在远程服务器上运行查询,并仅将结果集发送到本地服务器。(将远程数据与本地数据连接时,情况会更复杂,但这似乎不是您的情况)。了解更多信息。

因此,您可以在客户端服务器上运行查询,并确保敏感数据保留在源服务器上,并且只传输聚合结果集(您的选项#1)。然而,如果我是你的安全官员,我仍然会对这个解决方案感到不满。这仍然意味着将敏感表的select访问权限授予安全数据库之外的用户。这很危险。

一个更安全的解决方案是在安全服务器上聚合数据,比如使用物化视图。您的客户端服务器访问该物化视图以获取聚合数据,可以只通过查询或视图,也可以使用另一个物化视图,具体取决于您需要什么。

完整的解决方案是在源数据库上有一个单独的架构来承载物化视图,这样外部用户甚至无法访问拥有敏感数据的架构。显然,维护DMZ是额外的开销,但所有的安全性都是开销。

如果策略是从不查看客户端服务器中的敏感数据,那么选项一是您的选择。至于实现选项2,客户端服务器需要能够从源服务器查询原始数据。

要实现选项1,您可以通过在源服务器上使用Materialized Views来聚合数据,然后使用db链接将聚合数据复制到客户端服务器。

最新更新