首页 > 解决方案 > 客户希望数据库中的所有数据都加密,如何对查询字段进行高效加密?

问题描述

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

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

或者是否足以假设:

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

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

标签: databasesecuritydatabase-security

解决方案


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

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

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

  • 当数据库或其基础数据以未加密的形式从文件系统中复制出来时,敏感数据仍然是加密的
  • 违反数据库安全(例如数据库用户名和密码)并不一定会导致敏感数据泄露

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


推荐阅读