我们正在构建一个由多租户数据库支持的云 Web 应用程序。为了最大限度地提高安全性,我们计划使用单独的密钥加密每个客户的数据。问题是查询。假设他们在报表编写器中并希望按姓氏对他们的 1,000,000 客户表进行排序。这将执行得非常糟糕,因为所有 1M 行都必须不加密,然后在每个查询中进行排序!
这是我能想到的唯一选择。你会怎么做?还有其他选择吗?
只加密数据库中的 NPI 列,然后永远不允许它们按 NPI 值排序或过滤。
PRO:保护敏感数据,同时在非 NPI 列上仍提供出色的查询性能
缺点:对我们的用户来说不是一个很好的用户体验
与 #1 相同,但在 RAM 中保留未加密的 NPI 列缓存
PRO:更好的用户体验
CON:现在 DataInUse 是未加密的(这比未加密的 DataAtRest 更好吗??)。此外,具有 NPI 和非 NPI 列的过滤器的编码会非常难看。例如,如果过滤器是 SELECT ALL CUSTOMERS WHERE LASTNAME LIKE "S%" AND BIZTYPE="MEDICAL",则 lastname 记录 ID 必须首先来自缓存,然后发送到数据库以进一步限制 biztype 的记录。
放弃并保留数据库中未加密的所有数据,并应用 db 加密 (SQLServer TDE) 或磁盘加密。
PRO:出色的用户体验和性能
CON:性能会受到影响。此外,如果密钥被泄露,我们所有客户的数据都会暴露出来,我们就会登上《华尔街日报》的封面。