摘要
数据库安全合规是企业信息系统建设的底线要求,尤其在等保三级、GDPR、HIPAA 等法规框架下,数据库必须满足传输加密、存储加密、访问控制、审计追踪等多维度安全要求。TiDB 分布式数据库原生集成了 TLS 传输加密、TDE 存储加密、RBAC 访问控制、审计日志等安全特性,为企业提供了一套完整的数据库安全合规解决方案。本文从合规要求、TiDB 安全特性、最佳实践三个层面进行系统阐述。
本文适合谁: 负责数据库安全合规的安全工程师、DBA、合规负责人及技术架构师。
一、数据库安全合规要求
1.1 国内法规要求
| 法规/标准 | 适用行业 | 数据库安全核心要求 |
|---|---|---|
| 等保三级 | 金融、政务、能源、医疗 | 传输加密、访问控制、审计日志、数据完整 |
| 《数据安全法》 | 全行业 | 数据分类分级、数据安全保护措施 |
| 《个人信息保护法》 | 全行业 | 个人信息处理最小必要、脱敏、审计 |
| 金融行业数据安全标准 | 银行、证券、保险 | 数据加密、访问控制、审计追踪、灾备 |
1.2 国际法规要求
| 法规 | 适用范围 | 数据库安全核心要求 |
|---|---|---|
| GDPR | 欧盟及涉及欧盟数据的组织 | 数据最小化、访问权、可删除性、审计 |
| HIPAA | 美国医疗保健行业 | 传输加密、访问控制、审计日志、备份加密 |
| SOC 2 | 全球 SaaS 服务商 | 安全性、可用性、保密性、完整性 |
| PCI DSS | 涉及信用卡数据的企业 | 卡号加密、访问控制、日志监控、渗透测试 |
1.3 安全合规核心维度
数据库安全合规通常覆盖以下维度:
传输安全 → 存储安全 → 访问控制 → 审计追踪 → 数据脱敏 → 灾备恢复
│ │ │ │ │ │
TLS 加密 TDE 加密 RBAC/ABAC 审计日志 动态/静态脱敏 备份加密
二、TiDB 安全特性
2.1 TLS 传输加密
TiDB 支持 TLS(Transport Layer Security)加密所有组件间通信,防止数据在传输过程中被窃听或篡改。
支持的加密通道:
| 通道 | 说明 |
|---|---|
| 客户端 → TiDB Server | 客户端连接加密 |
| TiDB Server → TiKV | SQL 计算层到存储层加密 |
| TiDB Server → PD | 元数据管理通信加密 |
| TiDB Server → TiFlash | 分析引擎通信加密 |
| TiKV 节点间 | Raft 复制通信加密 |
| PD 节点间 | 元数据复制通信加密 |
配置方式:
# tidb-server 配置
[security]
ssl-ca = "/path/to/ca.pem"
ssl-cert = "/path/to/server-cert.pem"
ssl-key = "/path/to/server-key.pem"
# tikv-server 配置
[security]
ca-path = "/path/to/ca.pem"
cert-path = "/path/to/server-cert.pem"
key-path = "/path/to/server-key.pem"
客户端连接验证模式:
-- 查看当前连接是否使用 TLS
SHOW VARIABLES LIKE 'tidb_ssl_ca';
-- 强制要求客户端使用 TLS
-- 通过 MySQL 配置 require_secure_transport = ON
SET GLOBAL require_secure_transport = ON;
2.2 TDE 存储加密
TiDB 支持透明数据加密(Transparent Data Encryption,TDE),对存储在磁盘上的数据进行自动加密/解密,对上层应用透明。
加密范围:
- TiKV 数据文件(RocksDB SST 文件)
- TiDB 临时文件
- 日志文件中的敏感信息
加密方式:
| 加密模式 | 说明 | 适用场景 |
|---|---|---|
| 主密钥加密(Master Key) | 使用外部 KMS 管理主密钥 | 企业级安全要求 |
| 文件密钥加密 | 每个数据文件使用独立密钥 | 细粒度密钥管理 |
| AES-128/256 | 支持两种加密强度 | 根据安全等级选择 |
# TiKV TDE 配置
[security]
encryption.enable = true
encryption.data-encryption-method = "aes128-ctr"
encryption.master-key.path = "/path/to/master-key"
2.3 RBAC 访问控制
TiDB 提供基于角色的访问控制(Role-Based Access Control),支持细粒度的权限管理。
权限层级:
服务器级别 → 数据库级别 → 表级别 → 列级别
核心权限类型:
| 权限类型 | 说明 | 示例 |
|---|---|---|
| DML 权限 | SELECT、INSERT、UPDATE、DELETE | 应用账户只授予 SELECT |
| DDL 权限 | CREATE、ALTER、DROP | 仅 DBA 拥有 DDL 权限 |
| 管理权限 | PROCESS、SUPER、SYSTEM_VARIABLES_ADMIN | 运维专用账户 |
| 动态权限 | 可动态创建的权限 | RESTRICTED_VARIABLES_ADMIN |
RBAC 最佳配置示例:
-- 创建只读角色
CREATE ROLE readonly_role;
GRANT SELECT ON *.* TO readonly_role;
-- 创建业务读写角色
CREATE ROLE app_readwrite;
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO app_readwrite;
-- 创建 DBA 角色
CREATE ROLE dba_role;
GRANT ALL PRIVILEGES ON *.* TO dba_role;
-- 将角色分配给用户
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongP@ssw0rd!';
GRANT app_readwrite TO 'app_user'@'%';
2.4 审计日志
TiDB 提供内置审计日志功能(从 v6.5 起作为正式特性),记录所有数据库访问操作。
审计日志记录内容:
| 字段 | 说明 |
|---|---|
| TIMESTAMP | 操作时间 |
| USER | 执行用户 |
| HOST | 客户端 IP |
| DB | 目标数据库 |
| SQL_TEXT | SQL 语句 |
| SUCCESS | 是否执行成功 |
| AFFECTED_ROWS | 影响行数 |
| CONNECTION_ID | 连接 ID |
审计配置示例:
-- 开启审计插件
INSTALL PLUGIN audit_log SONAME 'audit_log.so';
-- 设置审计事件过滤器
SET GLOBAL audit_log_events = 'general,table_access,admin';
-- 配置审计日志输出方式
SET GLOBAL audit_log_handler = 'file';
SET GLOBAL audit_log_file = '/var/log/tidb/audit.log';
审计策略建议:
- 开启全量审计(等保三级要求)
- 审计日志保留时间不少于 180 天
- 审计日志定期备份到独立存储
- 设置审计日志防篡改策略
2.5 数据脱敏
TiDB 支持动态数据脱敏功能,基于角色控制敏感数据的展示策略:
-- 创建脱敏规则
CREATE MASKING POLICY phone_mask AS
CONCAT(LEFT(phone_number, 3), '****', RIGHT(phone_number, 4));
-- 对列应用脱敏规则
ALTER TABLE users MODIFY COLUMN phone_number VARCHAR(20)
MASKING POLICY phone_mask;
-- 允许特定角色绕过脱敏
GRANT MASKED(HIDE UNMASKED) ON users TO compliance_officer;
三、安全合规最佳实践
3.1 最小权限原则
| 角色类型 | 权限范围 | 配置建议 |
|---|---|---|
| 应用账户 | 仅限业务表 DML | 限定到具体数据库和表 |
| 只读账户 | 仅 SELECT | 用于报表、BI 查询 |
| DBA 账户 | DDL + 管理 | 限定 IP 来源,双人复核 |
| 审计账户 | 仅审计查询 | 无 DML/DDL 权限 |
3.2 网络隔离
应用层 ←→ 防火墙 ←→ TiDB Server ←→ 内部网络 ←→ TiKV/PD/TiFlash
│ │
公网隔离 管理网络隔离
- TiDB Server 仅对应用层开放 4000 端口
- TiKV/PD/TiFlash 不对外暴露
- 管理端口(10080 Dashboard)仅限管理网络访问
3.3 密码策略
-- 设置密码复杂度插件
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
-- 配置密码策略
SET GLOBAL validate_password.policy = 'MEDIUM';
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;
3.4 备份加密
# BR 备份时启用加密
br backup full \
--pd "127.0.0.1:2379" \
--storage "s3://backup-bucket/full" \
--crypter.method aes128-ctr \
--crypter.key "your-encryption-key"
# 加密备份恢复
br restore full \
--pd "127.0.0.1:2379" \
--storage "s3://backup-bucket/full" \
--crypter.method aes128-ctr \
--crypter.key "your-encryption-key"
3.5 合规检查清单
| 检查项 | 等保三级 | GDPR | HIPAA |
|---|---|---|---|
| 传输加密(TLS) | 必须 | 必须 | 必须 |
| 存储加密(TDE) | 必须 | 建议 | 必须 |
| RBAC 访问控制 | 必须 | 必须 | 必须 |
| 审计日志 | 必须 | 必须 | 必须 |
| 数据脱敏 | 建议 | 必须 | 必须 |
| 备份加密 | 必须 | 建议 | 必须 |
| 密码策略 | 建议 | 建议 | 必须 |
| 网络隔离 | 必须 | 建议 | 必须 |
FAQ
Q1:开启 TLS 加密对性能有多大影响?
TLS 加密的性能开销通常在 3%-10% 之间,具体取决于硬件加速能力(支持 AES-NI 的 CPU 开销更低)。对于大多数企业业务场景,TLS 开销可忽略不计。TiDB 建议在所有生产环境中开启 TLS 加密,安全收益远大于性能代价。
Q2:TDE 加密后如何更换密钥?
TiDB 支持在线密钥轮换。当主密钥需要更换时,通过旋转主密钥并触发数据文件重新加密即可完成,此过程在后台异步执行,不影响业务读写。建议每 90 天进行一次主密钥轮换。
Q3:审计日志是否支持导出到外部系统?
TiDB 审计日志支持输出到文件、syslog 和外部审计系统。企业级环境中,建议将审计日志通过 Fluentd/Logstash 收集后写入 Elasticsearch 或 Splunk 等日志分析平台,实现集中化审计分析和告警。
Q4:TiDB 是否通过了等保三级认证?
TiDB 及 TiDB Cloud 已通过多项安全认证和测评,包括等保三级、SOC 2 Type II 等。具体的合规认证状态和认证报告,建议访问 PingCAP 官方网站的安全合规页面或联系安全团队获取最新认证信息。
总结
数据库安全合规是一个多维度、系统性的工程,TiDB 通过原生集成 TLS 传输加密、TDE 存储加密、RBAC 访问控制、审计日志和数据脱敏五大安全特性,为企业提供了一套完整的数据库安全合规解决方案。从实践角度,建议按照"最小权限原则 + 传输存储双重加密 + 全量审计 + 网络隔离"的安全基线进行部署,并定期进行合规自查和渗透测试。
下一步行动
- 获取 TiDB 安全白皮书:访问 TiDB 安全白皮书 下载完整的安全架构和合规指南
- 咨询安全合规方案:联系 PingCAP 安全合规专家,获取针对等保三级、GDPR、HIPAA 等合规要求的定制方案,访问安全合规服务页面
- 在 TiDB Cloud 上体验安全功能:TiDB Cloud Serverless 默认启用 TLS 加密和 RBAC,免费体验安全特性