• 金仓数据库KingbaseES安全指南--10.数据脱敏


    目录

    10.1. 数据脱敏简介

    10.1.1. 关于数据脱敏

    10.1.2. 使用数据脱敏的场景

    10.1.3. 使用数据脱敏的优势

    10.1.4. 数据脱敏的对象

    10.1.5. 数据脱敏的限制

    10.1.6. 数据脱敏插件

    10.2. 数据脱敏函数与特性

    10.2.1. 默认完整脱敏

    10.2.2. 部分数据脱敏

    10.2.3. 随机数据脱敏

    10.2.4. 邮件数据脱敏

    10.2.5. 脱敏函数的注意事项

    10.3. 数据脱敏的使用

    10.3.1. 数据脱敏开关

    10.3.2. 数据脱敏策略配置

    10.3.3. 数据脱敏配置查询

    10.4. 备份数据脱敏化

    10.4.1. 关于备份数据脱敏

    10.4.2. 数据脱敏配置备份恢复

    10.5. 数据脱敏的安全注意事项

    10.5.1. 对其他功能的影响

    10.5.2. 数据对象操作的一些注意事项


    10.1. 数据脱敏简介

    10.1.1. 关于数据脱敏

    数据脱敏,指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。

    数据脱敏主要分为静态脱敏和动态脱敏,静态数据脱敏(Static Data Masking)采用“先脱敏-后分发”的方式,一般是将生产环境数据拷贝到测试或开发库中,导出后的数据已经改变了原始数据的内容,使得脱敏后的数据成为了测试开发源数据。而动态数据脱敏(Dynamic Data Masking)是与生产环境紧密关联的,访问敏感数据时实时地进行脱敏,主要用于直接访问生产数据的场景,在屏蔽敏感信息的同时也保证了源数据的一致性和有效性。

    KingbaseES主要提供动态数据脱敏功能,同时支持备份数据脱敏化。

    10.1.2. 使用数据脱敏的场景

    当您必须隐藏部分应用程序所访问的敏感数据时,请使用数据脱敏功能。KingbaseES数据库提供不同的数据脱敏策略来隐藏敏感数据。例如,员工表的身份证信息,向一些用户展示数据时,可以隐藏中间几位数字。

    数据脱敏对应用程序透明,保留原始的数据字段类型和格式。它对数据库高度透明,因为缓存和存储中的数据一致,仅仅在SQL查询结果返回时才更改。连接相同数据库的应用程序可以同时执行数据脱敏。

    10.1.3. 使用数据脱敏的优势

    使用数据脱敏的优势如下:

    • 可以选择不同格式的密文

    • 数据可以运行时被编辑,所以数据脱敏非常适合数据不断变化的场景

    • 可以在数据任意位置创建脱敏策略,以便有效管理数据

    10.1.4. 数据脱敏的对象

    在KingbaseES中,数据脱敏策略仅对用户表及物化视图有效,系统表无效。不支持在脱敏表上建立物化视图,若对已建立物化视图的表上配置脱敏策略,则该物化视图将无法更新数据。

    10.1.5. 数据脱敏的限制

    KingbaseES数据库中对数据脱敏功能的运行做了以下限制:

    1.数据脱敏策略仅允许安全员sso进行配置及查看,其他用户均无权限。

    2.一个脱敏对象(列)上只能配置一种脱敏策略。

    3.数据脱敏目前仅支持对普通表、分区表和物化视图配置脱敏策略,不支持普通视图,在脱敏表上建立视图后查询视图,脱敏用户查询到的结果是脱敏后的值。

    4.仅支持在分区表的主表上配置脱敏策略

    10.1.6. 数据脱敏插件

    使用数据脱敏功能时需要在 kingbase.conf 文件中的guc参数 shared_preload_libraries 中加载 sys_anon 插件。开启数据脱敏插件步骤如下所示:

    1. 修改 kingbase.conf 文件中 shared_preload_libraries 参数。

      shared_preload_libraries = 'sys_anon'
      
    2. 新建数据库需要安装扩展

      CREATE EXTENSION sys_anon;
      

    10.2. 数据脱敏函数与特性

    数据脱敏功能通过使用脱敏函数来实现,KingbaseES支持默认完整脱敏、部分数据脱敏、随时数据脱敏和邮件数据脱敏四种脱敏函数。使用数据库脱敏函数需要结合对应的脱敏策略。

    10.2.1. 默认完整脱敏

    默认脱敏default是一种完整数据脱敏,无需指定,当指定脱敏函数为空时默认指定为默认脱敏。支持的数据类型和各类型数据脱敏结果如下:

    表 10.2.1 默认脱敏

    函数

    支持的数据类型

    描述

    default

    varchar,char,text,timestamp, timestamptz,date,time,

    timetz,integer,smallint,

    tinyint,bigint,smallserial,

    serial, bigserial,boolean,

    real,double

    默认脱敏,无需指定,当指定脱敏函数为空时默认指定为默认脱 敏,各类型数据脱敏结果如下:

    字符类型:空值

    数字类型:0(不保证精度)

    布尔类型:f

    时间类型:年月日部分:1970-01-01, 时分秒部分:00:00:00

    例如,创建一个默认脱敏策略:

    \c - sso
    select add_policy('pol1', 't1.a', '','','');
    

    10.2.2. 部分数据脱敏

    可以使用函数partial自定义数据脱敏,对部分数据进行脱敏输出。部分数据脱敏需要在实际数据中设置脱敏的开始位置和结束位置,这部分数据将用符号*进行脱敏。支持的数据类型和脱敏结果如下:

    表 10.2.2 部分数据脱敏

    函数

    支持的数据类型

    描述

    partial(prefix int,suffix int)

    varchar,char,text

    部分脱敏(自定义脱敏),prefix为保留的前n位,suffix为保 留的后n位,其余位用*进行脱敏,例如partial(2,2)

    例如,创建一个部分脱敏策略:

    \c - sso
    select anon.add_policy('pol1','public.t1.a','u1','partial','2,2');
    

    10.2.3. 随机数据脱敏

    在随机脱敏中,通过将整个值替换成随机值来实现数据脱敏。每次查询结果集显示的脱敏数据都会随机变化,随机脱敏的数据将很难从直观上与真实数据区分开来。KingbaseES支持字符类型、时间类型、数字类型的随机脱敏,具体支持的数据类型和脱敏结果如下:

    表 10.2.3 随机数据脱敏

    函数

    支持的数据类型

    描述

    random_string

    varchar,char,text

    对字符数据类型进行随机脱敏,变长数据根据原数据的数据长度 生成随机字符串,定长数据为根据最大长度生成随机字符串

    random_date

    timestamp,timestamptz,date, time,timetz

    对时间数据类型进行随机脱敏,生成1900-01-01 00:00:00至今 之间的随机时间(根据数据类型改变)

    random_int

    integer,smallint,tinyint, bigint,smallserial,serial, bigserial

    对数字数据类型进行随机脱敏,生成0至该数据类型的最大值的 随机数

    例如,创建一个随机字符串脱敏策略:

    \c - sso
    select anon.add_policy('pol2', 'tab1.b', 'u1','random_string','');
    

    10.2.4. 邮件数据脱敏

    KingbaseES支持邮件格式字符串专用脱敏函数email_mask,将email字符数据最后一个符号.之前的所有字符都将用符号*进行脱敏。具体支持的数据类型和脱敏结果如下:

    表 10.2.4 邮件数据脱敏

    函数

    支持的数据类型

    描述

    email_mask

    varchar,char,text

    邮件格式字符串专用脱敏函数,将email字符数据最后一个.之前 的所有字符替换为*,@符号保留,例如 ’zhangsan@kingbase. com.cn’ 脱敏为 ’******@**********.cn’,没有.符号时不 保留后缀字符串

    例如,创建一个邮件脱敏策略:

    \c - sso
    select anon.add_policy('pol3', 'email_tab.email', 'u1','email_mask','');
    

    10.2.5. 脱敏函数的注意事项

    针对以上章节的脱敏函数介绍,还需要注意以下几点:

    1.当部分脱敏需要保留的位数超过字符串长度时,会采用最基本的部分脱敏,字符串长度为奇数时脱敏最中间的一个字符,偶数时脱敏最中间的两个字符。

    2.涉及字符串类型的脱敏,若数据类型为定长,则按照最大长度进行脱敏,若为变长,则按照实际长度进行脱敏。

    3.当带有策略的列的数据类型被修改时,该列的数据类型只能被修改为当前策略支持范围内的数据类型。

    10.3. 数据脱敏的使用

    10.3.1. 数据脱敏开关

    KingbaseES数据库中对数据脱敏功能设置了开关。数据脱敏功能关闭时,数据库不会对脱敏对象进行脱敏处理。安全员(sso)如果要使 KingbaseES 系统中的数据脱敏设置生效,必须打开该开关。

    anon.enable

    设置审计功能是否开启的总开关,有on和off两种选择,缺省为 off。

    on表示打开数据脱敏功能;

    off表示关闭数据脱敏功能;

    打开(或关闭)数据脱敏开关的方式有如下方式:

    • 在KingbaseES启动之前,通过修改 kingbase.conf 文件,将 anon.enable设置为on(或off)

    • 在KingbaseES启动后,以安全员用户连接数据库,利用ALTER SYSTEM命令将 anon.enable 设置为on | off。打开(或关闭)数据脱敏开关,重载配置后,数据库系统中的数据脱敏功能立即生效(或失效)。

      打开(或关闭)数据脱敏开关并重载的命令:

    ALTER SYSTEM SET anon.enable = on | off;
    CALL sys_reload_conf();
    

    10.3.2. 数据脱敏策略配置

    10.3.2.1. 添加脱敏策略

    anon.add_policy(policy_name text,
        objname text,
        username text,
        func_desc text,
        para_list text
    )
    

    参数说明:

    policy_name

    脱敏策略名,不可为空,策略名唯一。

    objname

    待脱敏的对象,不可为空,格式为:模式.表.列(不写模式时为表.列,模式默认设置为public)。

    username

    待脱敏的对象用户名,可为空,为空对所有用户脱敏。

    func_desc

    脱敏使用的函数(只需要填写函数名),可为空,为空设置为默认脱敏。

    支持使用的脱敏函数详见表 脱敏函数说明。

    para_list

    脱敏函数的参数列表(目前仅适用于部分脱敏),若函数无参数,则该项无效;若函数为部分脱敏时需要填写,参数之间用‘,’分隔,例如’2,2’,参数列表个数为2。

    返回值说明:

    无返回值

    语句示例:

    SELECT anon.add_policy('pol1','public.t1.a','u1','partial','2,2');
    

    10.3.2.2. 修改脱敏策略

    anon.alter_policy(policy_name text,
        username text,
        func_desc text,
        para_list text
    )
    

    参数说明:

    policy_name

    脱敏策略名,不可为空。

    username

    待脱敏的对象用户名,可为空,为空时不修改脱敏用户。

    func_desc

    脱敏使用的函数(只需要填写函数名),可为空,为空时不修改脱敏函数。

    para_list

    脱敏函数的参数列表(目前仅适用于部分脱敏),可为空,为空时不修改参数列表。

    返回值说明:

    无返回值

    语句示例:

    SELECT anon.alter_policy('pol1','u2','random_string','');
    

    10.3.2.3. 删除脱敏策略

    anon.remove_policy(policy_name text)
    

    参数说明:

    policy_name

    脱敏策略名,为空时删除所有策略。

    返回值说明:

    无返回值

    语句示例:

    SELECT anon.remove_policy('pol1');
    

    10.3.3. 数据脱敏配置查询

    数据脱敏策略设置可通过系统视图 all_policy 查询,结构如下表所示:

    表 10.3.5 系统视图 all_policy

    列名

    数据类型

    说明

    policy_name

    text

    数据脱敏策略名

    table_name

    text

    脱敏对象名

    schema_name

    text

    脱敏对象模式名

    column_name

    text

    脱敏列名

    masking_user

    text

    被脱敏用户名

    masking_func

    text

    脱敏函数

    func_parameters

    text

    脱敏函数参数列表

    10.4. 备份数据脱敏化

    10.4.1. 关于备份数据脱敏

    当您需要使用脱敏备份脱敏数据时,KingbaseES支持对备份数据进行脱敏处理

    例如,需要对表t1备份,t1表包含两列,id列和data列,t1已对data列配置默认脱敏,被脱敏用户为u1,当您使用u1用户对表t1进行备份时:

    \c - u1
    create table t1 (id int, data text);
    insert into t1 values (1, 'a'),(2, 'b'), (3, 'c');
    
    \c - sso
    select select add_policy('polx', 't1.data', 'u1','','');
    
    ./sys_dump -d test -p 54321 -U u1 -W -f test.dmp
    cat test.dmp
    1
    2
    3
    

    可见到备份文件中表数据是脱敏的。

    10.4.2. 数据脱敏配置备份恢复

    数据脱敏策略可以使用sys_dump和sys_restore进行备份恢复,操作步骤如下:

    1.使用sso对每个配置了数据脱敏策略的数据库进行备份,例如:

    ./sys_dump -d test -p 54321 -U sso -W -F c -f anon.dmp
    

    2.使用sso对新data实例进行恢复,例如:

    ./sys_restore -p 54321 -U sso -W -d test anon.dmp
    

    注意

    当数据库需要进行升级时也可以使用上述方法升级数据脱敏配置,但要在数据库升级前执行第一步即数据脱敏配置备份,升级完成后执行第二步恢复数据脱敏配置。

    提示

    数据脱敏配置备份恢复时,sys_dump和sys_restore不能指定-a参数,会导致数据脱敏配置无法备份恢复; 如果要指定--section参数,需要指定为post-data。

    10.5. 数据脱敏的安全注意事项

    10.5.1. 对其他功能的影响

    数据脱敏不会影响日常数据库操作,例如备份恢复,导出和导入,数据库集群操作等。

    10.5.2. 数据对象操作的一些注意事项

    对于一些非查询操作,有以下注意事项:

    1.当create table as或insert into的数据来源于脱敏数据,则插入的数据为脱敏后的值,且无法还原。

    2.当merge into的数据来源于脱敏表(无论是否包含脱敏列),均无法更新数据。

    3.分区表上存在脱敏策略时,若交换分区,仅交换分区数据,不交换脱敏策略。

    4.对于设置了动态数据脱敏策略的表,需要谨慎授予其他用户对该表的trigger权限,以免其他用户利用触发器绕过脱敏策略。

  • 相关阅读:
    Kotlin语言的函数头学习
    QT中删除信号于槽的连接
    Spring整合RabbitMQ
    国庆10.4
    图的若干定义及表示
    Vuex使用方式及异步问题处理
    Bootstrap5 表格
    16. Docker容器监控CAdvisor+InfluxDB+Granfana
    Android Audio 焦点
    Java_题目_学生管理系统_注册登录忘记密码
  • 原文地址:https://blog.csdn.net/arthemis_14/article/details/126381511