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

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

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

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

我该怎么做?这样做有意义吗?我担心如果有人有权访问 mysql 数据库,他们必然会访问密钥,所以这没有意义。我遗漏了什么吗?

答案1

最低限度的字段级 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'));

并选择:

SELECT AES_DECRYPT(password, 'key12346123') FROM users WHERE username = 'root';

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

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

答案2

答案3

首先:您将密钥与应用程序一起存储,并在应用程序层处理所有加密。

接下来:确保 MySQL 实例和应用程序 [服务器] 位于不同的机器上,这样 MySQL 服务器上的根权限泄露就不会允许攻击者从应用程序源读取密钥。

这种方法似乎有些过度。妥善处理敏感数据(密码、信用卡等),但加密所有内容则有些过度。(而且在主密钥领域可能适得其反)

相关内容