我正在尝试创建基于 Azure SQL 数据库后端的服务。
该服务将是多租户的,并将包含来自多个“客户端”(可能有数十万)的高度敏感信息,这些信息必须彼此严格隔离并严格防止数据泄漏。 “按设计”
使用如此多的单独数据库是不可行的,因为会有很多客户,但每个客户的信息却很少。
我研究了 Azure 提供的透明加密,但这本质上会将整个数据库加密为一个整体,因此换句话说,它不能防止客户端或其他人之间的泄漏;由于开发错误或恶意攻击,“客户”的信息永远不会落入其他任何人的手中,这一点非常重要。
因此,我真正想要实现的是使用不同的密钥对数据库中每个客户端的数据进行加密,这样您就必须从每个客户端(从他们的“物理”位置)获取密钥来解密您想要的任何数据。可能会设法从数据库中提取该特定客户的信息,这对任何人来说几乎都是不可能的。
我的意思清楚吗?
你们对如何解决这个问题有什么建议,或者知道任何允许此功能的第三方解决方案吗?还有其他建议吗?
您正在考虑在单个表中“按设计”保护/隔离租户,为什么不看看行级安全性 https://msdn.microsoft.com/en-us/library/dn765131.aspx。您可以将其配置为仅向特定租户提供适用的行。
这并不能直接解决您最初关于使用每个租户的单独密钥加密数据的问题;如果您为每个租户都有一个单独的表,那么您可以通过以下方式执行此操作始终加密 https://msdn.microsoft.com/en-us/library/mt163865.aspx,但是如果您尝试处理 200k 个密钥,这在密钥管理方面似乎会有些复杂。
AFAIK,没有原生 SQL Server 功能来使用不同的密钥来加密属于租户的每组行,但可能有一些我还没有见过的优雅的解决方案;当然,你可以在应用程序端执行此操作并将其存储在 SQL 中,不会有任何问题;技巧与上面基于 AE 的解决方案相同 - 管理大量密钥。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)