目标
我想将加密数据存储在数据库中。
约束
- 应用程序级加密(在发送到数据库之前加密)对于我的用例来说不是一个合理的选择。
- 我正在考虑的数据库提供商不允许我以我将支付的价格创建多个用户/管理权限。这意味着分离日志与读取和写入的权限不是一种选择。
选项
- 允许 MySQL
aes_encrypt/decrypt为我处理 AES 加密(通过)(我知道 ECB 块问题以及如果未正确配置 MySQL 以纯文本形式记录敏感数据的事实) - 使用提供静态加密的数据库提供程序(透明发生的那种——自动加密
SET和解密SELECT)
问题
问题 1
为什么我会选择这种类型的静态加密aes_encrypt呢?(作为说明,我没有存储信用卡信息或其他任何会鼓励我合法地进行静态加密的东西)。
据我了解,加密数据库中的数据的目的是面对发生数据库泄露的现实。考虑到这一点,如果有人可以访问我的数据库(意味着他们可以执行查询),这种类型的静态加密不会真正帮助他们,因为它只会在他们解密数据时简单地解密数据SELECT吗?在我看来,它在不增加安全性的情况下减慢了查询速度。
aes_decrypt另一方面,它要求入侵者可以访问存储在不同凭据后面的不同机器上的密钥。那不是更安全吗?
问题2
在我在问题 1 中描述的场景中,攻击者获得了对数据库的查询访问权限。如果是这种情况,难道他们也不能只启用日志记录并检索纯文本 AES 密钥,从而aes_encrypt也变得无用吗?
(请记住此处的第 2 个约束条件。)
问题 3
SELECT排除 sql 注入,是否存在其他情况,攻击者可以在不执行 a并因此不触发透明的静态解密的情况下查看我的数据库中的内容?
建议?
如果您有任何适合我的限制的建议,请告诉我。谢谢!