如何使用AES_ENCRYPT在MySQL中安全地存储数据

时间:2011-01-14 23:40:09

标签: mysql aes

我们正在将敏感数据存储在MySQL中,我想使用AES_ENCRYPT(数据,'my-secret-key-here')然后使用AES_DECRYPT,效果很好。我最大的问题是如何保护密钥?以前我只是将密钥存储在Web PHP文件中,所以类似于:

define("ENCRYPTION_KEY", 'my-secret-key-here');

这确实不起作用,因为我们的MySQL服务器和Web服务器是相同的物理机器,因此如果有人获得对服务器的访问权限,他们可以获得存储在MySQL中的加密数据和密钥。

有什么想法吗?我想我需要将密钥移动到一个单独的服务器,并远程读取它。或者,如何为每个数据动态生成加密密钥。例如,获取customer_id并在其上运行md5,然后将其用作密钥。

2 个答案:

答案 0 :(得分:0)

将密钥放入文件中,将文件所有者更改为与Web服务器相同的用户。删除该组及其他所有人的文件的所有权限。

在超级用户(https://superuser.com/questions/139393/linux-file-permissions-access-control-query)上有一个类似的问题 - 我相信你可以在那里得到更好的帮助,或者只是通过谷歌搜索获得有关你正在运行的系统的文件权限的更多信息。

答案 1 :(得分:0)

几个选项:

  1. 将解密密钥保存到具有适当权限的文件
  2. 如果您确实要将密钥存储在异地,请从其他计算机“安装”驱动器。您仍然需要正确设置权限。
  3. 底线是服务器必须可以访问的主密码 - 这意味着无法完全阻止它。您可以做的最好的事情是在其上设置用户/组权限,并确保它在Web根目录之外。

    如果您不需要将值解码回纯文本(即如果您只是比较密码等值),请考虑使用哈希值。

相关问题