从2012 年 Smashing Magazine 的一篇文章中,我们做出了相当大胆的声明来避免 MySQL 本身中的 AES。或者正如他们所说的“为什么要在 MySQL 中避免使用 AES?”。但是,如果您搜索 SQL 加密,您通常会找到AES_ENCRYPT
提到的 from (My)SQL。我并不是说许多搜索结果意味着该陈述是不真实的,但它只是让我思考:下面引用的三个原因真的是真的吗?
对于“为什么 PHP 的 Mcrypt 优于 MySQL 的 AES 功能”的原因,这里的安全专家怎么看:
- MySQL 需要在应用程序和数据库之间建立数据库链接,以便进行加密和解密。如果数据库发生内部故障,这可能会导致不必要的可伸缩性问题和致命错误,从而使您的应用程序无法使用。
我无法理解这个问题;如果您在 php 中加密/解密,您还需要使用数据库链接将值存储在数据库中吗?如果在 php 端解密失败,这是否也会导致应用程序失败?这里有什么意义?
- PHP 可以在没有数据库连接的情况下完成相同的 MySQL 解密和加密,这提高了应用程序的速度和效率。
Php 可以“付出一些努力”来提高应用程序的速度吗?因为您在通过线路发送之前进行了加密,所以应用程序(将处理加密)获得了更高的速度和效率?这怎么可能是真的?在我看来,它是关于“最好的工作工具”,所以“php 也有能力”的说法并不意味着它本身也是最好的工具。它只是一个工具,没有争论为什么它是最好的工具。
- MySQL 经常记录事务,因此如果数据库的服务器受到攻击,那么日志文件会同时生成加密密钥和原始值。
如果您加密数据库中的值并打开日志记录,这是一个有效点。至少你应该关闭通用查询日志,因为二进制日志只记录事务但不记录选择语句。如果您根本不需要日志记录,您只需声明“如果您在 MySQL 中使用 AES,请关闭所有日志记录”。这对我来说听起来比“如果你想在 MySQL 中使用 AES,就在 php 中使用”更有效。
任何人都可以向我解释为什么上述几点可能是有效的,以及为什么 - 一般来说 - 在你的 (php) 应用程序中加密你的数据而不是在 (My)SQL 中加密你的数据更好。