Skip to content

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

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

变更影响面

受影响的模块或功能

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

版本兼容性

测试建议

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions