Logo
动态脱敏

动态脱敏 #

简介 #

在 DBPlusEngine-Proxy 中可以配置 SphereEx:MASK_ROLE 脱敏算法,不同角色登录 DBPlusEngine-Proxy 后显示不同的脱敏数据。而该角色是 DBPlusEngine-Proxy 中用户的角色。 而当使用 DBPlusEngine-Driver 时,配置的 jdbc user 又是固定值,没法和业务的用户角色进行联动,如果想根据业务系统的用户角色实现动态脱敏怎么样办呢?此时引入了 DynamicACLMatchingMaskPlugin SPI。 用户可以实现 DynamicACLMatchingMaskPlugin SPI, 配合在 DBPlusEngine-Proxy 中配置的 SphereEx:MASK_ROLE 脱敏算法实现这种需求。

主要使用场景:

  • 集成 DBPlusEngine-Driver 的应用根据业务系统用户角色实现动态脱敏

操作步骤 #

  1. 在 DBPlusEngine-Proxy 中配置好使用 SphereEx:MASK_ROLE 脱敏算法的脱敏规则,配置好应用中需要脱敏的角色。
  2. 在应用中实现 DynamicACLMatchingMaskPlugin SPI,返回当前用户角色。

规则配置 #

在 DBPlusEngine-Proxy 中配置脱敏规则,如定义当应用系统用户角色为 guest 时会对 t_user 表的 namephone 列进行脱敏显示。

CREATE MASK RULE IF NOT EXISTS `t_user` (
COLUMNS(
(NAME=`name`, ALGORITHM_GROUPS(
(MASK_ALGORITHM(TYPE(NAME='SphereEx:MASK_CHINESE_NAME', PROPERTIES('first-n'='1','last-m'='1','replace-char'='*'))), 
MATCHING_ALGORITHM(TYPE(NAME='SphereEx:MASK_ROLE', PROPERTIES('role-lists'='guest')))))
),
(NAME=`phone`, ALGORITHM_GROUPS(
(MASK_ALGORITHM(TYPE(NAME='KEEP_FIRST_N_LAST_M', PROPERTIES('first-n'='1','last-m'='1','replace-char'='*'))), 
MATCHING_ALGORITHM(TYPE(NAME='SphereEx:MASK_ROLE', PROPERTIES('role-lists'='guest')))))
)
));

SPI 实现 #

在应用自定义类实现 com.sphereex.dbplusengine.mask.plugin.spi.DynamicACLMatchingMaskPlugin 接口。 DBPlusEngine-Driver 会根据脱敏规则和接口返回的应用系统用户角色判断是否进行脱敏。应用中只能有一个 DynamicACLMatchingMaskPlugin 接口实现,如果有多个时,DBPlusEngine-Driver 只会随机选择一个。

public class CustomDynamicACLMatchingMaskPlugin implements DynamicACLMatchingMaskPlugin {
    
    @Override
    public Optional<Collection<String>> findCurrentRoles() {
        // 返回应用当前会话用户的角色列表
        return Optional.of(Collections.singletonList("guest"));
    }
    
    @Override
    public Object getType() {
        // 返回空字符串,即可
        return "";
    }
}