Defensor添加自定义脱敏算法

  使用配置
内容纲要

概要描述


本文主要介绍,如何在defensor中添加自定义udf作为脱敏算法函数,并实现脱敏功能。

适用范围:defensor-3.2.0之前的版本

详细说明


当前在inceptor数据库中,存在一张emp员工表,其中sal是敏感字段,我们需要对该字段进行脱敏

file

1. java代码编写打包

UDF支持使用java代码实现,示例以及要求如下:

package io.udf;

import java.util.Random;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.serde2.io.DoubleWritable;
import org.apache.hadoop.io.LongWritable;

//该udf的描述,创建完成后可使用命令desc function extended rand来查看此信息
@Description(name = "rand",
        value = "_FUNC_([seed]) - Returns a pseudorandom number between 0 and 1")

public class RandomNumber extends UDF {
    private Random random;
    private final DoubleWritable result = new DoubleWritable();
    public UDFRand() {
    }

//udf需要实现此evaluate()接口,调用时从此接口调用
    public DoubleWritable evaluate() {
        if (random == null) {
            random = new Random();
        }
        result.set(random.nextDouble());
        return result;
    }

//一个udf可以实现多个evaluate()接口,以支持不同类型的参数
    public DoubleWritable evaluate(LongWritable seed) {
        if (random == null) {
            random = new Random(seed.get());
        }
        result.set(random.nextDouble());
        return result;
    }

}

完成后将代码打包

mvn clean package -DskipTests

2. 将jar包做udf镜像持久化

**4.X版本:**
1) udf.jar放到/usr/lib/hive/lib中(每个executor节点);
2) add jar  /usr/lib/hive/lib/udf.jar;
3) create permanent function func_name as 'package.classname';

**5.X版本以上**
1) 把udf.jar放到/usr/lib/inceptor/lib目录下,push到镜像仓库;
2) 重启inceptor来获取最新镜像;
3) create permanent function func_name as 'package.classname';

注意:
1) udf无论是临时还是永久,如果要删除并重新创建使用相同类或者jar的话,都要重启inceptor server;
2) 官方不推荐使用using jar的方式是因为此方法存在异常隐患,会报找不到jar包的错误。

实际执行如下:

inceptor> create permanent function random_number as 'io.udf.RandomNumber';
inceptor> DESCRIBE FUNCTION EXTENDED random_number;
inceptor> SELECT random_number() FROM system.dual;

该函数,会生成0到1之间的随机小数:

file

3. 在kundb中添加udf信息

//连接KunDB
mysql -h  -P15307 -uxxx -pxxx
//将新建UDF信息插入到表中
mysql> use protection_defensor1;    // 找到defensor实例对应的库名,根据实际情况替换

//查找脱敏算法的根节点
SELECT * FROM protection_navigator WHERE parent_uuid =
(SELECT uuid FROM protection_navigator WHERE parent_uuid = '-' AND category = 'MASK_ALGORITHM');

file

需要自己定义将新建的UDF放在哪一类脱敏算法中,即parent_uuid以及parent_ids,该项在protection_navigator表中选择一个即可,也可以选择自己新建,
假设添加一个名为rand的UDF,属于随机替换脱敏类的算法,那么它的parent_uuid值为 a43a40d337da4b408d577eaf2fb896f2,parent_ids值为 1/3。因为随机替换脱敏算法的父节点id是1,它的id是3。

INSERT INTO protection_navigator(uuid,parent_uuid,name,parent_ids,node_type,category,description,owner,tenant) 
select 
    REPLACE(UUID(), '-', ''),
    '7a4fe639d9044b4bbc5123cf5ae7087f',
    'random_number',
    '1/3',
    'FILE',
    'MASK_ALGORITHM',
    '生成介于(0,1)之间的随机小数',
    'Anonymous',
    'Anonymous';

file

//记录一下上述条目插入后的uuid,假设为5b7f399b2d8d4105878d25f8a19fd458,后续插入算法详情时需要用到
//将新建UDF的详细信息插入到protection_mask_algorithm表中
mysql> INSERT INTO protection_mask_algorithm(uuid,param_description,param_tips,udf_name,udf_column_types) 
VALUES ('48830ae86bcb11ed8736005056abf6b9','生成介于(0,1)之间的随机小数','int seed or null','random_number','INTEGER');

file

4. Defensor页面操作

上面的步骤,我们已经将random_number这个udf函数放到了【随机替换脱敏】中,

通过foundation gateway页面进入Defensor,静态脱敏中创建脱敏任务,

脱敏方式,选择【手动脱敏】
脱敏模式,选择【全量】
脱敏周期,选择【无周期】

file

源端配置:
我们选择inceptor数据库中,default库下的emp表的sal字段,该字段为薪资字段,比较敏感;
在脱敏算法中,我们选择【随机替换脱敏】中的random_number

file

目标端配置:

自定义一张目标表表名

file

点击右上角【保存】-【发布】-【执行】,完成后可以在inceptor中看到保存的脱敏后的表emp_dst01

file

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。