Skip to content

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:健康保险流通与责任法案

合规实践

  1. 数据分类与标记:对所有数据进行分类和标记
  2. 访问控制:实施严格的访问控制策略
  3. 数据加密:对敏感数据进行加密存储和传输
  4. 审计与监控:建立完善的审计和监控机制
  5. 数据保留与销毁:制定数据保留和销毁策略
  6. 定期合规审计:定期进行合规审计和评估

版本差异

特性V8 R6V8 R7
列级加密支持增强,支持更多加密算法
透明数据加密支持表空间级支持数据库级和表空间级
数据脱敏函数基础支持丰富的内置脱敏函数
行级安全策略支持增强,支持更多条件
审计功能基础审计细粒度审计,支持更复杂策略

最佳实践

敏感数据保护架构设计

  1. 分层保护

    • 物理层:磁盘加密
    • 数据库层:TDE、列加密
    • 应用层:数据脱敏、访问控制
    • 传输层:SSL/TLS加密
  2. 数据生命周期管理

    • 采集阶段:数据分类和标记
    • 存储阶段:加密和访问控制
    • 使用阶段:数据脱敏和审计
    • 销毁阶段:安全删除和销毁
  3. 定期安全评估

    • 定期进行敏感数据扫描
    • 评估访问控制有效性
    • 测试加密机制安全性

日常运维管理

  1. 权限管理

    • 定期审查用户权限
    • 遵循最小权限原则
    • 及时回收离职员工权限
  2. 审计日志管理

    • 确保审计日志完整性
    • 定期备份审计日志
    • 分析审计日志,识别异常
  3. 加密密钥管理

    • 安全存储加密密钥
    • 定期轮换加密密钥
    • 严格控制密钥访问权限

常见问题(FAQ)

Q: 如何识别数据库中的敏感数据?

A: 可以通过数据字典分析、正则表达式扫描和专业工具识别敏感数据。建议结合业务知识,对包含身份证号、电话号码、银行卡号等关键字段的表进行重点检查。

Q: 动态数据掩码和静态数据脱敏有什么区别?

A: 动态数据掩码是在查询时实时替换敏感数据,原始数据保持不变,主要用于生产环境;静态数据脱敏是创建脱敏副本,用于测试、开发环境,原始数据和脱敏数据分离。

Q: TDE 加密会影响数据库性能吗?

A: TDE 加密会带来一定的性能开销,主要体现在I/O操作上。建议在启用TDE前进行性能测试,并根据测试结果调整配置。

Q: 如何确保加密密钥的安全?

A: 建议将加密密钥存储在专用的密钥管理系统(KMS)中,严格控制密钥访问权限,定期轮换密钥,并备份密钥到安全位置。

Q: 如何满足 GDPR 等合规要求?

A: 需建立完善的数据保护体系,包括数据分类、访问控制、加密存储、审计监控、数据保留和销毁等措施,并定期进行合规审计和评估。

Q: 行级安全策略和视图有什么区别?

A: 行级安全策略是数据库层面的安全控制,对所有查询生效;视图是基于表的逻辑结构,需要单独创建和维护。行级安全策略更灵活,无需修改应用代码。

总结

敏感数据保护是数据库运维中的重要组成部分,需要综合运用多种技术手段和管理措施。KingBaseES 提供了丰富的敏感数据保护功能,包括加密存储、访问控制、数据脱敏和审计监控等。DBA 应根据业务需求和合规要求,制定适合的敏感数据保护策略,并定期进行评估和优化,确保敏感数据的安全性和合规性。