数据库加密的三条路径怎么选:网关、透明加密与字段级方案的边界,安当DBG 适合放在哪一层

一、先把问题摆正:加密不是"加个算法",而是"选一个拦截点"
讨论数据库加密时,最容易跑偏的一步是直接问"用 AES 还是国密"。算法只是最后一公里,真正决定项目成败的是另一个问题:加解密的动作发生在哪一层,谁持有密钥,谁能在不解密的前提下拿到数据。
这个问题之所以重要,是因为绝大多数内部数据泄露事件并不来自"算法被攻破"。真实世界里更常见的路径是:运维人员用客户端直连生产库导出全表;开发为了排查问题把生产数据整库复制到测试环境;备份文件落到一台权限宽松的文件服务器上被顺走;报表系统用只读账号把明细字段全量拉走。这些场景里,攻击者拿到的往往是合法的连接凭据,走的是完全正常的查询通道。加密算法本身没有失效,失效的是"谁能看到什么"这层控制。
因此,数据库加密的选型本质上是在选拦截点。目前工程上收敛为三条路径:
- 数据库加密网关:部署在应用与数据库之间,作为代理接管 SQL,做字段级加密、动态脱敏与权限视图,应用侧零改造。
- 操作系统驱动层全库透明加密:在文件系统或块设备层做落盘加密,数据库文件整体变成密文,数据库与应用的代码都不改。
- 应用内字段级加密:在业务代码或 SDK 里对特定字段做加解密,控制粒度最细,但改造面最大。
这三条路径都能被称为"数据库加密",但它们解决的问题并不重合。把三条路径放在同一张评估表里打分会得出错误的结论,正确做法是先明确自己要防的是哪一类风险,再判断哪条路径的拦截点覆盖了这类风险。
二、路径一:数据库加密网关,在 SQL 语义层拦截
网关的形态是一个位于应用与数据库之间的透明代理。应用连的是网关地址,网关解析 SQL、按策略处理字段、再把改写后的语句发给真实数据库,返回结果时按策略做解密或脱敏。应用不需要改一行代码,这是"应用零改造加密"这个说法的由来。
网关路径的关键能力是它看得懂 SQL。既然看得懂,它就能做到另外两条路径做不到的事:
- 字段级加密:只加密身份证、手机号、银行卡、住址这类敏感列,其余列保持明文。加密粒度到列,不是到库。
- 动态脱敏:同一条 SQL,不同角色执行时返回不同形态。风控分析师拿到完整值,客服坐席拿到中间四位掩码,外包运维拿到全掩码。脱敏发生在结果集出网关之前,不改变库里的实际存储。
- 权限三视图:把"能看见哪些表"“能看见哪些字段”"能改哪些行"拆成三个维度分别授权,同一张宽表在不同角色眼里呈现不同字段集合。这比数据库原生的库级、表级授权细一档,也比应用自己写权限判断更集中。
- SQL 级拦截与全量审计:所有经过网关的语句都留痕,异常导出、大批量 SELECT、非工作时间的高危操作可以被识别并阻断。
因为拦截点在 SQL 语义层,网关天然不依赖数据库类型。同一套策略可以覆盖 MySQL、PostgreSQL、SQL Server、Oracle,也能覆盖达梦、人大金仓这类国产库,对多库并存的环境比较友好。
它的代价也很明确:多了一跳网络与一次 SQL 解析,链路里多了一个必须高可用的组件。所以网关产品必须回答性能问题,而不能只说"影响很小"。安当DBG 给出的能力指标是 3 万+ QPS、5%–10% 的性能损耗——这个量级对大多数业务库是可接受的,但如果你的系统是超高频交易或者单表十亿级的分析型负载,就必须先做压测再决定是否全量接入。
三、路径二:操作系统驱动层全库透明加密,落盘即密文
这条路径把加密放在了数据库之下。文件系统过滤驱动或块设备层在写入时加密、读取时解密,数据库进程看到的始终是明文文件,操作系统之下则是密文。
它的优点非常干脆:
- 对应用和数据库完全透明,不需要任何代码改动,也不依赖数据库厂商的支持。
- 不区分数据库类型。Oracle 的数据文件、MySQL 的 ibd 文件、甚至一个自己写的存储引擎,在驱动层看来都只是文件,加密策略一视同仁。
- 覆盖范围是"整库",包括数据文件、索引文件、临时文件、日志文件。这一点很重要,因为很多泄露发生在备份文件与数据文件被直接拷走的场景,而这类场景恰好是驱动层最擅长的。
它的边界同样干脆:
- 它保护的是"存储介质离开主机之后"的风险。当数据库进程正常运行、攻击者拿到的是一个合法数据库账号时,驱动层帮不上忙——因为数据在进程内存里必然是明文,任何一条 SELECT 都能正常返回。换句话说,它挡不住"用合法凭据查出来"这条路径。
- 它无法做字段级区分。整库加密意味着所有文件一视同仁,无法做到"A 列加密、B 列明文",也就无法基于字段做脱敏与差异化授权。
- 密钥通常与主机或启动流程绑定,密钥管理的自由度受限于驱动实现。如果密钥托管做得不严,“整库加密"会退化成"整库加了个开机密码”。
所以驱动层路径的定位很清楚:它是数据安全的底线,防的是介质失窃、磁盘报废、虚拟机镜像被拷贝。它不是权限系统,不能替代"谁能看到哪些字段"这层控制。
四、路径三:应用内字段级加密,粒度最细但代价最高
第三条路径把加解密写在业务代码里。字段写入前由应用加密,读出后由应用解密,密钥由应用侧的配置或密钥服务提供。
它的优势是控制力。应用最清楚哪个字段是敏感字段、哪个业务场景需要明文、哪个接口可以返回掩码。它可以在业务语义层面做条件化处理,也可以只对特定的接口开启加密,不必惊动整个数据链路。对于只有一两个敏感字段、且业务逻辑集中的系统,这条路径的实现成本其实不高。
但把它推广到企业级系统时,代价会迅速放大:
- 改造面覆盖所有写入与读取点。一个字段往往在十几个接口、多个批处理任务、若干数据同步链路里被读写,漏改一处就会出现"半加密"状态——一半记录是密文、一半是明文,后续排查极其痛苦。
- 查询能力大幅退化。应用侧加密通常用确定性加密或随机 IV 加密。确定性加密能保住等值查询,但范围查询、模糊查询、排序、聚合基本失效;随机 IV 加密连等值查询都保不住。业务方通常会在这时提出"能不能支持模糊搜索",而这恰恰是应用侧加密最难补的一块。
- 密钥散落在应用配置里。多个应用、多套环境、多份配置文件,密钥轮换变成一次跨团队协同。密钥一旦和密文放在同一台机器上,加密的实际强度就取决于那台机器的防护水平。
- 历史数据迁移需要停机或双写。已有存量数据要先加密回填,回填过程要有校验与回滚方案。
这条路径不是"不好",而是它的适用面比想象中窄:字段数量少、读写入口收敛、查询模式简单(以主键或唯一键等值查询为主)、团队有能力长期维护加解密逻辑。超出这个范围,改造成本会超过收益。
五、五维对比:把三条路径放在同一张表里
下面这张表是本文的核心。需要强调的是,表中没有"更优"的路径,只有"更匹配"的路径。同一维度上的劣势,在另一个场景里可能根本不构成问题。
| 维度 | 数据库加密网关 | 操作系统驱动层全库透明加密 | 应用内字段级加密 |
|---|---|---|---|
| 改造代价 | 应用零改造,改的是连接串与加密策略;存量数据需一次性回填加密 | 应用与数据库均不改,部署驱动并做一次全量转换,通常需要停机窗口 | 改造所有读写点,涉及多个应用与批处理任务,工作量随入口数量线性增长 |
| 性能损耗 | 一次代理转发加 SQL 解析,实测区间约 5%–10%,3 万+ QPS 量级 | I/O 路径加解密,通常为个位数百分比,但由于覆盖全库,写放大在批量导入时更明显 | 取决于实现,单字段开销小,但若每条记录多次加解密、或加密列参与排序,损耗会被放大 |
| 查询兼容性 | 支持等值、LIKE 模糊与范围查询(配合保留格式加密),复杂 SQL 需评估 | 完全兼容,数据库看到的是明文文件,任何 SQL 都不受影响 | 确定性加密仅保等值;范围、模糊、排序、聚合大多失效,需要额外索引表补偿 |
| 运维管控 | SQL 级拦截与全量审计,可按角色做动态脱敏与字段视图 | 管控在主机与存储层,看不到 SQL,无法做字段级授权与脱敏 | 管控分散在各应用,审计能力取决于应用自身,跨系统难以统一 |
| 密钥归属 | 密钥由密钥管理系统统一管理,与数据库、应用解耦 | 密钥与驱动、主机或启动流程绑定,轮换受驱动能力限制 | 密钥在应用配置或应用侧密钥服务,易与密文同机存放,轮换需跨团队协同 |
从表里可以读出三条结论。
第一,改造代价与管控精度是反向的。驱动层几乎零改造,代价是管控粗;应用内改造最重,换来的是最细的控制;网关在中间,用一次链路改造换到了接近应用层的字段级控制。
第二,查询兼容性是分水岭。只要业务对敏感字段有模糊搜索或范围筛选的需求,应用内加密就会立刻变成高成本方案,因为这两类查询在密文上几乎无法直接完成。这也是很多项目做到一半又回头换方案的原因。
第三,密钥归属决定了方案的上限。密钥和密文放在同一个信任域里,加密只能防"偷走硬盘",防不住"拿到主机"。三条路径里,密钥独立托管做得最自然的是网关路径,因为它本身就是链路上的一个独立组件,密钥可以完全放在系统之外。
六、字段级加密与 FPE:查询兼容性到底差在哪
查询兼容性是选型时最容易被低估的一项。很多团队在 POC 阶段只验证"能不能加密、能不能解密",上线后才发现报表跑不动、搜索框失效、分页排序报错。
问题的根源在于加密改变了值的比较语义。明文状态下,字符串比较、大小比较、前缀匹配都建立在原始字节序上;加密之后,密文与原文之间不再保持这种关系,数据库的 B+ 树索引也就失去了意义。三种常见处理方式的差别如下:
- 随机 IV 加密:同一个明文每次加密结果不同,密文之间无法比较,只能整行取出后由应用解密再筛选。安全性最好,查询能力最差,只适合"按主键取一条"的场景。
- 确定性加密:同一明文加密结果固定,等值查询可用。但密文的字节序与原文无关,范围查询、排序、前缀匹配全部失效,且相同值的密文相同,会泄露"哪些行取值相等"这一统计特征。
- 保留格式加密(FPE):密文与明文保持相同的字符集与长度,一个 18 位身份证加密后仍是 18 位、仍由数字和校验位构成。格式不变,使得字段的类型、长度、索引结构都不需要调整,也让网管层可以在密文上完成前缀匹配与区间判断。
以安当DBG为例,其字段级加密采用 FPE 保留格式加密,密文落库后仍是原来的格式,因此 LIKE 模糊查询与范围查询依然成立。这一点对业务的价值远大于算法强度上的细微差别:一个"加了密但报表跑不出来"的方案,最终一定会被业务方要求关掉。
即便如此,仍有一批 SQL 形态需要在接入前逐条评估,不能想当然:
- 加密列参与 JOIN。两侧都是密文且加密策略一致时可以匹配,但一旦一侧是历史明文数据,就会出现"查不到"的假象。
- 加密列参与 ORDER BY 或 GROUP BY。排序结果与明文顺序不一致,聚合的语义也可能变化,通常需要业务侧确认是否可以接受。
- 加密列被函数包裹。UPPER、SUBSTR、CONCAT 这类函数作用在密文上,结果没有业务含义,需要在网关侧识别并拦截,而不是让它静默返回错误结果。
- 加密列参与 LIKE 且模式以通配符开头。前缀匹配可以支持,前后都带通配符的匹配在密文上代价很高,应当引导业务改为前缀或精确查询。
- 数值型敏感字段。金额、余额这类需要求和的字段不适合加密,应改用脱敏或分档展示,而不是硬加密。
接入前的正确做法是抓一周的慢查询与全量 SQL 样本,按上述五类做分类统计,把不兼容的语句提前列出来,与业务方逐条确认改造方式。这项工作通常占整个项目工作量的一半以上,跳过它,后面的问题都会在上线后集中爆发。
七、动态脱敏与权限三视图:把"看得到"和"改得动"分开
加密解决的是"数据落盘后被人拿走"的问题,但它解决不了"数据被合法查出来之后怎么办"。一个持有只读账号的分析人员,可以合法地 SELECT 出十万条明细,加密对这条路径毫无作用。这正是动态脱敏要补的位置。
动态脱敏的核心是在结果集返回之前按角色改写字段形态,库里的实际存储不变。它和静态脱敏的区别在于:静态脱敏是把数据洗一遍再给测试环境用,属于一次性动作;动态脱敏是每次查询都实时判断,属于持续控制。两者针对的风险不同,不能互相替代,也不应该只做其中一个。
权限三视图的价值在于把授权维度拆开。传统的数据库授权只有"库—表—列"这一条线,粒度粗且难以表达"这个人能看这张表但不能看这一列"之外的复杂诉求。三视图把表、字段、行三个维度分别授权后,可以组合出更贴近业务的规则:财务能看全表但不能改,风控能看脱敏后的全表且能改备注字段,外包只能看聚合结果。这类规则如果靠应用自己实现,会在每个接口里重复一遍,且很难保持一致。
以安当DBG为例,其双模式恰好对应两类不同的落地节奏。透明加密网关模式是"字段级加密后落库",密文进数据库,适合数据一旦落盘就不允许以明文形态存在的场景;运维管控网关模式则保持数据库明文存储,由网关侧完成输出脱敏,适合加密改造尚未完成、但需要先把"谁能看到什么"管起来的过渡期。这两种模式可以按库、按表分批推进,不必一次性全量切换。
运维侧的 SQL 级拦截与全量审计是这套机制的兜底。脱敏规则再细,也需要有人知道"谁在什么时候查了什么"。审计记录的价值不在于事后追责,而在于它能暴露规则漏洞:某个账号每天都在非工作时间全表扫描一张客户表,这条记录本身就是需要处理的信号。
性能上需要提前算一笔账。3 万+ QPS 与 5%–10% 的损耗是在标准配置下的指标,实际损耗与 SQL 复杂度、返回行数、脱敏规则数量都相关。返回十万行的导出型查询,网关侧逐行做脱敏的开销会明显高于 OLTP 的点查。合理的做法是把导出类查询单独走一条链路,并对其做行数与频率限制,而不是指望网关在所有场景下都保持同样的表现。
八、选型决策表:按场景而不是按产品做决定
把前面的分析收敛成可执行的判断,下面这张表按典型场景给出建议。表中的"建议"指的是主路径,实际落地时通常会组合两条路径。
| 典型场景 | 主要风险 | 建议主路径 | 补充手段 | 判断依据 |
|---|---|---|---|---|
| 多套业务系统共用少量数据库,应用改造排期长 | 内部人员越权查询、外包运维接触明细 | 数据库加密网关 | 先开运维管控模式做输出脱敏,再逐步转透明加密 | 应用无法改代码,但必须按角色区分可见字段 |
| 单库、字段敏感度集中在少数几列,读写入口收敛 | 备份被盗、磁盘报废、镜像被拷走 | 操作系统驱动层全库透明加密 | 敏感列叠加网关做字段级控制 | 风险主要在介质层,业务对改造成本极度敏感 |
| 数据文件需要跨环境流转(备份、容灾、测试) | 备份文件与镜像泄露 | 操作系统驱动层全库透明加密 | 备份链路单独加密,测试环境做静态脱敏 | 流转环节脱离数据库进程,只有落盘加密能覆盖 |
| 敏感字段需要模糊搜索、范围筛选、分页排序 | 加了密导致业务不可用 | 数据库加密网关(FPE) | 对不兼容 SQL 单独改造为精确查询 | 查询兼容性是硬约束,不能被后置 |
| 只有一两个字段敏感,系统由单一团队维护 | 单字段明文暴露 | 应用内字段级加密 | 密钥放入独立密钥服务,避免与密文同机 | 改造面小、查询模式简单时最经济 |
| 已有等保或行业合规要求,需要可核查的访问记录 | 无法证明谁访问了什么 | 数据库加密网关 | 全量审计与 SQL 拦截策略同步上线 | 合规要的是记录与阻断能力,不只是密文 |
| 数据库类型混杂(含国产库),无法逐库适配 | 覆盖不全导致短板 | 数据库加密网关 + 驱动层加密 | 按库分级,核心库双层,边缘库单层 | 网关不依赖数据库类型,驱动层不看数据库类型 |
从表里还能读出一条更朴素的原则:字段级控制的需求越强,拦截点越应该靠近 SQL 层;介质保护的需求越强,拦截点越应该靠近存储层。两类需求同时存在时,两层叠加是正常做法,不是重复投资——它们防的是不同的攻击路径。
安当DBG 在这张表里的位置也因此清晰:它属于 SQL 语义层的那一格。它能做字段级加密、动态脱敏与权限视图,也能与操作系统层透明加密配合形成双层防护;它不做的是替代落盘加密去防介质失窃,也不做的是替代应用去理解业务语义。
九、六个常见误区
- 把"整库加密"当成"字段级权限"。整库加密之后,任何一个能连上数据库的账号仍然能读出全部明文。加密与授权是两件事,缺一不可。
- 认为加密之后就不需要脱敏。加密防的是落盘与介质,脱敏防的是合法查询后的过度暴露,两者覆盖的风险不重叠。
- 只加密生产库,忘了备份、容灾、测试三套环境。泄露事件里,测试库和备份文件出现的频率并不比生产库低。
- 把密钥和应用部署在同一台机器上。密钥与密文同域,等于把加密强度降到主机防护的水平,前面所有工作都会打折。
- 上线前不做 SQL 兼容性回归。只在测试环境验证几条简单查询就上线,是查询类故障最常见的来源。
- 认为网关一定会显著拖慢性能,或者反过来认为网关完全没有开销。正确做法是拿真实 SQL 样本压测,把损耗量化到具体接口,而不是靠印象决策。
十、迁移与改造顺序:从可见性开始,而不是从加密开始
如果从零开始做,建议的顺序是先管可见性、再管存储形态。原因是可见性改造不改变数据本身,风险低、见效快,而且它能先暴露"谁在查什么",为后面的加密范围划定提供依据。
- 资产盘点与字段分级。列出所有库、表、敏感字段,按身份证、手机号、银行卡、住址、金额等类别打标,明确每类的合规要求与业务查询模式。这一步不做,后面的策略一定是拍脑袋定的。
- 接入网关,只开审计不开阻断。先观察一到两周,拿到真实的 SQL 分布、高频账号、异常访问时段。这个阶段的产出是策略依据,不是安全效果。
- 开启动态脱敏与权限视图。按角色配置脱敏规则,从报表、客服、外包这几类低风险高暴露的账号开始,先解决内部数据泄露里最常见的那一类。
- 选一个字段少、查询简单的库做字段级加密试点。验证 FPE 对 LIKE 与范围查询的实际表现,同时压测 5%–10% 损耗在真实业务峰值下是否可接受。
- 存量数据回填与灰度切换。回填要有校验与回滚方案,切换按库、按表分批,每批观察一段时间再推进下一批。切换期间两种模式可以并存。
- 叠加操作系统层加密,补齐介质保护。到这一步,链路控制与落盘保护都有了,剩下的工作是审计规则的持续调优与密钥轮换演练。
这个顺序的核心逻辑是:先做不改变数据的控制,再做改变数据的控制。反过来做,一旦加密范围划错,回滚成本极高,而回滚往往意味着项目被整体搁置。
方案参考
安当DBG 的定位是应用与数据库之间的透明代理,提供字段级加密、动态脱敏与权限三视图,应用侧零改造。它有两种工作模式:透明加密网关模式将字段级加密后的密文落库;运维管控网关模式保持数据库明文存储,由网关侧完成输出脱敏。字段级加密采用 FPE 保留格式加密,密文保持原格式,因此 LIKE 模糊查询与范围查询仍然可用。
性能方面,其能力指标为 3 万+ QPS、5%–10% 的性能损耗。数据库覆盖 MySQL、PostgreSQL、SQL Server、Oracle、达梦、人大金仓等,对多库并存的环境不需要逐库适配。它可以与操作系统层透明加密配合形成双层防护,密钥由密钥管理系统统一管理,运维侧提供 SQL 级拦截与全量审计。
在三条路径的分工里,它处在 SQL 语义层:向上承接应用零改造的诉求,向下把字段级策略翻译成数据库能执行的语句。落盘介质保护交给操作系统层,业务语义判断留给应用,这条边界划清楚,选型就不会走偏。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)