动态脱敏 #
简介 #
在 DBPlusEngine-Proxy 中可以配置 SphereEx:MASK_ROLE 脱敏算法,不同角色登录 DBPlusEngine-Proxy 后显示不同的脱敏数据。而该角色是 DBPlusEngine-Proxy 中用户的角色。
而当使用 DBPlusEngine-Driver 时,配置的 jdbc user 又是固定值,没法和业务的用户角色进行联动,如果想根据业务系统的用户角色实现动态脱敏怎么样办呢?此时引入了 DynamicACLMatchingMaskPlugin SPI。
用户可以实现 DynamicACLMatchingMaskPlugin SPI, 配合在 DBPlusEngine-Proxy 中配置的 SphereEx:MASK_ROLE 脱敏算法实现这种需求。
主要使用场景:
- 集成 DBPlusEngine-Driver 的应用根据业务系统用户角色实现动态脱敏
操作步骤 #
- 在 DBPlusEngine-Proxy 中配置好使用
SphereEx:MASK_ROLE脱敏算法的脱敏规则,配置好应用中需要脱敏的角色。 - 在应用中实现 DynamicACLMatchingMaskPlugin SPI,返回当前用户角色。
规则配置 #
在 DBPlusEngine-Proxy 中配置脱敏规则,如定义当应用系统用户角色为 guest 时会对 t_user 表的 name 和 phone 列进行脱敏显示。
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 "";
}
}