加密静态数据

时间:2016-10-04 20:17:24

标签: php mysql encryption

我一段时间都在搜索这个话题。

我发现一些话题谈论数据库级别(MySQL)的加密数据。但它仅适用于5.7版

现在我想找到一个带有示例的解决方案,请问如何使用应用程序加密数据。

我正在使用PHP和MySQL数据库。我想加密我的数据库中的银行帐号

我的表名为bank,其中包含idnameaccount_number

如何加密帐号?它与PHP的普通加密方法有什么不同?

我希望我能很好地解释我的问题。如果我能提供更多详细信息,请告诉我。

2 个答案:

答案 0 :(得分:3)

我建议您查看这个为MySQL数据库提供零知识加密的开源项目。这使用AES-256加密进入数据库的数据,然后解密结果集,使加密对应用程序透明。这超出了加密和休息时间#34;和#34;在途中"通过确保在发生数据泄露的情况下,黑客在对数据库运行SQL查询时无法看到未加密的数据。

http://www.agildata.com/agildata-zero-zero-knowledge-encryption-mysql/

(注:我是AgilData的首席架构师。)

答案 1 :(得分:1)

老实说,我建议在文件系统或硬件级别使用加密存储,让MySQL正常工作。如果您使用亚马逊,它们支持加密的EBS卷和S3存储桶。

MySQL具有可以在SQL表达式中调用的加密函数。见https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html

例如:

INSERT INTO bank 
SET id = 1234, 
    name = 'ABC Bank', 
    account_number = AES_ENCRYPT('8675309', 'password');

然后你必须在获取时解密:

SELECT name, AES_DECRYPT(account_number, 'password')
FROM bank WHERE id = 1234;

此方法的一个大问题是您的密码位于查询日志和二进制日志中的纯文本中!对我来说似乎是一个交易破坏者。这就是为什么透明数据加密(TDE)会更受欢迎的原因。

但是,我知道没有专门为MySQL社区或MySQL企业版或其他MySQL版本构建的TDE实现。

MySQL Enterprise声称具有补充加密功能(https://www.mysql.com/products/enterprise/encryption.html),但这只是一些可以在SQL表达式中调用的额外函数。这不透明,因为每次插入或获取数据时都必须更改应用程序代码以显式调用加密函数。

MariaDB 10.1声称支持对存储进行透明加密,文档在这里:https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/我还没有使用它,但是它们的实现有很多限制,我不这么认为&#39 ; s真是一个很好的解决方案。例如:二进制日志,查询日志和错误日志不能加密,因此可能会泄漏敏感数据。此外,一些备份工具不会在加密数据库上工作。

加密存储无法帮助加密飞行中的数据,即在应用程序从数据库服务器获取数据时在网络上加密。对于飞行中的数据,所有MySQL变体都支持SSL网络连接。

当数据存在于应用程序本身的RAM中,或存储在各种缓存层(如memcached或squid或MySQL查询缓存中)时,您仍然需要担心数据。

备份和日志中也存在数据。有一个保护这些的计划。它们是如何存储的?谁有权访问?他们被复制到一个不安全的环境吗?它们是否被安全处理?

相关问题