当前位置:  开发笔记 > 后端 > 正文

MySQL加密列

如何解决《MySQL加密列》经验,为你挑选了1个好方法。

假设表中的每一行都有与一个特定用户有关的数据.用户有密码来访问系统.

如何使用InnoDB加密一列数据,以便除了数据用户以外的任何人都无法读取数据?我正在考虑使用一种MySQL加密函数(比如AES)和一个基于根据用户密码计算的哈希的密钥.

有没有人对我如何做到这一点有任何指示?我是在正确的轨道上吗?

以下答案之一

修改用户密码的问题涉及通过新密码重新加密用户密钥,这比重新加密可以任意大的整组用户数据要简单得多.用户密钥在系统中的用户数据的整个生命周期内保持不变.

这有什么用?说密码是pass1.并且有一堆记录使用由此生成的密钥加密.如果用户现在将密码重置为pass2,我无法解密使用pass1加密的数据.在用户完全忘记密码的情况下,他的所有加密数据都将丢失.



1> Damir Zekić..:

我不知道用用户的密码哈希加密数据是否有多大意义,特别是如果你在数据库中保留哈希本身.在这种情况下,任何可以访问加密数据的人也可以访问密码哈希并解密数据.

另一种方法是使用特定于应用程序的密钥加密数据,并使用某些特定于用户的数据.但是,您面临另一个问题:如何安全地存储应用程序密钥.对于这个问题,我不知道一个简单的答案,但是如果您担心数据库数据可能受到损害,而不是源代码本身,例如如果您的数据库存储在异地(例如,如果您的数据库存储在异地),则将其保留在源代码中可能已经足够了(想想亚马逊S3).

如果您只在数据库中保留密码的哈希值,那么使用用户密码保存应用密钥会有所帮助,但会引入另一个安全漏洞:您必须在应用会话中以明文形式保留用户密码.

至于技术解决方案,它非常简单,并且可以使用示例代码.您可以按如下方式对其进行修改,以使用密码哈希加密的应用程序密码加密数据:

INSERT INTO secure_table VALUES (
  1,
  AES_ENCRYPT(
    'plain text data',
    CONCAT(@application_password, @user_password))
);

在任何情况下,您都必须将应用程序密码存储在某处,因此我认为没有一种简单的方法可以提供完美的安全性.

我能想到的另一种方法是向用户询问可以用作加密密钥的简短PIN.PIN不会存储在数据库中,每次访问数据时都需要用户询问.

当然,您必须考虑加密的可行性.如果没有解密,您将无法索引或搜索它.可能需要一组有限的数据(例如信用卡号),但我不会对它有所了解.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有