具有不同用户编号访问权限的加密 MySQL 数据


Encrypted MySQL data with varying user number access

我正在尝试想一种方法将个人数据存储在MySQL数据库中,该数据库可通过PHP应用程序访问,并允许具有不同密码的多个用户访问以及添加和删除用户的能力。

我最初的想法是使用 AES 加密数据库中的数据,以便可以解密和读取它,但我不确定如何允许具有不同密码的多个用户访问它,因为据我所知,只有一个解密密钥。

我唯一的想法是为用户设置一个正常的登录系统,以便可以添加和删除它们,但将解密密码存储在服务器上,以便用户永远不会看到它。不过,将解密密码存储在服务器上的想法似乎不安全,所以我正在寻找更好的解决方案。

敢肯定这是许多其他人遇到的问题,我已经搜索过,但除非我误解了事情,否则我找到的唯一解决方案适用于一定数量的用户,而不是在添加和删除用户的情况下。

还是我的做法不是最好的,有更好的方法来解决这个问题吗?

还要定义我正在考虑保护的内容。它包裹着服务器被黑客入侵和数据库被盗,窃贼将无法读取数据并阻止不再被允许查看数据的人访问它以及添加新用户。

感谢您的任何帮助,尼尔。

是的,密钥(解密数据的密码)必须存储在服务器上。
不幸的是,这是没有办法的。

但是,有不同的方法可以做到这一点。

您可以将其以纯文本文件的形式存储在用户访问区域之外的文件夹中,只有root系统用户才能获得它。

您可以将其存储在具有单独键集的不同单独数据库中。

您可以使您的脚本从服务器上的其他脚本/应用程序获取密钥(或第二个数据库凭据),从而提高反透明度。如果有人可以访问第一个脚本,他可能无法访问另一个脚本。

最后,您可以将其存储在网络深处的其他地方 - 这是最复杂但最安全的东西,称为KMS - Key Management Server

实际上,KMS不一定是云服务或昂贵的企业解决方案(尽管这是最安全的方式)。它可以只是"战区"(独立网络)之外的另一台服务器,它仅存储密钥并将其"告知"给受信任的服务器。

我可以写一本~300页关于管理密钥的书,因为我监督过许多符合PCI DDS3安全标准的非常敏感的数据项目。你可以谷歌搜索key management,并尝试找到一些简单的教程和方案。