本节摘要:加密不是一把万能锁,而是四把用途不同的门:传输加密防窃听,透明数据加密(TDE)防磁盘与备份被偷,动态脱敏让低权限者"只见格式不见内容",Always Encrypted 连数据库管理员都看不到明文。本节讲清每件武器的保护边界与代价,并给一张按数据分级选型的决策表——选错武器比不加密更危险,因为它制造了虚假的安全感。
先画对手画像再谈加密,因为每种加密防的对手不同。传输加密(TLS 连接加密)防的是网络链路上的窃听——数据在网线上是密文,进实例解密处理。TDE防的是存储介质失守——数据文件、日志文件、备份文件整盘密文,磁盘被拔走、备份被拷走,拿到的都是乱码;但数据在实例内存里、在合法会话眼里完全是明文——它防不了数据库管理员,也防不了 SQL 注入。动态数据脱敏防的是越权围观——低权限用户查询手机号返回的是打码形态(一三八某某某某五六七八),但底层存储仍是明文,说明白点它是"授权的展示层",不是加密。Always Encrypted是天花板:加密解密发生在客户端驱动层,密钥根本不进数据库——服务器端全程只见密文,DBA 查表看到的手机号也是密文;代价是服务端无法对密文列做范围查询与索引查找(确定性加密可等值查),功能受限显著。
四件武器的边界用一张表收拢:
| 武器 | 防住谁 | 防不住谁 | 性能代价 | 典型对象 |
|---|---|---|---|---|
| TLS 传输加密 | 链路窃听 | 端点内所有人 | 极小 | 全部连接标配 |
| TDE 静态加密 | 磁盘与备份窃取 | 管理员与注入 | 个位数百分比 | 全库标配 |
| 动态脱敏 | 越权围观明文值 | 真正的加密需求 | 几乎为零 | 手机号证件号展示 |
| Always Encrypted | 连 DBA 在内的一切服务端 | 需要服务端计算的场景 | 明显,功能受限 | 支付卡号核心机密 |
TDE 是全库标配的默认选项,落地三步:建主钥匙、建证书、开加密。三个坑要提前知道。其一,证书必须立即备份——丢了证书等于把库锁进保险柜又吞了钥匙,备份库在别处还原时没有证书就是一堆密文;其二,可用性组与镜像环境里证书要同步到每个副本,否则副本初始化直接失败,这是第 6 章演练清单的隐藏项;其三,tempdb 会被连带加密——实例级影响,开 TDE 前要评估实例上所有库。
-- TDE 三步 USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'强口令-入密钥库'; CREATE CERTIFICATE cert_TDE_Orders WITH SUBJECT = N'订单库TDE证书'; BACKUP CERTIFICATE cert_TDE_Orders TO FILE = N'Z:\secure\cert_TDE.cer' WITH PRIVATE KEY ( FILE = N'Z:\secure\cert_TDE.pvk', ENCRYPTION BY PASSWORD = N'另一强口令' ); -- 坑一:立即异地备份 USE 订单库; CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256; ALTER DATABASE 订单库 SET ENCRYPTION ON; -- 后台逐步加密,期间可正常服务
-- 动态脱敏:三分钟给敏感列上展示层保护 ALTER TABLE dbo.客户 ALTER COLUMN Phone ADD MASKED WITH (FUNCTION = 'partial(3,4)'); ALTER TABLE dbo.客户 ALTER COLUMN IdNo ADD MASKED WITH (FUNCTION = 'default()'); GRANT UNMASK TO [CORP\csr_lead]; -- 只有坐席主管可看全量 -- 低权限会话查 Phone 得到:138****5678;管理员与 UNMASK 授权者见全量。
把字段分级再对号入座,选型就不会漏。一级机密(支付卡号、密钥本体):Always Encrypted,宁可牺牲服务端计算能力也要做到"管理员不可见",同时约束应用侧密钥管理。二级敏感(身份证、手机号、住址):TDE 全库打底加动态脱敏管展示,需要精确匹配的(登录手机号校验)走库内哈希比对而不是明文存储。三级内部(业务流水、订单内容):TDE 全库加密即可,权限层(7.1)管住访问。传输与备份:TLS 全连接标配;备份文件随 TDE 自动加密,云对象存储再叠一层服务端加密——备份是窃取者最爱的"离线全量数据库",双保险不冤枉。
一次翻车案例归档:某系统为"合规过检"给手机号列上了 Always Encrypted,上线后发现"按手机号尾号模糊查询"全数瘫痪——决策时没人问"这个字段需要服务端做什么运算"。正确路径是二级敏感方案:脱敏展示加哈希等值比对。加密选型的第一问不是"哪个最安全",而是"这个字段在服务端还需要哪些运算能力"——运算需求与加密强度成反比,这是本节最重要的一个判断。
TDE 让备份顺带加密,但还有一类场景需要独立的备份加密:库没开 TDE、或需要把备份送到外部保管时单独加密。备份加密在备份语句上直接指定证书与算法,还原时持同证书即可——证书的保管比备份本身更关键,证书加私钥要异地多份、口令分人保管,丢了证书的备份是石头。密钥轮换的纪律也一并立好:TDE 证书按年轮换(轮换只影响新写入的加密层,旧数据照常可读),备份加密证书随备份保留期同步归档——三年保留期的备份,其证书就要保三年,时间轴对不齐是密钥管理最常见的翻车点。
把加密相关的"钥匙清单"做成一张表:对象(库、备份)、密钥(主钥匙、证书)、保管位置、口令持有人、轮换周期、恢复演练日期。安全审查时这张表就是答卷——加密体系是否可靠,不看算法多新,看钥匙的生命周期是否有人负责。
数据看不懂了,但"谁在什么时候碰过数据"还要说得清——下一节进入审计与合规,给整个安全体系装上行车记录仪。