Skip to content

配置文件敏感数据加密 #565

@LordofAvernus

Description

@LordofAvernus

需求描述(Describe)

  1. 基于安全考虑,配置文件中的密码字段需要支持加密存储。
  2. 由于历史原因,配置文件中可能同时存在加密密码和明文密码,系统需要能够:
  • 自动识别并解密加密的密码
  • 如果解密失败(可能是明文密码),则使用原文本,避免程序崩溃

实现方案

  1. 核心函数实现 (pkg/dms-common/pkg/aes/aes.go)

    • 新增 SafeDecryptPassword 函数,提供安全的密码解密功能
    • 使用 defer + recover 机制捕获解密过程中的 panic
    • 如果解密失败或发生 panic,记录警告日志并返回原文本
    • 支持传入 logger 和字段名称,便于日志追踪
  2. 配置读取集成 (internal/apiserver/conf/options.go)

    • ReadOptions 函数中集成 SafeDecryptPassword
    • 对数据库密码 (ServiceOpts.Database.Password) 进行解密
    • 对 CloudBeaver 管理员密码 (CloudbeaverOpts.AdminPassword) 进行解密
    • 保持向后兼容,支持明文和加密两种格式
  3. 支持加密字段

    • dms dbpassword
    • cb password
    • odc password
    • sqle dbpassword (用secret_mysql_password字段来存储)

使用方法

使用示例
使用默认密钥(推荐)
# 通过命令行参数
dms-gen-secret-pass --password "mypassword"

# 通过标准输入
echo "mypassword" | dms-gen-secret-pass --stdin
使用自定义密钥
# 通过命令行参数
dms-gen-secret-pass --password "mypassword" --secret-key "your-secret-key"

# 通过标准输入
echo "mypassword" | dms-gen-secret-pass --stdin --secret-key "your-secret-key"

README.md

变更影响面

受影响的模块或功能

外部引用的潜在问题或风险

版本兼容性

测试建议

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions