我正在尝试一种将个人数据存储在MySQL数据库中的方法,该数据库可通过PHP应用程序访问,并允许具有不同密码的多个用户访问以及添加和删除用户的能力。
我最初的想法是使用AES加密数据库中的数据,以便可以解密和读取它,但是我不确定是如何允许多个使用不同密码的用户访问它的,因为只能有一个解密密钥。据我所知。
我唯一的想法是为用户设置一个正常的登录系统,以便可以添加和删除他们,但将解密密码存储在服务器上,因此用户永远不会看到它。尽管将解密密码存储在服务器上的想法似乎并不安全,所以我正在寻找更好的解决方案。
我敢肯定这是很多其他人都遇到过的问题,我一直在搜索,但是除非我误解了,否则我发现的唯一解决方案仅适用于一定数量的用户,而不是在添加和删除用户的情况下。
还是我解决这个问题的方法不是最好的方法,是否会有更好的方法来解决?
还要定义我正在考虑的防范对象。如果服务器被黑客入侵并且数据库被盗,小偷将无法读取数据并阻止不再被允许查看数据的人访问数据库以及添加新用户。
谢谢你的帮助,
尼尔
最佳答案
是的,密钥(用于解密数据的密码)必须存储在服务器上。
不幸的是,这没有办法。
但是,有不同的方法可以做到这一点。
您可以将其以纯文本文件的形式存储在用户访问区域之外的文件夹中的某个位置,只有root
系统用户才能获取它。
您可以将其存储在具有单独键集的不同,单独数据库中。
您可以使脚本从服务器上的其他脚本/应用程序获取密钥(或第二数据库凭据),从而提高反透明度。万一某个人可以访问第一个脚本,则他可能无法访问另一个脚本。
最后,您可以将其存储在网络深处的其他位置,这是最复杂但最安全的事情,称为KMS
-Key Management Server
。
实际上,KMS不必一定是云服务或昂贵的企业解决方案(尽管这是最安全的方式)。它可以只是“战区”(独立网络)之外的另一台服务器,该服务器仅将密钥存储和“告知”受信任的服务器。
我可以写一本约300页的有关密钥管理的书,因为我监督了许多非常敏感的数据项目,这些项目符合PCI DDS3安全标准。您可以通过Google搜索key management
并尝试查找一些简单的教程和方案。
关于php - 具有不同用户号码访问权限的加密MySQL数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28032876/