database - 客户希望数据库中的所有数据都加密,如何对查询字段进行高效加密?
问题描述
如今,一些非技术客户询问是否所有数据都以加密形式存储(和传输)。他们不喜欢只对密码进行哈希处理的想法。
如果所有数据都是加密的,那么最佳实践是什么,例如如何进行高效的 SQL 查询?
如果所有字段都已加密,如何使用部分搜索 /JOHN/ 查询例如用户名?根据最终用户的需要加密每个字段会导致可用性问题、速度慢和 CPU 成本,95% 的数据字段不是敏感数据。
或者是否足以假设:
强制使用 HTTPS 意味着数据在 Web 浏览器客户端和后端之间以加密形式传输。
保持硬盘文件系统加密就足够了,mysql数据库以加密形式存储在最低级别,而后端应用程序真的需要以加密形式写入每个数据字段吗?
数据库和后端运行在同一台服务器上,客户端是html5。如果后端 php 源代码具有访问位于同一硬盘上的 sql 数据库的加密密钥,它是否真的提供了一些额外的安全性?
另一种方法是 100% 的安全性;假设我们将登录+密码组合设置为某种唯一的加密密钥,但是如果客户忘记了密码,我们将遇到严重的问题,根本无法访问他们的数据库列。
解决方案
“静态数据加密”是一种常见的安全要求。这通常意味着 - 正如您所指出的 - 在文件系统上加密。大多数 DBMS 都支持此功能。另一方面,将数据作为加密值写入数据库表通常需要:
- 在这个级别进行加密和解密是资源廉价的(它不是)
- 您可以继续查询加密数据而无需进一步努力(您不能)
- 自定义实现(维护成本高,容易暴露)
- 您的实现不会公开加密密钥 - 这需要将其存储在异地的某个地方
一个合理的中间立场可能是加密他们关心的任何敏感数据。这样做的好处是:
- 当数据库或其基础数据以未加密的形式从文件系统中复制出来时,敏感数据仍然是加密的
- 违反数据库安全(例如数据库用户名和密码)并不一定会导致敏感数据泄露
因此,总体而言,对数据库内的数据进行显式加密是有好处的,但性能和维护成本也不容忽视。
推荐阅读
- java - 我的浮动操作按钮在自定义列表视图的另一行中起作用。我怎样才能做到这一点?
- mapbox - Mapbox:大规模加载/渲染 3D 建筑物
- google-drive-api - 刷新 Google Photos/Google Drive API 的缩略图/基本 url 的最佳方式
- javascript - 淘汰赛 JS:图像加载
- html - HTML5CSS 网格布局中的“显示:内容”无法与 Google Chrome 一起正常工作
- kentico - 如何在 Web 部件中保存自定义表单控件输入数据?
- python - Python如何一次迭代列表100个元素,直到我到达所有元素?
- java - Intellij Idea 中忽略了 Spring Batch Tasklet
- r - 将数据框转换为矩阵时,有没有办法将每列的所有对象类型保留在数据框中?
- php - 使用 PDO 从数据库中获取单个单元格