返回首页

gbase数据、南大通用产品文档:GBase8a脱敏规则

更新日期:2024年09月11日

函数按照不同的处理逻辑,脱敏规则的获取方式也不相同,大致可分为两类。
1.
控制流函数可以直接返回脱敏列,而非对脱敏列进行比较和计算,这时函数会
将脱敏列的脱敏规则应用到其他返回值。这类函数有case when/decode、if、
ifnull、nvl 和coalesce 函数。举例如下:
select case col when 1 then '123' when 2 then '456' when 3 then mask_col else '789' end from t;
说明
其中col 为非脱敏列,mask_col 为脱敏列,“123”、“456”、“789” 为常量。
上面查询中case when 函数可能的返回值为’123’、’456’、’789’和mask_col,返
回值中包含了脱敏列,这时会对常量’123’、’456’和’789’按照脱敏列mask_col
的脱敏规则进行脱敏。

当这类函数的返回值中有多个脱敏列(不同列)时,该函数将使用默认脱敏规
则(不考虑多列脱敏规则是否完全相同)。
比如:
select nvl(mask_col1, mask_col2) from t;
nvl 函数将使用默认脱敏规则。

select nvl(mask_col1, mask_col1) from t;
nvl 函数仍将使用mask_col1 的脱敏规则。

当这类函数的返回值中既包含脱敏列,同时也包含非脱敏列(不是常量)时,
该函数也将使用默认脱敏规则。
比如:
select coalesce(col, mask_col) from t;
coalesce 函数将使用默认脱敏规则。

当这类函数的返回值中类型不完全相同时,
将会依据数据类型的转换规则进行

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
465
转换,
如果转换后的数据类型与脱敏列的原始类型不一致
(只考虑string、
real、
decimal 和int 四个级别,而不考虑更细的数据类型),则使用默认脱敏。
比如:
select coalesce(mask_int_col, 'abcdef') from t;
coalesce 函数返回值为string,
与mask_int_col 的类型(int)不一致,
所以coalesce
将使用默认脱敏。
默认脱敏时,
并不是将mask_int_col 的值转换为string,
而是直接返回string 类
型的默认脱敏值(xxxx)。
控制流函数类型转换规则:

任何一个参数为string 时,则按string 进行运算;

没有string 时,如果存在real,按real 进行运算;

没有string 和real 时,如果存在decimal,按decimal 进行运算;

日期时间类型算作string 类型。
控制流函数只对所有可能的返回值进行脱敏,对控制逻辑中的其他参数不脱
敏,比如case when 函数中只对then 和else 进行脱敏,对case 和when 分支中
的参数不脱敏。

Union、
Intersect 和Minus 运算时,
对应列的脱敏规则选取与控制流函数的脱敏
规则一致。
比如:
select mask_int_col from t union select mask_int_col as col from t;
将使用mask_int_col 的脱敏规则,而:
select mask_int_col from t union select mask_int_col+1 from t;
将使用默认脱敏。
2.
绝大部分函数是对参数进行比较或者计算,比如一些字符串函数、比较函数、
数值函数、时间和日期函数、OLAP 函数和聚集函数等,这类函数的参数如果
有脱敏列,函数将使用默认脱敏规则对返回值进行脱敏,而非对脱敏列脱敏后
参与运算。
举例如下:
select concat(mask_col, '123') from t;
其中mask_col 为脱敏列,’123’为常量。
上面查询中concat 函数并非将脱敏后的mask_col 字符串连接常量’123’,而是
对concat 返回值进行默认脱敏。
由于concat 返回值是字符类型,
所以上述结果
除mask_col 为NULL 的情况外(NULL 值情况返回值为NULL),始终返

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
466
回’xxxx’。
再比如select mask_col > 1 from t; 将依据函数“>”的返回值类型使用默认脱
敏规则,所以除mask_col 为NULL 值外,始终返回0。
脱敏列脱敏后如果超过脱敏列的最大长度,则自动截断为脱敏列的最大长度。
比如脱敏列定义为:
mask_col varchar(5) masked with (function ='partial(2,"xxxx",2)')
则值“abcde”理论上应脱敏为“abxxxxde”,脱敏后的长度超过了最大长度5,
自动截断为“abxxx”。
同样,对于一些可设置长度的函数脱敏时也会被截断,比如:
select left(mask_col, 2) from t;
left 函数将使用默认脱敏,理论上应脱敏为“xxxx”,但超过了left 函数设置
的最大长度,所以自动截断为“xx”。

具体升级步骤如下:
步骤1
确认所有集群节点的数据库服务已经停止。
步骤2
解压V9.5.X.X 集群安装包,并切换到安装包解压后的gcinstall 目录下。
步骤3
使用root 用户在集群各个节点执行gbase 用户的环境部署脚本:
# cd gcinstall

GBase 8a MPP Cluster 产品手册
3 集群安装升级与卸载
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
114
# scp SetSysEnv.py
gbase@集群节点IP:/opt/
# ./SetSysEnv.py --installPrefix=/opt --dbaUser=gbase
SetSysEnv 语法和参数说明请参考3.2.2 初始安装章节。
在gcinstall 目录下找到并修改demo.options 配置文件。demo.options 文件参数值与
原集群信息保持一致。gcwareHost 必须填写原集群的gcware 节点ip(8.6.2.X 集群
中gcware 与coordinator 节点是同一节点),gcwareHostNodeID 在IP4 下可以不填
写,如果是IPV6,nodeid 可以到$GCWARE_BASE/config 下gcware.conf 文件中获
取:
totem 下的nodeid 是gcwareHostNodeID,
gcware 下的是coordinateHostNodeID。
#su - gbase
$ vi /opt/gcinstall/demo.options
installPrefix= /opt
coordinateHost = 192.168.146.20,192.168.146.21,192.168.146.22
coordinateHostNodeID = 20,21,22
dataHost =

函数说明
返回time 对应的小时值,对于小时值的返回值范围是从0 到23。
示例
示例1:返回“10:05:03”对应的小时值。
gbase> SELECT HOUR('10:05:03') FROM dual;
+------------------+
| HOUR('10:05:03') |
+------------------+
|
10 |
+------------------+
1 row in set

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
801
示例2:time 值范围实际上很大,因此HOUR 返回值可以比23 大。
gbase> SELECT HOUR('272:59:59') FROM dual;
+-------------------+
| HOUR('272:59:59') |
+-------------------+
|
272 |
+-------------------+
1 row in set