环境与配置管理60 条

连接串管理

数据库/中间件连接信息的标准表达(URL 形式):主机、端口、库、参数与凭据的组合,注意转义与注入方式。

CI/CD 与发布速查开发更新于 2026-10-13

连接串是什么

连接串是数据库与中间件连接信息的标准表达,通常是 URL 形式:协议、凭据、主机、端口、库名与参数(SSL、超时、字符集)组合在一个字符串里。它的坑集中在两端:特殊字符转义——密码里的 @、/、: 必须编码,否则解析错位;生命周期管理——明文进日志、进异常上报是最常见的泄露途径。通行做法是把整串作为密钥托管,而不是在各处拼接生成。

基本信息

适用平台PostgreSQL、MySQL、Redis、MongoDB 等均有 URL 形态
常见形态postgres://user:pass@host:5432/db?sslmode=require;redis://:pass@host:6379/0
要点密码含特殊字符需 URL 编码;参数随环境差异走配置
注入整体作为密钥下发;日志与上报中禁止出现完整串
编码要点密码含特殊字符时先做百分号编码再拼接,否则解析歧义
超时参数连接与查询超时常用查询参数附在串上,按驱动文档确认名称

典型使用场景

  • 应用配置:单一环境变量注入口,部署时替换,代码零改动
  • 本地开发:模板加本地覆盖,避免把生产串带到开发机
  • 平台托管:托管数据库控制台直接给整串,接入快
  • 参数统一:SSL 模式、超时、连接池参数集中管理
  • 巡检比对:核对应用实际连接参数与基线,发现被悄悄改动的项
  • 凭据轮换:更新密钥后验证应用热加载或重启生效,避免全量重启时才发现问题

示例与解析

示例与解析
export DATABASE_URL='postgres://app:***@db.internal:5432/app?sslmode=require&connect_timeout=5'
# 拆解:协议://用户:密码@主机:端口/库名?参数
# 密码含 @ / : 时先 URL 编码,或整体由平台生成后托管
psql "$DATABASE_URL" -c 'select 1'  # 用同一串验证连通与参数生效

常见参数与含义

参数作用常见取值
sslmode传输加密要求require / verify-full
connect_timeout连接超时秒数3-10
连接池相关池大小与复用行为按驱动而定
charset字符集utf8mb4
把连接串整体托管为密钥、而非拼接字符串:减少转义错误与泄露面,轮换时只需替换一个值。
驱动差异要留意:同一种库在不同语言驱动里的参数名与默认值不一致,迁移驱动时逐项核对。

易错点

  • 密码含 @、/、: 未编码:连接解析错位,统一在密钥层拼接生成
  • 连接串打进了异常上报:错误信息携带凭据,配置脱敏过滤器
  • 读写用不同来源下发:部分实例拿旧值、部分拿新值,轮换时对不齐,集中一处下发
  • 参数写死在代码里当默认值:环境差异被掩盖,统一从连接串注入

数据来源与参考

  • PostgreSQL 文档《Connection Strings》
  • 12factor.net《Backing services》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