【发布时间】:2018-02-10 14:01:53
【问题描述】:
我正在尝试提高包含敏感数据的 MySQL 数据库的安全性。我正在努力掌握一些术语。如果我正确理解了情况,有人可以告诉我:
静态加密 - 看来我可以在表级别启用此功能。使用密钥加密表中的所有数据。如果有人掌握了备份文件或获得了对服务器的物理访问权限,那么数据将受到保护。当然,这假设密钥存储在其他地方。
AES_ENCRYPT - 在我的表中插入/更新数据时,我可以使用AES_ENCRYPT('data', 'password')。通过 SELECT 查询数据时,我使用 AES_DECRYPT
假设我只是使用 静态加密,那么我是否需要在我的 PHP 代码中做任何不同的事情来查询数据?我的 PHP 代码是否需要通过我的 PDO 请求将密钥发送到数据库?或者我可以使用我的普通代码查询数据库并自动处理解密?
或者我是否误解了静态加密的作用,我需要使用
AES_ENCRYPT来代替/以及
【问题讨论】:
-
静态加密仅意味着数据存储在不被使用的地方。因此,无论您加密整个表还是使用 AES_ENCRYPT 仅加密您将存储在数据库中的某些数据,这都是静态加密。我不是加密专家,但您可以使用 PHP 或 MySQL 进行加密。根据您在哪里进行加密,将决定您需要如何解密。
-
好吧,在 MySQL 查询中使用 AES_ENCRYPT 会限制您使用可用的数据类型,您只能使用 VARBINARY、TINYBLOB、MEDIUMBLOB BLOB 和 LONGBLOB...您不能以这种方式设计好的表和索引...
-
@RaymondNijland 是的,我考虑过这个。使用“普通”表但仅将 AES_ENCRYPT 应用于通常不会被索引或在连接中使用的特定列是否正常?例如,用户表将具有 id、date_created、date_modified、address、email、telephone,然后只有 address、email 和 phone 应用了 AES_ENCRYPT。其他列没有加密?
-
您可以加密一个字段中的数据,并在另一个字段中具有相同数据的哈希值。如果需要,您可以使用哈希字段进行任何索引或搜索。示例:$phone = '555.555.5555';然后 $hashPhone = youHashingAlg($phone);然后将 $hashPhone 存储在另一个字段的数据库中。然后,当您搜索 555.555.5555 时,使用相同的算法对其进行哈希处理。并搜索哈希值并返回整个记录以及必要时解密的数据。
-
@JadedCore 这完全不安全。制作自己的哈希算法根本不安全。它很容易被攻破,这样做会危及所有数据安全。不要尝试对数据进行哈希处理; 加密数据。 “搜索”加密数据本身就是一个复杂的雷区,需要非常小心地对待。
标签: mysql encryption