--- title: "JDBCWrapper" type: concept tags: - AWS - Java - Database - Security - SDK --- ## Definition JDBC Wrapper(JDBC 包装器)是一种通过包装 JDBC 连接,配合 AWS SDK 从 AWS Secrets Manager 动态获取数据库凭据的编程模式,使应用程序无需硬编码数据库密码即可连接数据库。 ## Problem Statement 传统数据库连接方式: ``` 应用程序 → 配置文件/环境变量 → 数据库 ↑ 硬编码明文密码(安全风险) ``` **问题**: - 密码在代码、配置文件或环境变量中明文存储 - 密码变更需要修改配置并重启应用 - 无法实现细粒度的访问控制 - 密码泄露风险高 ## Solution: JDBC Wrapper Pattern 使用 JDBC Wrapper 的连接方式: ``` 应用程序 → JDBC Wrapper + AWS SDK → AWS Secrets Manager → 数据库 ``` **工作流程**: 1. 应用程序通过 JDBC Wrapper 建立连接 2. JDBC Wrapper 调用 AWS SDK 向 Secrets Manager 请求凭据 3. Secrets Manager 返回动态获取的数据库密码 4. JDBC Wrapper 使用临时凭据建立数据库连接 5. 连接完成后,凭据不在应用内存中长期保留 ## Key Benefits | 优势 | 说明 | |------|------| | **无密码访问** | 用户无需知道数据库密码,通过 IAM 角色授权 | | **动态轮换** | 数据库密码轮换时,应用无需重启 | | **集中审计** | 所有数据库访问通过 Secrets Manager 记录 | | **最小权限** | 基于 IAM 角色控制数据库访问权限 | | **审计追溯** | 用户名由角色控制,可追溯数据库操作 | ## Implementation Architecture ``` ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ ┌──────────────┐ │ Application │────▶│ JDBC Wrapper │────▶│ AWS SDK │────▶│ Secrets │ │ │ │ (密码获取) │ │ (调用API) │ │ Manager │ └─────────────┘ └──────────────┘ └─────────────────┘ └──────────────┘ │ ▼ ┌──────────────┐ │ Oracle/MySQL │ │ Database │ └──────────────┘ ``` ## Access Control Model - **用户名**:由 IAM 角色控制,根据角色映射数据库用户 - **密码**:由 AWS Secrets Manager 动态提供,无需人工知晓 - **访问权限**:通过 IAM Policy 控制谁能访问哪些 Secrets ## Related Concepts - [[SecretsManagement]]:敏感信息管理的整体框架 - [[SecretRotation]]:密码轮换机制,与 JDBC Wrapper 配合实现无停机轮换 - [[AWS-SDK]]:AWS 服务调用开发工具包 - [[IAM-Roles]]:基于角色的访问控制机制 ## Sources - [[CTP-Topic-62-AWS-Secrets-Manager]] — Victor 演示使用 JDBC Wrapper + AWS SDK 实现无密码 Oracle 数据库登录 ## Aliases - Database Credential Provider - Secrets Manager JDBC Driver - Dynamic Database Credentials - AWS SDK Database Wrapper