GBase 8a
运维管理
文章
精选

数据脱敏(Data Masking)在GBase 8a中是如何实现的?是动态脱敏还是静态脱敏?

发表于2026-03-27 10:15:4720次浏览3个评论

GBase 8a MPP Cluster 实现的数据脱敏(Data Masking)是动态脱敏。这是一种在查询时实时进行数据转换,而不改变底层实际存储数据的安全技术。

一、核心结论:动态脱敏

  • 定义:动态数据脱敏在数据被读取时(查询阶段) 实时进行转换,根据查询者的权限决定返回脱敏后的数据还是原始数据。原始数据在物理存储中保持不变
  • 文档中的明确证据
    1. “动态数据脱敏并不会真正改动表中存储的实际数据,只是在查询的时候应用该特性控制查询返回的数据,显示成期望的内容。”
    2. “用户可以通过SQL语法的形式,给需要进行数据脱敏的字段添加脱敏属性,并通过用户权限控制,决定是否对有查询要求的用户暴露原始数据。”

二、动态脱敏的实现机制

GBase 8a 的动态脱敏实现包含三个核心要素:脱敏属性定义、脱敏函数规则和权限控制

1. 定义脱敏列(在表创建或修改时)

通过在DDL语句中为指定列添加 MASKED WITH 子句来定义脱敏属性。

-- 创建表时指定脱敏列
CREATE TABLE customer (
    id INT,
    name VARCHAR(100) MASKED WITH (FUNCTION = 'default()'), -- 姓名默认脱敏
    phone VARCHAR(20) MASKED WITH (FUNCTION = 'partial(\"***\", 3, 4)'), -- 手机号部分脱敏
    email VARCHAR(50) MASKED WITH (FUNCTION = 'keymask(\"@\", \"****\", 0)') -- 邮箱指定位置脱敏
);
-- 为已有表增加脱敏属性
ALTER TABLE customer MODIFY COLUMN email VARCHAR(50) MASKED WITH (FUNCTION = 'keymask(\"@\", \"****\", 0)');

2. 五种内置脱敏函数

GBase 8a 提供了五种脱敏函数,适用于不同类型的数据:

函数语法示例适用类型脱敏效果(示例)
默认脱敏default()任意类型‘Brad Stevens’‘XXXX’
‘1976-10-22’‘1900-00-00 00:00:00’
随机脱敏random(start, end)数字类型422 (在start-end范围内随机)
自定义脱敏partial(prefix, padding, suffix)字符类型‘Hello’ (prefix=1, suffix=1, padding=‘X’) → ‘HXXXo’
哈希脱敏sha()字符类型‘Hello’哈希值(如a9993e...)

指定位置脱敏

 

keymask(substr, padding, pos)字符类型‘gbase@gbase.cn’ (substr=‘@’, padding=‘****’, pos=0) → ‘****@gbase.cn’
原始数据

脱敏后数据(普通用户)

 

Brad StevensXXXX
1976-10-22 12:21:56.1230001900-00-00 00:00:00
422 (随机值)
gbase@gbase.cn****@gbase.cn

3. 权限控制:决定是否脱敏

这是动态脱敏的“开关”。通过授予或收回 UNMASK 权限,来控制用户看到的是脱敏数据还是原始数据。

  • UNMASK 权限:用户查询脱敏列时,看到的是脱敏后的数据
  • UNMASK 权限:用户查询脱敏列时,看到的是原始真实数据
-- 授予用户查看某个表脱敏列真实值的权限
GRANT UNMASK ON db_name.table_name TO user_name@'host';
-- 收回权限
REVOKE UNMASK ON db_name.table_name FROM user_name@'host';

重要提示UNMASK权限的作用是允许用户查看脱敏字段的真实值,而非“只能看掩码”。

三、动态脱敏与静态脱敏的对比

特性GBase 8a 动态脱敏静态脱敏(GBase 8a 未原生提供)
数据存储原始数据不变,按原样存储。永久替换存储层的数据,原始数据被覆盖或转移到它处。
处理时机查询时实时转换。ETL/加载时离线批量处理
灵活性,同一份数据对不同用户呈现不同内容。,脱敏后所有用户看到的内容相同。
性能影响轻微的计算开销,主要在查询阶段。无查询开销,但需要额外的ETL处理时间和存储空间。
主要用途生产环境,满足实时查询下的数据安全与合规。开发/测试环境的数据供给,或数据归档。
GBase实现原生支持,通过DDL属性和权限控制。需借助外部ETL工具或自定义脚本实现。

四、重要规则与限制

  1. 函数计算规则
    • 控制流函数(如 CASE, NVL, COALESCE):如果参数中有脱敏列,直接返回脱敏列本身,或将脱敏规则应用到返回值。

       

    • 计算比较函数(如 CONCAT, 算术运算):如果参数中有脱敏列,使用默认脱敏规则对返回值进行脱敏

       

    • 文档示例SELECT CONCAT(mask_col, '123') FROM t; 会返回一个被默认脱敏规则处理过的值。

       

  2. 权限粒度UNMASK 权限支持在 VC级、数据库级、表级 进行授予,实现灵活的权限管理。

     

五、总结

GBase 8a 采用动态脱敏方案,通过 “列属性定义 + 内置函数 + UNMASK权限” 的三重机制实现。其最大优势在于:

  • 保障存储性能:无需改变高效的列式存储结构。
  • 满足实时合规:在数据共享和查询场景中,能实时响应不同的数据安全策略。
  • 管理灵活:安全策略(脱敏规则和权限)与数据模型分离,可独立调整。

这种设计非常适合数据仓库和数据分析场景,在确保核心数据资产安全的同时,不影响数据的分析和共享价值。如需静态脱敏,需在数据加载到GBase 8a之前,通过ETL流程完成。

评论

登录后才可以发表评论
用户头像
山佳发表于 1个月前
11111
用户头像
柒柒天晴发表于 1个月前
学习下
流泪猫猫头发表于 19小时前
学习了。