2016-12-24 25 views
0

是否有可能将关联数据存储在数据库中而不明确揭示其关系或所有者? This page谈论使用用户信息的散列结合密码来识别交易所属的用户。一些搜索没有透露此安全功能的实施细节。如何隐藏数据库表的外键关系或创建匿名条目?

假设我的用户有私人数据绑定到他们的账户,我怎么能这样做,以便有权访问数据库转储的人不能分辨哪些数据属于哪个用户?

回答

0

这不是一个安全功能,它是一种设计模式(或者可以说是反模式)。链接的页面描述了他们如何实现它:敏感信息存储在一个标识符中,该标识符无法追溯到任何给定的用户,而无需在数据库外部交叉引用信息。在他们的例子中,它是密码,当与其他帐户信息和哈希结合使用时,会为该用户的事务生成一致的ID。为了正确地将用户与他们的交易相关联,您需要原始密码来重建哈希。没有密码=没有关联。

这样做的工作;它牺牲了参照完整性,这就是为什么我将其称为反模式,但那就是整个想法。更大的问题是它可能是最敏感的可能点,因为只要用于生成信息的信息发生更改,就必须更新所有用户交易的哈希值。没有外键约束也允许没有任何用户的虚假交易。从结构上讲,建立一个匿名化的交易所有者表与交易表具有适当的外键关系并且如所描述的将所有者实体链接到实际用户所描述的散列表会更安全一些。这样,敏感关系是一对一而不是一对多的,并且完整性失败的影响受到限制。

当然,这两种方法都容易受到简单的耐心和分析的影响 - 如果有人拥有数据库转储并且有足够的动机,交易本身就足以了解谁制造它们,只要他们'绑定到一致的用户散列或所有者。一份比萨送货费可能是任何东西;几个人把你放在别人家几英里的地方。您可以将更多的信息与匿名记录关联起来,实际上它的匿名程度就越低。