老旧系统不能改代码?用脚本+TDE实现数据库凭据动态轮换与配置文件加密

张开发
2026/4/21 20:39:54 15 分钟阅读

分享文章

老旧系统不能改代码?用脚本+TDE实现数据库凭据动态轮换与配置文件加密
一、一个典型困境VB6 系统还在用明文密码连生产库我们公司维护一套 2008 年开发的医院收费系统前端是 VB6后端连 MySQL。客户最近要做等保三级测评测评老师指出“配置文件 db.ini 里明文写死了数据库账号密码且长期未更换——这属于高风险项。”但现实很无奈原开发商已消失无源码、无法编译系统每天处理上万笔交易不能停机、不能重装应用启动后直接读 db.ini不支持外部注入凭据。问题本质系统无法改造但安全要求必须满足。二、破局思路外挂式安全加固 —— 脚本动态更新 TDE 透明加密既然改不了应用那就在它外面构建一个“安全代理层”[安当 SMS] ↓每小时 [自动化脚本] → 获取临时数据库账号 ↓ [覆盖 db.ini] → 写入新用户名/密码 ↓ [安当 TDE] → 对 /app/config 目录实时 SM4 加密 ↓ [VB6 应用] → 无感知读取配置正常连接数据库三大优势零代码改造应用完全无感凭据动态轮换每小时自动更新泄露窗口极小配置文件防窃取即使被拷走也是 SM4 密文。三、第一步用脚本从 Secrets 管理系统获取动态凭据场景db.ini 原始内容[Database] Host192.168.10.50 Port3306 Usercharge_app PasswordCharge2018!自动化脚本Python 示例# /opt/scripts/update_db_cred.py import os import configparser import requests SMS_ADDR https://sms.internal:8200 ROLE_ID charge-app-role SECRET_ID os.getenv(APP_SECRET_ID) # 从安全存储读取 # 1. 登录安当 SMS auth_resp requests.post( f{SMS_ADDR}/v1/auth/approle/login, json{role_id: ROLE_ID, secret_id: SECRET_ID} ) token auth_resp.json()[auth][client_token] # 2. 获取临时数据库凭据 cred_resp requests.get( f{SMS_ADDR}/v1/db/prod/charge-system/creds/app-role, headers{X-Vault-Token: token} ) creds cred_resp.json()[data] # 3. 更新配置文件 cfg configparser.ConfigParser() cfg.read(/app/config/db.ini) cfg[Database][User] creds[username] cfg[Database][Password] creds[password] with open(/app/config/db.ini, w) as f: cfg.write(f) # 4. 可选重启服务或发送重载信号 os.system(systemctl reload charge-app) # 若应用支持热重载调度方式Linuxcrontab -e 添加 0 * * * * python3 /opt/scripts/update_db_cred.pyWindows任务计划程序每小时执行一次 PowerShell 脚本凭据有效期建议1 小时与 SMS 中 TTL 一致四、第二步用 TDE 透明加密保护配置文件即使凭据是临时的db.ini仍是明文若被未授权用户读取仍可获得当前有效密码。因此需对配置文件实施存储层加密。TDE透明加密 方案能力对指定目录如 /app/config/实时加密使用 国密 SM4 算法满足《GM/T 0002-2012》加密对应用透明——应用读写时自动加解密支持 麒麟 V10ARM64、统信 UOS、Windows Server。配置策略JSON{ protected_paths: [/app/config/], allowed_processes: [charge.exe, update_db_cred.py], encryption_algorithm: SM4-GCM, audit_log_enabled: true }效果验证# 普通用户尝试查看配置 $ cat /app/config/db.ini %QxK!← 返回乱码 # 应用进程读取正常 $ ./charge.exe → 成功连接数据库内部自动解密关键点即使攻击者拥有服务器 root 权限也无法读取明文配置——因为 TDE 在内核层拦截 I/O。五、权限与审计三层防护闭环层级控制措施凭据获取SMS 策略限制仅 charge-app-role 可读 db/prod/...配置更新脚本运行身份为 appuser无权被其他用户调用文件访问TDE 进程白名单 OS 文件权限chmod 600同时所有操作均生成审计日志SMS 记录谁在何时申请了凭据TDE 记录哪些进程尝试访问加密文件脚本日志更新成功/失败状态。合规价值这些日志可直接用于等保“安全审计”和“访问控制”条款举证。六、真实效果某三甲医院项目落地成果系统类型VB6 MySQL 5.7Windows Server 2012改造周期2 人日部署脚本 TDE 策略配置运行效果数据库凭据每小时自动轮换运维人员无法查看当前密码配置文件备份为密文无法还原七、适用场景扩展该方案已在多个行业落地行业系统类型配置文件安全收益政务Delphi 户籍系统config.cfg防内部越权 备份加密制造C# MES 终端App.config满足等保 信创适配教育PHP 学籍系统.env测试/生产凭据隔离能源Java 调度平台jdbc.properties凭据生命周期可控共同前提应用在启动或重连时会重新读取配置文件可部署脚本和 TDE 驱动无需改应用八、给 ISV 和系统集成商的建议不要放弃存量系统——安全加固不等于重构优先选择支持国密和信创的方案避免后期返工将脚本纳入监控体系凭据更新失败应触发告警TDE 性能影响极小配置文件通常 KB 级I/O 开销可忽略。真正的安全是在约束条件下做到风险可控而非追求完美架构。文章作者五台

更多文章