SQL:Alter默认选择顺序(w/o按子句)是敏感数据时




我正在研究一个令牌化系统,以将敏感数据存储在钥匙值表中,但是,如果默认的选择顺序可以是链的弱连接,如果它重现了插入查询的顺序。我认为以示例理解要容易得多。

假设我们有此数据:

firstName:bob
lastname:史密斯
年收入:$ 56000

我们将每个值关联一个随机令牌:

58217 =>鲍勃
79174 =>史密斯
37142 => $ 56000

我们在两个不同的数据库上有两个表:
第一个具有" firstName"," lastname"one_answers" YearllyCome"的列,我们在其上存储了一个值58217、79174和37142;
第二个具有"令牌"one_answers"宣传"列,我们存储了三个记录:

58217,"鲍勃"
79174,"史密斯"
37142," $ 56000"

令牌化的目的是,如果入侵者只能读取一个数据库,他将无法删除任何有用的信息。

ut:如果从代币中选择一个简单的选择 *以与我们插入的顺序相同的顺序提供记录,那么阅读鲍勃·史密斯的年收入为56000美元真的很容易。只需从上到下读取即可。

我知道SQL不能保证默认选择顺序反映插入顺序,但实际上确实可以反映出插入顺序,在这种情况下,这是一个问题,因此问题是:
有一种方法可以洗牌默认顺序,或者 - 更好地将数据物理存储在数据库中?

我知道我们可以将所有数据丢弃,洗牌然后用新订单重新插入,但我认为这是一种太昂贵的方法。而且我敢肯定已经有一个流畅的解决方案,但是我没有在互联网上找到任何有用的东西,所以我在这里:)

非常感谢!

一些RDBMS解决方案具有"群集索引"的概念。群集索引按索引的顺序存储记录,因此,如果您的"令牌"列确实是随机的,则在该列上创建群集索引可能会实现所需的目标。但是,正如@damien_the_unbeliever所写的那样,这种行为是非确定性的,因此无法保证。

您应该意识到这将带来可能的性能挑战 - 每次创建新记录时,都会重新排序表,您可能会遇到明显的放缓。

我还会质疑您介绍的重要额外工作和复杂性是否真的为您带来任何安全福利。根据定义,必须有一种结合两个数据库数据的方法。我想那是因为您正在创建一个SQL用户,您"自信"不能被黑客入侵;如果您"自信",为什么不将数据存储在该用户的数据库中?您可能还会查看数据库本地加密。

最后,令牌化在计算机科学中具有特定的含义,显然您正在使用的是。

最新更新