【问题标题】:The customer wants all data encrypted in database, how to make efficient queries fields are encrypted?客户希望数据库中的所有数据都加密,如何对查询字段进行高效加密?
【发布时间】:2020-03-21 14:43:02
【问题描述】:

现在一些非技术客户询问是否所有数据都以加密形式存储(和传输)。他们不喜欢只对密码进行哈希处理的想法。

最佳做法是什么,例如如果所有数据都已加密,如何进行高效的 SQL 查询?
如何查询例如部分搜索 /JOHN/ 的用户名,如果所有字段都已加密?根据最终用户的需要加密每个字段会导致可用性问题、速度慢和 CPU 成本,95% 的数据字段不是敏感数据。

或者假设是否足够:

  • 强制使用 HTTPS 意味着数据以加密形式传输 在网络浏览器客户端和后端之间。

  • 保持硬盘文件系统加密就够了,mysql数据库在最底层以加密形式存储,而后端应用程序真的需要以加密形式写入每个数据字段吗?

数据库和后端在同一台服务器上运行,客户端是html5。 如果后端 php 源代码具有访问位于同一硬盘上的 sql 数据库的加密密钥,是否真的提供了一些额外的安全性?

另一种方法是 100% 安全;假设我们将登录+密码组合设置为某种唯一的加密密钥,但如果客户忘记密码,我们将遇到严重的问题,根本无法访问他们的数据库列。

【问题讨论】:

  • 我们的客户通常考虑自己加密服务器磁盘来勾选此框。 (加上使用 SSL 来查询“和传输”部分。)确保您没有为自己做太多工作 - 确保您的磁盘已加密并声明“所有数据在静态和传输中均已加密。”跨度>

标签: database security database-security


【解决方案1】:

“数据在静止时加密”是一种常见的安全要求。这通常意味着 - 正如您所指出的 - 在文件系统上加密。大多数 DBMS 都支持此功能。 另一方面,将数据作为加密值写入数据库表通常需要:

  • 在这个级别上加密和解密资源很便宜(它不是)
  • 您可以继续查询加密数据而无需进一步努力 (你不能)
  • 自定义实现(维护成本高,容易暴露)
  • 您的实现没有公开加密密钥 - 这 需要将其存储在异地的某个地方

一个合理的中间立场可能是加密他们关心的任何敏感数据。这样做的好处是:

  • 当数据库或其基础数据从文件系统中复制出来时 在未加密的形式中,敏感数据仍处于加密状态
  • 数据库安全漏洞(例如,数据库用户名和 密码)不一定会导致敏感数据泄露

因此,总体而言,对数据库中的数据进行显式加密有好处,但性能和维护成本也不容忽视。

【讨论】:

    猜你喜欢
    • 2012-02-19
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2016-07-13
    • 2018-07-24
    • 2021-11-10
    相关资源
    最近更新 更多