外观
KingBaseES 敏感数据保护
敏感数据识别与分类
敏感数据定义
敏感数据是指一旦泄露、篡改或滥用,可能导致企业、个人或组织遭受损失的数据。KingBaseES 环境中常见的敏感数据包括:
- 个人身份信息:姓名、身份证号、电话号码、邮箱地址
- 金融信息:银行卡号、交易记录、账户余额
- 商业机密:产品配方、客户名单、财务报表
- 医疗信息:病历、诊断结果、用药记录
- 系统配置:数据库密码、API密钥、安全配置
敏感数据识别方法
数据字典分析
通过分析数据库的数据字典,识别包含敏感信息的表和字段:
sql
-- 查询包含敏感关键字的表和字段
SELECT table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema NOT IN ('sys_catalog', 'information_schema', 'kingbase')
AND (column_name LIKE '%idcard%'
OR column_name LIKE '%phone%'
OR column_name LIKE '%email%'
OR column_name LIKE '%card%'
OR column_name LIKE '%password%');数据内容扫描
使用 KingBaseES 提供的数据掩码函数或第三方工具,对数据内容进行扫描识别:
sql
-- 示例:使用正则表达式识别身份证号
SELECT * FROM user_info
WHERE regexp_like(id_card, '^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$');敏感数据分类
| 分类 | 示例 | 保护级别 |
|---|---|---|
| 机密 | 核心业务数据、系统密码 | 最高 |
| 敏感 | 个人身份信息、金融数据 | 高 |
| 内部 | 内部报告、非公开文档 | 中 |
| 公开 | 公开信息、产品介绍 | 低 |
敏感数据保护策略
最小权限原则
- 按需授权:仅授予用户完成工作所需的最小权限
- 职责分离:将敏感操作分配给不同角色
- 定期审查:定期审查用户权限,及时回收不必要的权限
数据访问控制
基于角色的访问控制(RBAC)
sql
-- 创建敏感数据访问角色
CREATE ROLE sensitive_data_reader;
-- 授予特定表的只读权限
GRANT SELECT ON user_info TO sensitive_data_reader;
-- 限制只能访问非敏感字段
GRANT SELECT (id, name) ON user_info TO general_user;行级安全策略
sql
-- 启用行级安全
ALTER TABLE user_info ENABLE ROW LEVEL SECURITY;
-- 创建行级安全策略
CREATE POLICY user_row_policy ON user_info
FOR SELECT
USING (user_id = current_user_id());数据掩码与脱敏
动态数据掩码
在查询结果中动态替换敏感数据,原始数据保持不变:
sql
-- 示例:查询时掩码身份证号
SELECT
id,
name,
regexp_replace(id_card, '^(\d{6})\d{8}(\d{4})$', '\1********\2') AS masked_id_card,
regexp_replace(phone, '^(\d{3})\d{4}(\d{4})$', '\1****\2') AS masked_phone
FROM user_info;静态数据脱敏
创建脱敏副本用于测试、开发环境:
sql
-- 创建脱敏表
CREATE TABLE user_info_test AS
SELECT
id,
substr(name, 1, 1) || '**' AS masked_name,
regexp_replace(id_card, '^(\d{6})\d{8}(\d{4})$', '\1********\2') AS masked_id_card,
regexp_replace(phone, '^(\d{3})\d{4}(\d{4})$', '\1****\2') AS masked_phone,
'test@example.com' AS masked_email
FROM user_info;敏感数据保护技术实现
列级加密
KingBaseES 支持对特定列进行加密存储:
sql
-- 创建带列加密的表
CREATE TABLE user_info (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
id_card VARCHAR(18) ENCRYPTED WITH (ENCRYPTION_TYPE = 'AES_256_CBC', KEY_ID = 'column_key'),
phone VARCHAR(11) ENCRYPTED WITH (ENCRYPTION_TYPE = 'AES_256_CBC', KEY_ID = 'column_key')
);
-- 插入加密数据
INSERT INTO user_info (name, id_card, phone)
VALUES ('张三', '110101199001011234', '13800138000');
-- 查询解密数据(需要相应权限)
SELECT id, name, id_card, phone FROM user_info;透明数据加密(TDE)
对整个数据库或表空间进行加密,应用层无需修改:
sql
-- 启用 TDE
ALTER SYSTEM SET tde_enabled = on;
ALTER SYSTEM SET tde_key_file = '/opt/kingbase/tde/tde.key';
ALTER SYSTEM SET tde_cipher_algorithm = 'aes-256-cbc';
-- 重启数据库使配置生效数据脱敏函数
KingBaseES 提供了多种数据脱敏函数:
sql
-- 掩码函数示例
SELECT
sys_mask_partial('13800138000', 3, 4, '*') AS phone_mask,
sys_mask_full('110101199001011234', '*') AS id_card_mask,
sys_mask_hash('password123') AS password_hash;敏感数据访问审计
审计策略配置
sql
-- 创建审计策略
CREATE AUDIT POLICY sensitive_data_access
ACTIONS SELECT ON user_info, financial_transactions;
-- 启用审计策略
ENABLE AUDIT POLICY sensitive_data_access;
-- 查看审计日志
SELECT * FROM sys_audit_log
WHERE object_name IN ('user_info', 'financial_transactions')
ORDER BY event_time DESC;实时监控
集成监控系统,实时监控敏感数据访问:
- 设置告警规则:对敏感表的频繁访问、异常时间访问设置告警
- 审计日志分析:定期分析审计日志,识别异常访问模式
- 用户行为分析:建立用户正常访问模型,检测异常行为
合规要求与实践
主要合规标准
- GDPR:欧盟通用数据保护条例
- CCPA/CPRA:加利福尼亚消费者隐私法案
- 等保 2.0:中国网络安全等级保护条例
- PCI DSS:支付卡行业数据安全标准
- HIPAA:健康保险流通与责任法案
合规实践
- 数据分类与标记:对所有数据进行分类和标记
- 访问控制:实施严格的访问控制策略
- 数据加密:对敏感数据进行加密存储和传输
- 审计与监控:建立完善的审计和监控机制
- 数据保留与销毁:制定数据保留和销毁策略
- 定期合规审计:定期进行合规审计和评估
版本差异
| 特性 | V8 R6 | V8 R7 |
|---|---|---|
| 列级加密 | 支持 | 增强,支持更多加密算法 |
| 透明数据加密 | 支持表空间级 | 支持数据库级和表空间级 |
| 数据脱敏函数 | 基础支持 | 丰富的内置脱敏函数 |
| 行级安全策略 | 支持 | 增强,支持更多条件 |
| 审计功能 | 基础审计 | 细粒度审计,支持更复杂策略 |
最佳实践
敏感数据保护架构设计
分层保护:
- 物理层:磁盘加密
- 数据库层:TDE、列加密
- 应用层:数据脱敏、访问控制
- 传输层:SSL/TLS加密
数据生命周期管理:
- 采集阶段:数据分类和标记
- 存储阶段:加密和访问控制
- 使用阶段:数据脱敏和审计
- 销毁阶段:安全删除和销毁
定期安全评估:
- 定期进行敏感数据扫描
- 评估访问控制有效性
- 测试加密机制安全性
日常运维管理
权限管理:
- 定期审查用户权限
- 遵循最小权限原则
- 及时回收离职员工权限
审计日志管理:
- 确保审计日志完整性
- 定期备份审计日志
- 分析审计日志,识别异常
加密密钥管理:
- 安全存储加密密钥
- 定期轮换加密密钥
- 严格控制密钥访问权限
常见问题(FAQ)
Q: 如何识别数据库中的敏感数据?
A: 可以通过数据字典分析、正则表达式扫描和专业工具识别敏感数据。建议结合业务知识,对包含身份证号、电话号码、银行卡号等关键字段的表进行重点检查。
Q: 动态数据掩码和静态数据脱敏有什么区别?
A: 动态数据掩码是在查询时实时替换敏感数据,原始数据保持不变,主要用于生产环境;静态数据脱敏是创建脱敏副本,用于测试、开发环境,原始数据和脱敏数据分离。
Q: TDE 加密会影响数据库性能吗?
A: TDE 加密会带来一定的性能开销,主要体现在I/O操作上。建议在启用TDE前进行性能测试,并根据测试结果调整配置。
Q: 如何确保加密密钥的安全?
A: 建议将加密密钥存储在专用的密钥管理系统(KMS)中,严格控制密钥访问权限,定期轮换密钥,并备份密钥到安全位置。
Q: 如何满足 GDPR 等合规要求?
A: 需建立完善的数据保护体系,包括数据分类、访问控制、加密存储、审计监控、数据保留和销毁等措施,并定期进行合规审计和评估。
Q: 行级安全策略和视图有什么区别?
A: 行级安全策略是数据库层面的安全控制,对所有查询生效;视图是基于表的逻辑结构,需要单独创建和维护。行级安全策略更灵活,无需修改应用代码。
总结
敏感数据保护是数据库运维中的重要组成部分,需要综合运用多种技术手段和管理措施。KingBaseES 提供了丰富的敏感数据保护功能,包括加密存储、访问控制、数据脱敏和审计监控等。DBA 应根据业务需求和合规要求,制定适合的敏感数据保护策略,并定期进行评估和优化,确保敏感数据的安全性和合规性。
