什么是加密 mysql 数据库的好方法,值得吗?

Sni*_*tse 23 mysql encryption

我知道我可以加密数据库的特定字段,但我对加密数据库的每个字段感兴趣。我想确保没有人可以访问 mysql shell 但无权访问解密密钥,根本无法从数据库中读取任何内容。

我还想确保如果有人获得了对机器的 root 访问权限,但没有解密密钥,他们就无法读取数据。

我该怎么做?这样做有意义吗?我担心如果有人可以访问 mysql 数据库,他们不可避免地会访问密钥,所以这是没有意义的。我错过了什么吗?

Gio*_*Mac 10

可以使用最小的字段级 AES 和 DES 加密:https : //dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_encrypt

没有人可以在不为每个查询指定键的情况下读取数据(或不将其添加到触发器/过程中)。

例子:

插入:

INSERT INTO users (username, password) VALUES ('root', AES_ENCRYPT('somepassword', 'key12346123'));
Run Code Online (Sandbox Code Playgroud)

并选择:

SELECT AES_DECRYPT(password, 'key12346123') FROM users WHERE username = 'root';
Run Code Online (Sandbox Code Playgroud)

此外,这需要到数据库的 SSL 连接。

在较低级别 - 您也可以加密文件系统。

  • 注意:除非数据库是本地的,否则您需要以某种方式加密连接,否则密码和密钥将作为纯文本通过网络发送。见 http://security.stackexchange.com/questions/45838/is-why-should-you-avoid-aes-in-mysql-true (3认同)

Dan*_*ick 3

第一:您将密钥存储在应用程序中,并在应用程序层处理所有加密。

接下来:确保 MySQL 实例和应用程序 [服务器] 位于不同的计算机上,以便 MySQL 服务器上的 root 攻击不允许攻击者从应用程序源读取密钥。

这种做法似乎有些过分了。正确处理敏感数据(密码、信用卡等),但对所有内容进行加密就有点矫枉过正了。(并且在主键世界中可能会适得其反)