PlanetScale 安全配置 #

本章将介绍如何配置 PlanetScale 数据库安全,包括访问控制、密码管理、加密传输、审计日志等最佳实践。

安全概览 #

PlanetScale 安全架构 #

text
┌─────────────────────────────────────────────────────────────┐
│                    安全架构                                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   网络安全:                                                │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  客户端 ───SSL/TLS加密──> PlanetScale 边缘节点      │  │
│   │                                                      │  │
│   │  ✅ 强制 TLS 1.2+                                    │  │
│   │  ✅ 证书验证                                         │  │
│   │  ✅ 加密传输                                         │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   访问控制:                                                │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  组织成员 ───RBAC──> 数据库访问                     │  │
│   │                                                      │  │
│   │  ✅ 基于角色的访问控制                               │  │
│   │  ✅ 密码权限管理                                     │  │
│   │  ✅ IP 白名单(付费)                                │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   数据安全:                                                │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  数据存储 ───加密──> 备份                            │  │
│   │                                                      │  │
│   │  ✅ 静态数据加密                                     │  │
│   │  ✅ 自动备份加密                                     │  │
│   │  ✅ 安全删除                                         │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

访问控制 #

组织成员管理 #

text
┌─────────────────────────────────────────────────────────────┐
│                    成员角色                                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   Administrator(管理员)                                   │
│   ├── 完全访问权限                                         │
│   ├── 管理成员                                            │
│   ├── 管理账单                                            │
│   └── 删除数据库                                          │
│                                                             │
│   Developer(开发者)                                       │
│   ├── 创建/删除分支                                       │
│   ├── 创建 Deploy Request                                 │
│   ├── 创建密码                                            │
│   └── 执行 Schema 变更                                    │
│                                                             │
│   Viewer(查看者)                                          │
│   ├── 查看数据库                                          │
│   ├── 查看分支                                            │
│   └── 只读访问                                            │
│                                                             │
│   角色分配原则:                                            │
│   - 遵循最小权限原则                                       │
│   - 定期审查成员权限                                       │
│   - 离职及时移除                                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Web 控制台管理 #

text
┌─────────────────────────────────────────────────────────────┐
│                    成员管理界面                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   Settings > Members                                        │
│                                                             │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  Member              Role           Actions          │  │
│   ├─────────────────────────────────────────────────────┤  │
│   │  alice@example.com   Administrator  [Change] [Remove]│  │
│   │  bob@example.com     Developer      [Change] [Remove]│  │
│   │  charlie@example.com Viewer         [Change] [Remove]│  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   [+ Invite member]                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

CLI 管理 #

bash
# 列出组织成员
pscale org members list my-org

# 邀请成员
pscale org members add my-org bob@example.com --role developer

# 修改角色
pscale org members update my-org bob@example.com --role admin

# 移除成员
pscale org members remove my-org bob@example.com

密码管理 #

密码最佳实践 #

text
┌─────────────────────────────────────────────────────────────┐
│                    密码安全策略                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   创建原则:                                                │
│   ✅ 不同环境使用不同密码                                   │
│   ✅ 不同服务使用不同密码                                   │
│   ✅ 使用最小权限角色                                       │
│   ✅ 设置合理的过期时间                                     │
│                                                             │
│   存储原则:                                                │
│   ✅ 使用环境变量存储                                       │
│   ✅ 使用密钥管理服务                                       │
│   ✅ 不要提交到代码仓库                                     │
│   ❌ 不要硬编码在代码中                                     │
│                                                             │
│   轮换原则:                                                │
│   ✅ 定期轮换密码                                           │
│   ✅ 泄露后立即更换                                         │
│   ✅ 人员变动后更换                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

创建和管理密码 #

bash
# 创建密码
pscale password create my-database main production-app --role writer

# 创建只读密码
pscale password create my-database main analytics-app --role reader

# 创建临时密码
pscale password create my-database main temp-access --ttl 24h

# 列出密码
pscale password list my-database main

# 删除密码
pscale password delete my-database main old-password

密码角色权限 #

text
┌─────────────────────────────────────────────────────────────┐
│                    角色权限详情                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   reader(只读)                                            │
│   ├── SELECT                                               │
│   ├── SHOW                                                 │
│   └── 适合:报表、分析、只读服务                           │
│                                                             │
│   writer(读写)                                            │
│   ├── SELECT, INSERT, UPDATE, DELETE                       │
│   ├── SHOW, DESCRIBE                                       │
│   └── 适合:大多数应用服务                                 │
│                                                             │
│   admin(管理员)                                           │
│   ├── ALL PRIVILEGES                                       │
│   ├── CREATE, DROP, ALTER                                  │
│   └── 适合:管理工具、迁移脚本                             │
│                                                             │
│   建议使用 writer 角色,避免使用 admin                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

加密传输 #

SSL/TLS 配置 #

text
┌─────────────────────────────────────────────────────────────┐
│                    SSL 配置                                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   PlanetScale 强制使用 TLS:                               │
│   - TLS 1.2 或更高版本                                     │
│   - 证书验证                                               │
│   - 加密数据传输                                           │
│                                                             │
│   连接字符串:                                              │
│   mysql://user:pass@host/db?sslaccept=strict               │
│                                                             │
│   sslaccept 选项:                                          │
│   ├── strict     - 强制验证证书(推荐)                    │
│   └── disabled   - 禁用 SSL(不推荐)                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

各语言 SSL 配置 #

