连接串是什么
连接串是数据库与中间件连接信息的标准表达,通常是 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 |
把连接串整体托管为密钥、而非拼接字符串:减少转义错误与泄露面,轮换时只需替换一个值。
驱动差异要留意:同一种库在不同语言驱动里的参数名与默认值不一致,迁移驱动时逐项核对。