知识卡片
加密层次与加密粒度的双重权衡
内容
数据库加密要做两个相互独立的选择,各自都是安全性与性能/耦合度之间的 权衡,不能只考虑其中一个维度。加密层次决定”在谁的地盘上做加解密”: 系统中加密在文件系统层完成,实现简单但每次读写都要加解密,拖慢速度; 数据库管理系统内核层加密紧贴数据的物理存取完成,加密能力最强、与数据库 功能无缝衔接,但加重了数据库服务器本身的负载;数据库管理系统外层加密 把加解密挪到客户端或独立工具完成,不占用服务器资源、还能顺带保护网络 传输,但功能上受限、与数据库的耦合度最低。加密粒度决定”一次加密覆盖 多大范围的数据”:从数据库级到表级、记录级、字段级、字段粒度依次收窄, 粒度越粗(如数据库级),密钥管理越简单,但哪怕只查一个字段也要解密 整个块,效率极低;粒度越细(如数据项级),查询效率越高、抗攻击能力 越强(相同数据加密结果都不同,无法通过密文比对猜出明文),但密钥数量 爆炸式增长,密钥管理本身变得极其复杂。两个维度的权衡都指向同一个 结论:加密强度和安全性从来不是免费的,是用可管理性或性能换来的,因此 实践中往往只对少数敏感字段(如密码)做细粒度加密,对大部分数据保持 明文,而不是无差别地把整个数据库都加到最细粒度。
结构图:
flowchart LR
A[数据库加密决策] --> B[加密层次: 谁来做加解密]
A --> C[加密粒度: 一次加密覆盖多大范围]
B --> B1[系统中加密: 简单但每次读写都要加解密]
B --> B2[DBMS内核层: 功能最强但加重服务器负载]
B --> B3[DBMS外层: 不占服务器资源但功能受限]
C --> C1[数据库/表级: 密钥简单但解密范围大,效率低]
C --> C2[记录/字段级: 效率提升但重复值削弱加密强度]
C --> C3[数据项级: 安全性最高但密钥管理极复杂]
参考来源
- 位置:《数据库原理(微课版)》第5章《数据库安全与保护》5.3.1节"数据库
系统加密"(源文件:_epub-src/index_split_003.html)
- 结论依据:原文分别说明系统中加密"每次读写都需要进行加密、解密,会
影响数据库的读取速度",内核层加密"加重了数据库服务器的负载",外层
加密"加密功能会受到一些限制";以及数据库级加密"每次查询需要将整个
数据库解密……查询效率非常低下",数据项级加密"需要大量的密钥,在
密钥的管理使用、定期更新方面很复杂",因此可以推出两个维度各自的
安全性-成本权衡。
- 原始内容:数据库级加密……每次查询需要将整个数据库解密,包括系统
信息表等与检索目标无关的数据表,查询效率非常低下……数据项级……对
每个数据项都采用不同的密钥加密……由于数据项级加密需要大量的密钥,
在密钥的管理使用、定期更新方面很复杂。