邀你来面试—那些常见的数据脱敏方案

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受.

有兄弟在面试过程中,被问及有没有在项目中做过数据脱敏操作,都有哪些方案可以进行数据的脱敏?各种的优缺点是什么?
今天我们来聊一聊这个话题... ...

目录

1. SQL 数据脱敏

1.1 设计思想

1.2 实现细节

1.3 注意事项

2. JAVA 数据脱敏

2.1 设计思想

2.2 实现细节

2.3 注意事项

3. mybatis-mate-sensitive-jackson 插件

3.1 设计思想

3.2 实现细节

3.3 注意事项

4. 三种方案的优缺点对比

4.1 SQL 数据脱敏

4.2 JAVA 数据脱敏

4.3 mybatis-mate-sensitive-jackson 插件

总结

1. SQL 数据脱敏

1.1 设计思想

通过 SQL 语句中的字符串函数(如 CONCATLEFTRIGHT)对敏感数据进行部分隐藏,实现数据的脱敏处理。

1.2 实现细节

  • 电话号码脱敏

    sql

    复制

    SELECT mobilePhone AS 脱敏前电话号码, CONCAT(LEFT(mobilePhone, 3), '********') AS 脱敏后电话号码 FROM t_s_user;
    • 使用 LEFT 函数提取电话号码的前 3 位,剩余部分用 * 替代。

  • 身份证号码脱敏

    sql

    复制

    SELECT idcard AS 未脱敏身份证, CONCAT(LEFT(idcard, 3), '****', RIGHT(idcard, 4)) AS 脱敏后身份证号 FROM t_s_user;
    • 使用 LEFT 函数提取身份证号码的前 3 位,中间部分用 * 替代,保留后 4 位。

1.3 注意事项

  • 性能影响:SQL 脱敏操作在查询时实时进行,可能会对数据库性能产生一定影响,尤其是在数据量较大时。

  • 数据一致性:脱敏后的数据仅在查询结果中显示,原始数据在数据库中保持不变,需确保数据一致性。

  • 安全性:虽然脱敏处理可以隐藏部分数据,但仍需注意防止 SQL 注入等安全问题。

2. JAVA 数据脱敏

2.1 设计思想

通过 Java 程序对敏感数据进行处理,使用正则表达式或自定义规则对数据进行脱敏。支持多种数据类型(如身份证号、手机号、银行卡号等)的脱敏处理。

2.2 实现细节

  • 工具库推荐:使用如 sensitive-plus 等开源库。

  • 脱敏方式

    • 正则脱敏:通过正则表达式匹配敏感数据并进行替换。

    • 显示长度脱敏:根据数据的显示长度进行脱敏处理。

  • 配置方式:可以根据需要自定义脱敏规则,灵活配置脱敏策略。

2.3 注意事项

  • 性能优化:正则表达式的复杂度可能影响程序性能,需优化正则表达式以提高效率。

  • 数据完整性:脱敏后的数据需确保格式正确,避免影响后续业务逻辑。

  • 安全性:需确保脱敏规则的安全性,防止敏感数据泄露。

3. mybatis-mate-sensitive-jackson 插件

3.1 设计思想

基于 MyBatis 和 Jackson 的脱敏插件,通过注解和自定义策略实现数据的自动脱敏处理。支持多种常见的敏感数据类型,并允许用户自定义脱敏策略。

3.2 实现细节

  • 依赖配置

    xml

    复制

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-mate-sensitive-jackson</artifactId>
    </dependency>
  • 注解使用

    java

    复制

    @FieldSensitive(SensitiveType.mobile)
    private String mobile;
    • 使用注解标识需要脱敏的字段,并指定脱敏策略。

  • 自定义策略

    java

    复制

    @Bean
    public ISensitiveStrategy sensitiveStrategy() {
        return new SensitiveStrategy().addStrategy("testStrategy", t -> t + "***test***");
    }
    • 通过实现 ISensitiveStrategy 接口,添加自定义脱敏策略。

3.3 注意事项

  • 授权问题:该插件在生产环境中需要购买授权,测试环境使用的证书会失效。

  • 性能影响:脱敏处理在数据序列化时进行,可能会对性能产生一定影响,需根据实际情况评估。

  • 兼容性:需确保与现有的 MyBatis 和 Jackson 版本兼容。

4. 三种方案的优缺点对比

4.1 SQL 数据脱敏

  • 优点

    • 实现简单,无需额外的程序代码。

    • 对业务逻辑无侵入性,不影响现有代码。

  • 缺点

    • 性能可能受限于数据库查询效率。

    • 脱敏规则固定,灵活性较差。

    • 数据库层面的脱敏无法覆盖所有应用场景。

4.2 JAVA 数据脱敏

  • 优点

    • 灵活性高,可以通过正则表达式或自定义规则实现复杂脱敏逻辑。

    • 可以在业务逻辑中灵活处理脱敏数据。

  • 缺点

    • 需要编写和维护额外的代码。

    • 正则表达式的性能优化较为复杂。

    • 对开发人员的技术要求较高。

4.3 mybatis-mate-sensitive-jackson 插件

  • 优点

    • 基于注解和策略模式,使用方便,开发效率高。

    • 支持多种常见敏感数据类型,可扩展性强。

    • 与 MyBatis 和 Jackson 集成紧密,对业务逻辑侵入性小。

  • 缺点

    • 生产环境需要购买授权,增加了使用成本。

    • 插件的性能影响需要在实际应用中评估。

    • 对于不熟悉 MyBatis 或 Jackson 的开发人员,学习成本较高。

总结

三种数据脱敏方案各有优缺点,选择时需根据实际需求和应用场景进行权衡。如果希望快速实现且对性能要求不高,可以优先考虑 SQL 数据脱敏;如果需要灵活的脱敏逻辑,推荐使用 Java 数据脱敏;如果项目已经使用 MyBatis 和 Jackson,且对开发效率有较高要求,可以考虑使用 mybatis-mate-sensitive-jackson 插件。
 

 相知不迷路,欢迎你来 :“codingba” or “码出精彩” 交朋友

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值