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


20

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

我还想确保,如果有人对计算机具有root访问权限,但没有解密密钥,那么他们将无法读取数据。

我应该怎么做?这样做有意义吗?我担心是否有人可以访问mysql数据库,他们不可避免地将有权访问密钥,因此这毫无意义。我想念什么吗?


5
您是否考虑过将数据库存储在专用卷上,并使用dm-crypt和LUKS对其进行加密?当然,这不是您要的内容,但是所有内容都会被加密。您甚至可以使用GPG加密密钥文件。
dsljanus 2013年

Answers:


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'));

和SELECT:

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

而且,这需要与数据库的SSL连接。

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


2
注意:除非数据库是本地数据库,否则您需要以某种方式加密连接,否则密码和密钥将以纯文本形式通过网络发送。参见security.stackexchange.com/questions/45838/…–
亚伦·迪古拉

AES,MD5很老,并且有漏洞利用。什么是新加密?
YumYumYum

我知道这只是一个如何加密/解密字段的示例,但是使用密码作为示例是个坏主意。加密或不加密的数据库中,都绝对不应包含未隐藏的密码。
Caedmon '18年

这个答案是关于字段级解密的,但是问题不在于此:“一种加密mysql数据库的好方法”……“我知道我可以加密数据库的特定字段,但是我想对每个字段进行加密数据库字段。”
LarsH


2

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

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

这种方法似乎过多。正确处理敏感数据(密码,信用卡等),但是加密所有内容都是过分的。(并且在主键世界中可能适得其反)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.