0

我已经用 Oracle 和 Java 标记了这个问题,因为 Oracle 和 Java 解决方案都可以解决这个问题。

我是 Oracle 安全性的新手,并且遇到了以下要解决的问题。我在互联网上做了一些研究,但到目前为止我没有运气。起初,我认为Oracle TDE这可能对我的问题有所帮助,但在这里:Oracle TDE 可以保护 DBA 的数据吗?它似乎TDE不能保护数据DBA,这是一个不能容忍的问题。

这是问题所在:

我有一个包含数百万条记录的表。我有一个 Java 应用程序,它使用相等或范围条件对表中的列进行查询,该列是表的主键列。主键列包含敏感数据,因此已经加密。因此,使用来自应用程序的正常(即解密)值查询数据不能使用主键的唯一索引访问路径。我需要在不更改应用程序代码的情况下提高查询的性能(如果需要,可以修改应用程序配置,但不能修改代码)。只要该列保持加密状态,就可以在数据库端进行任何必要的更改。

请甲骨文人士:您对这个问题有什么建议?如何在解密的列值上创建索引并以某种方式强制 Oracle 使用该索引?如何使用诸如散列分区之类的分区?观点如何?任何,任何解决方案?

请Java人:我自己有一个非常模糊的想法,即在两者之间(即数据库和应用程序之间)创建一个单独的应用程序,它充当代理,接收来自应用程序的查询并将解密的值替换为加密的值和将它发送给数据库,然后它接收响应并将结果返回给应用程序。代理应该像数据库一样运行,以便应用程序可以通过仅更改配置文件中的连接字符串来连接到它。这行得通吗?如何?

提前感谢您的所有帮助!

4

2 回答 2

0

它使用相等或范围条件对表中的列查询此表,该列是表的主键列

要找到一个特定的值,它很简单——你可以以任何你喜欢的方式存储加密的数据——即使是作为哈希值,仍然可以使用索引检索特定的值。但是根据我在其他地方的评论,如果没有以下任何一项,您将无法进行范围查询:

  • 解密表中的每一行

或者

  • 使用可以在几秒钟内破解的算法。

使用链表(或相关表)来定义顺序而不是具有内在顺序的算法会强制对更大的一组值进行强力检查 - 但它远不如正确加密的值安全。

无论您使用 Oracle、Java 还是铅笔和纸都没关系。使用量子计算可能是可能的 - 但如果您无法确保您的应用程序的安全性/支付专家密码学家的好建议,那么您肯定无法负担得起。

于 2012-11-19T21:42:01.447 回答
0

如何在解密的列值上创建索引并以某种方式强制 Oracle 使用该索引?也许您可以创建一个基于函数的索引,在其中索引解密的值。

create index ix1 on tablename (decryptfunction(pk1));
于 2012-11-19T12:51:22.203 回答