javascript
// Node.js (mysql2)
const connection = await mysql.createConnection({
  host: 'aws.connect.psdb.cloud',
  user: 'abc123',
  password: 'pscale_pw_xxx',
  database: 'my-database',
  ssl: {
    rejectUnauthorized: true
  }
});
python
# Python (mysql-connector)
connection = mysql.connector.connect(
    host='aws.connect.psdb.cloud',
    user='abc123',
    password='pscale_pw_xxx',
    database='my-database',
    ssl_ca='/path/to/ca.pem',
    ssl_verify_cert=True
)
go
// Go
dsn := "user:pass@tcp(host:3306)/db?tls=true"
db, err := sql.Open("mysql", dsn)

IP 访问控制 #

IP 白名单(付费功能) #

text
┌─────────────────────────────────────────────────────────────┐
│                    IP 白名单配置                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   功能:                                                    │
│   - 限制特定 IP 访问数据库                                 │
│   - 增强安全性                                             │
│   - 防止未授权访问                                         │
│                                                             │
│   配置方式:                                                │
│   Settings > Security > IP Allowlist                       │
│                                                             │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  IP Address         Description                      │  │
│   ├─────────────────────────────────────────────────────┤  │
│   │  192.168.1.100     Office network                    │  │
│   │  10.0.0.0/24       VPN network                       │  │
│   │  203.0.113.50      Production server                 │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   注意:                                                    │
│   - 需要 Scaler Pro 计划                                   │
│   - 配置错误可能导致无法访问                               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

审计与监控 #

活动日志 #

text
┌─────────────────────────────────────────────────────────────┐
│                    活动日志                                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   记录的操作:                                              │
│   ├── 数据库创建/删除                                      │
│   ├── 分支创建/删除                                        │
│   ├── Schema 变更                                          │
│   ├── 密码创建/删除                                        │
│   ├── Deploy Request                                       │
│   └── 成员变更                                             │
│                                                             │
│   查看方式:                                                │
│   Settings > Activity Log                                  │
│                                                             │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  Time            User        Action                  │  │
│   ├─────────────────────────────────────────────────────┤  │
│   │  2024-01-15 12:00 alice      Created database       │  │
│   │  2024-01-15 13:00 bob        Created branch         │  │
│   │  2024-01-15 14:00 alice      Deployed schema change │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

查询审计 #

text
┌─────────────────────────────────────────────────────────────┐
│                    查询监控                                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   Insights 页面:                                           │
│   ├── 慢查询列表                                           │
│   ├── 查询执行统计                                         │
│   ├── 错误查询追踪                                         │
│   └── 性能建议                                             │
│                                                             │
│   监控指标:                                                │
│   ├── 查询延迟                                             │
│   ├── 查询频率                                             │
│   ├── 错误率                                               │
│   └── 资源使用                                             │
│                                                             │
└─────────────────────────────────────────────────────────────┘

数据保护 #

敏感数据处理 #

text
┌─────────────────────────────────────────────────────────────┐
│                    敏感数据建议                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   不要存储:                                                │
│   ❌ 明文密码                                              │
│   ❌ 完整信用卡号                                          │
│   ❌ 完整身份证号                                          │
│   ❌ 私钥/密钥                                             │
│                                                             │
│   推荐做法:                                                │
│   ✅ 密码使用 bcrypt/argon2 哈希                           │
│   ✅ 敏感数据加密后存储                                    │
│   ✅ 使用应用层加密                                        │
│   ✅ 定期轮换加密密钥                                      │
│                                                             │
│   加密示例:                                                │
│   // 使用 Node.js crypto 模块                              │
│   const encrypted = crypto.encrypt(sensitiveData, key);    │
│   // 存储加密后的数据                                      │
│   await db.execute(                                        │
│     'INSERT INTO users (email, ssn_encrypted) VALUES (?, ?)',│
│     [email, encrypted]                                     │
│   );                                                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

数据脱敏 #

sql
-- 开发分支使用脱敏数据
-- 创建开发分支
pscale branch create my-database develop

-- 插入脱敏测试数据
INSERT INTO users (name, email) VALUES
  ('Test User 1', 'test1@example.com'),
  ('Test User 2', 'test2@example.com');

-- 不要插入真实敏感数据

合规性 #

安全合规 #

text
┌─────────────────────────────────────────────────────────────┐
│                    合规认证                                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   PlanetScale 符合:                                        │
│   ├── SOC 2 Type II                                       │
│   ├── GDPR                                                │
│   ├── CCPA                                                │
│   └── HIPAA(付费计划)                                    │
│                                                             │
│   数据处理:                                                │
│   ├── 数据加密存储                                         │
│   ├── 安全备份                                             │
│   ├── 访问控制                                             │
│   └── 审计日志                                             │
│                                                             │
│   用户责任:                                                │
│   - 正确配置访问控制                                       │
│   - 保护连接密码                                           │
│   - 遵守数据保护法规                                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

安全检查清单 #

text
┌─────────────────────────────────────────────────────────────┐
│                    安全检查清单                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   访问控制:                                                │
│   □ 审查组织成员权限                                       │
│   □ 移除离职成员                                           │
│   □ 使用最小权限原则                                       │
│                                                             │
│   密码管理:                                                │
│   □ 不同环境使用不同密码                                   │
│   □ 定期轮换密码                                           │
│   □ 删除未使用的密码                                       │
│   □ 使用最小权限角色                                       │
│                                                             │
│   连接安全:                                                │
│   □ 强制使用 SSL/TLS                                       │
│   □ 验证服务器证书                                         │
│   □ 配置 IP 白名单(如需要)                               │
│                                                             │
│   数据保护:                                                │
│   □ 敏感数据加密存储                                       │
│   □ 开发环境使用脱敏数据                                   │
│   □ 定期备份数据                                           │
│                                                             │
│   监控审计:                                                │
│   □ 启用活动日志                                           │
│   □ 监控异常查询                                           │
│   □ 设置安全告警                                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

下一步 #

现在你已经掌握了安全配置,接下来学习 分支工作流,了解团队协作的最佳实践!

最后更新:2026-03-29