在使用共享数据库的多租户应用程序中,保护和分离敏感数据的最便宜和PaaS无关的方法是什么?
一些背景信息和更具体的……
为完整性添加一些答案(2年后):
我们应该为所有租户的所有敏感数据使用单个加密密钥吗?或者我们应该为每个租户分别设一个钥匙?
每个租户都应该有一个单独的密钥。不确定Azure是如何做到的,但AWS有 KMS 对于这个用例
如果我们选择单独的密钥(在注册时随机生成,所以即使对我们来说也不会知道密钥),那么谁应该如何存储和保护租户加密密钥呢?我们是否应该向租户提供密钥,然后要求其员工在每次通过网络浏览器登录时提供每个员工的登录名和密码以外的密钥?
使用KMS(或其他类似的东西,本土的解决方案,如 Square的关键 )。您无需将钥匙交给租户。您关心的是 - 如果用户使用他们的密码(或SSO)进行身份验证,则根据他们的权限,他们可以访问某些资源。
考虑到我们以后可能需要分片或“弹性”数据库扩展,因为一些PaaS提供商称之为,并且我们可能会从Azure和Microsoft SQL Server转移到其他方面,哪种方法最有效?
你需要一个 tenantId 这将有助于数据隔离。现在,可以基于存储在KMS中的密钥来加密链接到tenantId的实际数据。
tenantId