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