SCADA数据库加密与运维数据脱敏实战:从风电场安全加固到TDE透明加密
密评现场检查,测评员在风电场升压站的一台历史数据服务器前提了一个要求:把这套 SCADA 数据库停掉,我要直接读数据文件。 值班人员照做了。测评员用最朴素的办法------在数据文件里检索明文------几分钟就搜出了两类东西:一类是风机运行数据里的机组编号、故障代码、场站坐标 ,另一类是运维工单表里的值班人员姓名、工号、手机号 。数据库里确实配了访问控制,账号权限分得也很细,但测评员的结论是:"存储层面未见有效加密措施,敏感数据明文落盘,此项不予通过。"
这个现场很典型。风电场的安全建设往往集中在边界------纵向加密认证装置、横向隔离装置、防火墙策略都配得很齐,因为这些是"看得见的安全"。但数据在磁盘上是什么形态,很少有人真的停库去翻一遍。而密评的判断标准恰恰是:不看你的配置写了什么,看数据实际是不是密文。
全文结构:
- 一、检查现场:测评方在现场做了什么
- 二、现场暴露的三类明文问题
- 三、SCADA 数据的五个特殊性,决定了加密路线
- 四、SCADA 数据库加密:TDE 落地路径与三个坑
- 五、运维数据脱敏:范围、方法与边界
- 六、现场怎么自证:可复现的验证动作
- 七、验收清单
一、检查现场:测评方在现场做了什么
密评的现场检查不是"看材料",而是一系列可复现的技术动作。了解这些动作,才知道该往哪里加固。风电场的 SCADA 系统上,测评方的动作通常集中在六个方面。
| # | 现场动作 | 查的是什么 | 对应的密码应用要求 |
|---|---|---|---|
| 1 | 停库后直读数据文件,检索明文 | 存储层是否真的加密 | 重要数据机密性 |
| 2 | 翻看备份文件与备份介质 | 备份是否同步加密 | 重要数据机密性 |
| 3 | 抓取数据库连接与运维通道流量 | 传输是否加密、算法是否合规 | 通信数据机密性 |
| 4 | 查看敏感字段样本值 | 展示层/导出数据是否脱敏 | 个人信息保护、访问控制 |
| 5 | 询问并核查密钥存放位置 | 密钥是否受硬件保护、是否可导出 | 密钥管理 |
| 6 | 校验日志与操作记录 | 记录是否带完整性保护 | 操作行为不可否认性、日志完整性 |
其中第 1 条是最有杀伤力的,因为它绕开了所有应用层和配置层的说法,直接看数据的物理形态 。而多数风电场的问题,恰恰就出在这一条上------边界防护做得再好,数据在磁盘上是明文,"重要数据机密性"这一项就没有达标。
1.1 为什么"权限分得细"不等于"数据是密的"
这是现场最常出现的一次沟通错位。运维方的理由是:数据库账号权限划分得很清楚,只读账号看不到敏感表,应用账号只能访问自己的库------数据是"受控"的。
测评方的判据是:访问控制保护的是"通过数据库访问数据的路径",加密保护的是"数据本身"。 这两件事防的是完全不同的威胁:
- 访问控制防的是"合法通道里的越权访问"------账号被盗、权限配置错误、SQL 注入。
- 加密防的是"绕过数据库这条通道拿走数据"------拷走数据文件、拿走备份磁带、物理接触磁盘、虚拟机快照外泄。
风电场地处偏远、运维外包比例高、设备下架报废流程不总是严格,"数据文件或备份介质脱离系统控制"这件事发生的概率并不低。这时候访问控制完全失效,只有加密还能兜住。两者的关系是"都要有",不是"有一个就够"。
1.2 电力场景还多一层要求:分区与纵向认证
风电场属于电力监控系统范畴,除了一般的等保与密评要求,还要遵守《电力监控系统安全防护规定》(国家发展改革委令2024年第27号,2025年1月1日起施行)确立的"安全分区、网络专用、横向隔离、纵向认证"原则。
落到数据加密这件事上,这条原则带来的直接约束是横向隔离与纵向认证装置的边界,不等于数据加密 :横向隔离装置解决的是"生产控制大区和管理信息大区之间不能双向随意通信",纵向加密认证装置解决的是"广域网链路上的通信要加密认证"。它们保护的是通道,不是落地后的存储。 数据从主站同步到风电场本地历史库、从实时库落到磁盘、从生产区备份到管理区,这几个环节的数据形态,都需要单独有加密措施覆盖------边界装置管不到磁盘上的明文。
二、现场暴露的三类明文问题
把现场翻出来的问题归类,风电场 SCADA 系统上的明文数据集中在三类。
2.1 第一类:实时/历史数据明文落盘
SCADA 的时序数据(风机功率、风速、桨距角、机组状态、告警记录)写入频繁、体量大,通常存在专用的历史数据库中。这类数据在磁盘上一般是明文。
为什么这一项必须整改 :这类数据看起来"只是运行参数",但组合起来可以还原出场站的发电能力、机组运行特征、设备健康状态,属于企业核心生产数据。风电场坐标数据与机组编号关联后,还可能构成对关键基础设施的位置画像。按 GB/T 39786-2021 对"重要数据机密性"的要求,这类数据需要采取密码保护措施。
2.2 第二类:备份与副本数据未加密
这是比第一类更严重、也更常被忽略的问题。典型情况包括:
- 数据库的定时备份文件未加密,直接落在共享存储或备份服务器上;
- 主备同步的备库数据文件未加密;
- 虚拟机快照包含未加密的数据库磁盘;
- 历史数据归档导出为 CSV/文本文件后未加密,长期存放在文件服务器上。
为什么说更严重:备份文件往往是整套系统里最容易拿到的一份数据。 它通常不带访问控制、不和业务绑定、放在相对宽松的存储区、还可能被复制到多个位置。
2.3 第三类:运维数据未脱敏
SCADA 系统的数据库里除了生产数据,还有运维相关的表:值班日志、操作工单、缺陷记录、人员信息表。这些表里往往有姓名、工号、手机号、岗位等个人信息。
按 GB/T 35273-2020《信息安全技术 个人信息安全规范》和 GB/T 37964-2019《信息安全技术 个人信息去标识化指南》的思路,个人信息在存储、使用、对外提供等环节都应采取去标识化或脱敏措施;《个人信息保护法》对个人信息的处理也提出了相应要求。
运维数据脱敏的实际难点不在技术,而在边界界定:哪些字段要脱敏、脱敏到什么程度、脱敏之后业务还能不能用。这一部分在第五节展开。
三、SCADA 数据的五个特殊性,决定了加密路线
通用的数据库加密方案直接搬到 SCADA 上通常会出问题,因为它有五个特殊约束。
3.1 写入频率高,不能有明显性能损耗
SCADA 的时序数据是持续高频写入的,一台风机每秒可能上报多个测点,整场几百台机组,写入压力可观。加密方案引入的额外开销必须能被业务承受。
实践中的判断标准不是"实验室里性能下降多少",而是在业务高峰时段,加密后的数据写入延迟是否仍在允许窗口内。这决定了不应该在全链路做逐条加解密,而应该把加密下沉到存储层,由数据库自身的加密机制承担,避免应用层逐字段加解密带来的开销。
3.2 涉及实时控制,不能停机改造
电力监控系统的可用性要求高,风电场远程集中监控场景下更不允许长时间停机。改造方案必须支持在线或短窗口实施,不能采用"导数据到临时库、加解密、再导回去"这种需要长时间停业务的做法。
3.3 历史数据长期保存,验签与解密能力要长寿
电力运行数据有长期留存要求。这意味着加密方案必须在很多年后仍然可解密------密钥的长期可用性、算法标准的长期有效性、密钥代际更替时的兼容策略,都要在设计阶段考虑到。一个"三年后找不到当时那把密钥"的加密方案,等于把历史数据变成了永久无法读取的垃圾。
3.4 跨区流动,落地形态会变
生产控制大区和管理信息大区之间横向隔离,数据从生产区向管理区的流动通常通过隔离装置单向传输,或通过特定的数据交换机制。数据每跨一次边界,落地的形态、存储的位置、保护它的措施都可能变化。 生产区加密了,不等于通过隔离装置送到管理区之后还是加密的;实时库加密了,不等于归档到文件服务器后还是加密的。
这一条要求加密方案的设计视角必须是数据全链路,而不是"某个数据库加了密"。
3.5 多方运维,密钥归属必须清晰
风电场的运维往往涉及自有运维人员、集团运维、设备厂商远程支持、外委服务商等多方。只要有一方能直接接触到数据库文件或备份介质,加密的密钥归属就必须明确------数据加密的密钥不能由运维方掌握,否则加密形同虚设。
四、SCADA 数据库加密:TDE 落地路径与三个坑
在五个约束下,风电场 SCADA 数据库加密的可行路线中,透明加密(TDE)通常是改造代价最小、覆盖面最完整的一条。
4.1 为什么通常从 TDE 入手
TDE 的原理是把加解密动作放在数据库的存储层:数据写入磁盘前由数据库引擎加密,从磁盘读取后解密,应用程序完全无感,业务代码零改造。
它对 SCADA 场景的适配性体现在四点上:
- 应用无感:SCADA 应用、报表工具、历史数据查询接口都不需要改,避免了动电力监控应用软件的高风险;
- 覆盖完整:保护的是整个数据文件,不存在"漏掉某张表、某个字段"的问题,不存在应用层加密常见的遗漏;
- 性能可控:加解密在存储层完成,通常可利用数据库自身的优化机制,且只对落盘数据操作,内存中仍是明文,对查询性能影响相对可控;
- 实施窗口短:多数数据库的 TDE 支持在线开启,配合短时维护窗口即可完成存量数据加密。
需要清楚 TDE 的边界 :它防的是"数据文件或磁盘被拿走",不防"通过数据库账号把数据查走"。后者需要靠访问控制、字段级加密(对极少数高敏字段)、以及审计来兜。所以 TDE 是必做的第一层,不是全部。
4.2 落地路径
TDE 的实施通常按下面的顺序推进。
第一步:确认加密范围。 不是所有库都要加密。优先覆盖存放生产运行数据、场站信息、运维人员信息、工单记录的库。范围一旦确定,要一并纳入备库、备份、归档文件、快照------只加密主库、不加密备份,等于白做。
第二步:设计密钥体系。 这是整个方案里最关键、也最容易做浅的一步。合理的分层是:
- 根密钥:由硬件密码模块保护,不可导出,是整个密钥体系的可信起点;
- 主密钥:由密钥管理系统统一纳管,负责保护数据密钥;
- 数据密钥 :实际执行加解密,按库或按表派生,做到一库一密甚至一表一密。
这样分层的好处是:任何一个数据密钥泄露,影响面被限制在最小范围;轮换数据密钥不需要触碰根密钥;密钥的产生、分发、轮换、销毁全过程有记录可查。
第三步:在线开启并回溯加密存量数据。 开启 TDE 后新写入的数据自动加密,但存量数据需要一轮回溯加密。这一轮要安排在维护窗口内,并预留回滚方案。
第四步:同步保护备份链路。 备份落盘加密、备份介质管理、备份文件的完整性校验,都要一并覆盖。
第五步:业务回归验证。 加密后要确认三件事:历史数据查询正常、报表统计结果不变、跨区数据同步链路未被破坏。
4.3 三个坑
坑一:备份没加密。 前面反复强调,因为这是最高频的失守点。做了 TDE 之后,导出的备份文件本身可能是加密的(取决于备份工具与数据库的配合方式),但也可能不是------备份出来的是一个 SQL 文本文件,里面条条都是明文。这一条必须在现场验证,不能假设。
坑二:只加密主库、漏掉同步链路与归档。 主备同步的备库、灾备中心的副本、历史归档文件,常常沿用主库之外的部署方式,需要单独确认。
坑三:密钥跟着数据走。 把密钥和数据放在同一台服务器、同一个备份集里,等于把钥匙和锁放进同一个盒子。特别是风电场这类无人值守站点,密钥必须与数据分离存放,且根密钥由硬件保护 。运维实践中的判断标准很简单:拿到这台服务器的完全控制权,能不能自己解密出数据? 能,就说明密钥管理没做到位。
4.4 数据保护:抗勒索与可恢复性
加密解决了"数据被读走"的问题,还有一类风险需要单独覆盖------数据被加密锁死。
电力生产数据的破坏性攻击(勒索加密、恶意删除、篡改历史记录)在能源行业的实际风险并不低,尤其是当运维终端与生产系统存在薄弱连接时。这类攻击的特征不是"偷走",而是"让你用不了",对电力监控系统的危害同样严重。
对应的能力要求是数据副本的不可篡改与快速可恢复 :关键数据保留多个副本并做完整性校验,副本不能被普通运维权限删除或修改,发现被篡改或加密后能在窗口内恢复到可用状态。这一层和加密层是互补的------加密让拿到数据的人读不懂,抗勒索让数据被毁时还能拿回来。
4.5 工程落点:让加密与密钥管理成为可举证的能力
密评现场认可的是"能复现的证据",而不是"配置里写了加密"。把上面的路线落到工程能力上,需要三件事同时成立:数据在磁盘上是密文、密钥与数据分离且受硬件保护、密钥的全生命周期操作有记录可查。
安当在风电场这类新能源场站的数据安全加固里,通常这样承接这三件事:数据库透明加密 在存储层完成整库加密,SCADA 应用、历史数据查询接口、报表工具都不需要改造,把加密面从"逐个字段"扩展到"整个数据文件"------这样"存储层面未见有效加密措施"这条现场检查结论就不再成立,加密范围也可以按备案要求向备库、备份、归档延伸;密钥管理系统 承接密钥分层与全生命周期管理,数据密钥按库按表派生、密钥与数据分离存放、轮换与销毁全过程留痕,根密钥交由硬件密码模块保护且不可导出,让"密钥是否受保护"这一项在现场可以直接核实;数据保护能力覆盖抗勒索与快速恢复,关键数据的多个副本不可被普通运维权限删除或篡改,数据被加密锁死或恶意删除后能在要求的窗口内恢复到可用状态。
这三件事合起来,正面回答的正是现场最容易一次性否决的两个问题:"数据是不是密的"和"密钥在谁手里"。 前者靠存储层加密做全覆盖,后者靠密钥与数据分离加硬件保护做兜底。
五、运维数据脱敏:范围、方法与边界
如果说数据库加密解决的是"存进去的数据不能被拿走",脱敏解决的是"取出来的数据不能被滥用"。SCADA 系统的运维数据脱敏,要处理三个问题。
5.1 脱敏范围怎么定
先把数据库里涉及个人信息的表列出来,通常是这几类:
| 数据类别 | 典型字段 | 敏感度 | 处理建议 |
|---|---|---|---|
| 人员基础信息 | 姓名、工号、手机号、身份证号 | 高 | 存储加密 + 展示脱敏 |
| 岗位与组织信息 | 部门、岗位、班组、值班安排 | 中 | 按需脱敏,保留岗位维度 |
| 操作与工单记录 | 操作人、操作时间、操作内容 | 中高 | 保留主体标识,对外脱敏 |
| 设备与场站信息 | 机组编号、场站坐标、设备参数 | 高(生产数据) | 存储加密,对外模糊化 |
| 运行与故障数据 | 功率、风速、故障代码、告警 | 中高(生产数据) | 存储加密,分析场景聚合化 |
定范围的实用方法是按"使用场景"倒推 ,而不是按"字段敏感度"一刀切。同一张表,内部运维查询需要看到操作人实名(否则无法追责),对外报送或数据分析时需要脱敏。所以脱敏策略通常是多套并行的,按调用方身份和应用场景选择。
5.2 脱敏方法与适用边界
| 方法 | 原理 | 适用场景 | 局限 |
|---|---|---|---|
| 遮蔽掩码 | 部分字符替换为掩码 | 展示层,如手机号中间四位 | 不可逆,不能用于需要关联分析的场景 |
| 假名化替换 | 用稳定假名替换真实标识 | 需要跨表关联的分析场景 | 假名映射表本身要严格保护 |
| 泛化 | 降低数据精度,如坐标模糊到区域 | 对外统计、位置画像场景 | 精度损失需业务确认 |
| 保留格式加密 | 加密后仍保持原格式与长度 | 需精确检索又需加密的字段 | 算法实现要求高,需合规实现 |
| 聚合发布 | 只发布统计结果,不发布明细 | 对外数据共享、监管报送 | 小样本下仍可能还原个体 |
风电场的实际组合通常是:存储层用加密(覆盖全量数据),展示层用遮蔽掩码(保护个人标识),对外共享用泛化或聚合(降低可还原性),少数需要精确检索的高敏字段用保留格式加密。
5.3 边界:脱敏不等于匿名
这是实践中最容易产生误解的一点。脱敏后的数据不等于匿名数据。 只要数据中保留了对个体的稳定标识(哪怕是假名),并且存在可以关联到真实身份的辅助信息(如工号规则、值班排班表、场站人员名单),就存在被还原的可能。
判断脱敏是否有效,应该做重识别测试 :把脱敏后的数据与运维团队能接触到的其他信息(排班表、通讯录、工单系统、门禁记录)做关联,看能不能还原出具体个人。关联后能定位到人,这版脱敏方案就是不够的,需要进一步泛化或改为聚合发布。
5.4 脱敏不能只做在数据库
还有一个常见误区:只在数据库层做了脱敏,但导出接口、报表工具、数据同步链路、运维查询工具都各自有数据出口。任何一条出口没做脱敏,就等于没做。
正确的做法是把脱敏做成数据出口的统一关卡:所有对外提供数据流的通道都经过同一套脱敏策略,策略集中配置,而不是在各个应用里各写一套。这样策略变更时只需要改一处,也不会出现"改了三处漏了一处"的情况。
六、现场怎么自证:可复现的验证动作
密评现场的说服力来自可复现的验证。与其准备一堆说明文档,不如把下面这些动作验证好,现场能当场演示一遍。
6.1 验证存储层加密
bash
# 思路:在数据库中写入一条带唯一标记的测试数据,停库后直接读取数据文件
# 若能在文件中检索到明文标记,则存储层未加密
# 1) 写入标记(在测试环境执行,使用只读审计账号确认写入成功)
# 实际执行以数据库客户端为准,连接串主机名统一使用占位
mysql -h scada-db.example -u test_w -p -e \
"INSERT INTO history_tag(tag, val) VALUES('ENCRYPT_PROBE_0915', 1);"
# 2) 停库后直接检索数据文件(这一步需要停机窗口,现场演示前先确认业务侧允许)
grep -c "ENCRYPT_PROBE_0915" /var/lib/mysql/scada_history/history_tag.ibd
# 输出 0 = 未检索到明文,存储层加密生效
# 输出非 0 = 明文落盘,此项不合格
这条命令的价值在于它绕开了所有配置和说明文档,直接验证数据形态。建议在正式测评前自己先跑一遍,把输出结果留档------这既是一次自查,也是一份现场可以拿出来的证据。
6.2 验证备份文件
bash
# 备份文件是否加密,最直接的验证方式是检索明文
# 以逻辑备份为例,检查导出的 SQL 文本中是否含敏感字段明文
grep -c "手机号\|身份证\|场站坐标" /backup/scada_full_$(date +%Y%m%d).sql 2>/dev/null
# 物理备份则直接检查备份集文件
strings /backup/scada_physical.bak 2>/dev/null | grep -c "ENCRYPT_PROBE_0915"
关键点:备份加密必须单独验证,不能因为主库加密了就假定备份也加密。
6.3 验证密钥与数据分离
bash
# 检查密钥是否与数据同机存放(这是最高频的失守点)
# 目的:确认拿到服务器完全控制权的人,无法自行解密数据文件
# 1) 确认本机不存在可用于解密的密钥材料或凭据
ls -la /etc/scada/ /opt/app/conf/ 2>/dev/null | grep -iE "key|secret|cred|kms"
# 2) 确认密钥管理系统为独立部署且需经认证访问
# 密钥的取用应通过受保护的接口,并留有审计记录
curl -s -o /dev/null -w "%{http_code}\n" \
-H "Authorization: Bearer $KSP_API" https://ksp.example/api/v1/key/status
# 3) 确认根密钥由硬件密码模块保护、不可导出(以设备接口核实,不要凭文档判断)
# 具体查询命令以设备厂商文档为准,此处不臆造指令
第 3 条特意不写具体命令------密码设备的密钥保护状态查询命令因厂商和型号而异,凭印象手写一个命令给读者,在现场跑不出来反而误事。正确做法是查设备厂商文档,或直接请设备侧确认根密钥的可导出属性,并索取书面说明作为举证材料。
6.4 验证脱敏边界
脱敏的有效性验证不能只看"字段是不是被替换了",要做关联测试:
- 取一份脱敏后的数据集(比如对外报送的运维工单数据);
- 用运维团队日常能接触到的信息(排班表、通讯录、门禁记录、班组群里的值班通知)尝试关联;
- 检查能否还原出具体个人或具体机组的精确信息。
这个测试较理想的是由不属于脱敏实施方的人来做,自己测自己容易有盲区。关联成功即说明脱敏强度不够。
6.5 验证跨区落地形态
数据从生产控制大区流向管理信息大区后,落地形态是否仍受保护,需要单独验证:
- 通过隔离装置传输的数据,在两侧的落地形态分别是什么?
- 管理信息大区的分析库、报表库里,数据是密文还是明文?
- 归档到文件服务器的历史数据,是否仍加密?
这一条的验证方式就是沿着数据实际流动的路径走一遍,在每一个落地节点检查数据形态,而不是只看链路的某一端。
七、验收清单
风电场 SCADA 数据安全自查用。每一条都给出可验证判据。
| # | 验收项 | 达标判据 |
|---|---|---|
| 1 | 存储层加密 | 停库直读数据文件,检索不到敏感数据明文 |
| 2 | 加密覆盖完整 | 实时库、历史库、配置库均已覆盖,无遗漏库表 |
| 3 | 备份加密 | 逻辑备份与物理备份文件均验证为密文,有验证记录 |
| 4 | 副本同步加密 | 备库、灾备副本、归档文件、虚拟机快照均已覆盖 |
| 5 | 密钥分层 | 根密钥/主密钥/数据密钥分层清晰,各自职责明确 |
| 6 | 根密钥硬件保护 | 根密钥由密码模块保护且不可导出,有书面证明 |
| 7 | 密钥与数据分离 | 拿到数据所在服务器的完全控制权,无法自行解密 |
| 8 | 密钥轮换 | 数据密钥有轮换周期与执行记录,轮换不影响历史数据解密 |
| 9 | 长期可解密 | 历史数据在多年后仍可解密,密钥代际兼容策略明确 |
| 10 | 传输加密 | 数据库连接与运维通道流量加密,实测无明文协议 |
| 11 | 跨区落地 | 数据在隔离装置两侧及各落地节点的形态已逐一确认 |
| 12 | 脱敏范围 | 按使用场景定义脱敏策略,多套策略按调用方区分 |
| 13 | 脱敏出口统一 | 所有数据出口经同一套脱敏策略,无未覆盖的旁路 |
| 14 | 重识别测试 | 脱敏数据与运维可获取信息关联后无法定位到具体个人 |
| 15 | 高敏字段可检索 | 需精确检索的字段用保留格式加密,未另建明文字段旁路 |
| 16 | 抗勒索与恢复 | 关键数据有多副本,副本不可被普通运维权限删除或篡改 |
| 17 | 恢复可演练 | 能在要求的窗口内完成数据恢复,有演练记录 |
| 18 | 日志完整性 | 关键操作与密钥取用日志有完整性保护,可发现本地篡改 |
| 19 | 双轨对齐 | 同一套措施同时满足等保"有措施"与密评"密码技术合规"口径 |
| 20 | 现场可演示 | 上述关键项均可在测评现场当场复现,非仅文档声明 |
风电场 SCADA 的数据安全,最容易走的两条弯路是:把边界装置当成数据加密 (纵向加密认证装置保护的是通道,管不到磁盘上的明文),和把访问控制当成数据保护 (账号权限分得再细,也拦不住有人把数据文件拷走)。这两条弯路的共同点是------它们都在回答"谁能进来",而没有回答"数据本身是不是密的"。
真正稳妥的思路是把保护做成两层:存储加密让数据在磁盘上是密文,覆盖主库、备库、备份、归档全链路;脱敏让数据在流出去的时候不可还原,并且所有出口走同一套策略。 再补上密钥与数据分离、抗勒索与可恢复这两件事,数据即使脱离了系统控制,也既读不懂、又拿不回来用------这才是密评现场那把"停库直读"的检查能真正过关的底气。
你们的 SCADA 系统现在做到哪一层------边界装置配齐了但数据还是明文,还是已经上了库加密但备份没覆盖?密评现场被追问最多的是存储加密还是密钥归属?评论区聊聊,一起看看还差哪一步。
文章作者:安当加密技术负责人