我有一个用MySql数据库支持的PHP写的网站。
我想要Encrypt整个数据库。
基本上我想要的是,如果任何人获得数据库登录凭据,一定不能读取数据。
我读过关于mysql ENCODE()和AES_ENCRYPT()函数的文章。但是这种方式导致了php脚本的很多变化,同时也带来了一些性能问题。
有没有任何技术可以加密整个数据库文件或任何其他方式来实现这一点?
发布于 2017-12-29 04:15:42
如果您正在寻找符合标准的文件系统,只需确保您的数据库使用的文件系统受到全磁盘加密的保护。
对于PostgreSQL,这通常是通过关闭PostgreSQL,将/var/lib/postgresql复制到加密驱动器,然后重命名旧目录并在/var/lib/postgresql挂载新驱动器,然后再次启动数据库服务器备份来实现的。(一旦确定迁移成功,请确保对旧目录的内容执行shred操作。)
对于MySQL/etc,您的里程数可能会有所不同,但也应该是可能的。
避免使用AES_ENCRYPT()或类似的工具。ENCODE()也帮不上忙,因为encoding is not encryption。
如果您需要加密单个记录,您可能会对我们的searchable encryption in PHP and SQL策略感兴趣,但这可能超出了这个问题的范围。我们有一个名为CipherSweet的库,它用PHP + SQL实现了可搜索的加密。
发布于 2013-03-25 15:59:19
对密码和校验和使用带有bcrypt_encode()函数的SHA512。
对于其他特定的数据使用与自己的盐从PHP文件+编码与一些机制base64_encode($your_db_table_data) + "MY_SALT_FROM_WEB".和向后,base64_decode($your_db_table_data) + MY_SALT_FROM_WEB。
你可以使用gzdeflate,它可以解密和压缩你的数据+使用salt来使解密变得困难。示例:
$data = gzdeflate($your_data) + YOUR_SALT;这将产生与数据库中一样简单的结果:��O�KWH�KQpI�r\���*JZ<��AR
对于deflate的解码,使用如下命令:gzinflate(gzdeflate($your_data_from_db + YOUR_SALT_FROM_WEB));
这是参考:http://php.net/manual/en/function.gzinflate.php
如果您想要更复杂解码,请使用char和较小数据的base64_enocode / base64_decode + YOUR_SALT_HIDDEN_FROM_WEB,数据库中的数据用于CHAR()和较小的文本。
这是我的想法,我该如何加密数据库中的数据以供VARCHAR()使用。对于文本数据,使用加密方式,并结合SALT进行压缩。
我目前没有其他的解决方案,或者签出使用AES技术加密MySQL数据:http://thinkdiff.net/mysql/encrypt-mysql-data-using-aes-techniques/
这使用了在MySQL中集成的AES_ENCRYPT和AES_DECRYPT,但这仅限于VARBINARY150或VARCHAR100。使用带有加密方法的压缩可以替代使用集成的MySQL AES函数来实现这一点。
希望这能有所帮助。
https://stackoverflow.com/questions/15609907
复制相似问题