MySQL数据脱敏的实现方法

 更新时间:2025年08月10日 11:06:44   作者:Victor356  
本文主要介绍了MySQL数据脱敏的实现方法,包括字符替换、加密等方法,通过工具类和数据库服务整合,确保敏感信息在查询结果中被掩码处理,感兴趣的可以了解一下

数据脱敏(Data Masking)是指通过某种方式对敏感数据进行变形,使其在使用过程中无法识别原始数据,从而保护数据隐私。数据脱敏通常应用在开发、测试和数据分析等场景中。下面我们详细介绍如何在Java应用程序中进行数据脱敏,并结合代码示例进行说明。

一. 数据脱敏的方法

常见的数据脱敏方法有:

  1. 字符替换:用特定字符替换部分敏感数据,例如将身份证号的中间部分用“*”替换。
  2. 加密:对数据进行加密,使其难以识别。
  3. 数据混淆:通过改变数据的原始结构,使其不可识别。
  4. 数据截断:只显示部分数据,隐藏其余部分。

二. 字符替换脱敏

以下示例展示了如何使用字符替换的方法进行数据脱敏。我们将实现一个简单的工具类,用于对不同类型的敏感数据进行脱敏处理。

1. 创建数据脱敏工具类

我们创建一个名为DataMaskingUtil的工具类,提供各种常见的脱敏方法。

public class DataMaskingUtil {

    /**
     * 脱敏处理:将字符串的中间部分用指定字符替换。
     *
     * @param str         待脱敏的字符串
     * @param start       开始保留多少位
     * @param end         末尾保留多少位
     * @param maskChar    替换的字符
     * @return            脱敏处理后的字符串
     */
    public static String mask(String str, int start, int end, char maskChar) {
        if (str == null || str.length() <= start + end) {
            return str;
        }

        StringBuilder maskedString = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            if (i < start || i >= str.length() - end) {
                maskedString.append(str.charAt(i));
            } else {
                maskedString.append(maskChar);
            }
        }
        return maskedString.toString();
    }

    /**
     * 对手机号进行脱敏处理
     *
     * @param phoneNumber 原始手机号
     * @return            脱敏后的手机号
     */
    public static String maskPhoneNumber(String phoneNumber) {
        return mask(phoneNumber, 3, 4, '*');
    }

    /**
     * 对身份证号进行脱敏处理
     *
     * @param idNumber 原始身份证号
     * @return         脱敏后的身份证号
     */
    public static String maskIDNumber(String idNumber) {
        return mask(idNumber, 3, 4, '*');
    }

    /**
     * 对电子邮箱进行脱敏处理
     *
     * @param email 原始电子邮箱
     * @return      脱敏后的电子邮箱
     */
    public static String maskEmail(String email) {
        if (email == null || !email.contains("@")) {
            return email;
        }

        String[] parts = email.split("@");
        String localPart = parts[0];
        String domainPart = parts[1];

        String maskedLocalPart = localPart.length() <= 2 ? localPart : mask(localPart, 1, 1, '*');
        return maskedLocalPart + "@" + domainPart;
    }

    /**
     * 对信用卡号进行脱敏处理
     *
     * @param creditCardNumber 原始信用卡号
     * @return                 脱敏后的信用卡号
     */
    public static String maskCreditCardNumber(String creditCardNumber) {
        return mask(creditCardNumber, 4, 4, '*');
    }

    public static void main(String[] args) {
        // 测试脱敏处理
        System.out.println("Phone Number: " + maskPhoneNumber("13812345678"));
        System.out.println("ID Number: " + maskIDNumber("123456789012345678"));
        System.out.println("Email: " + maskEmail("example@example.com"));
        System.out.println("Credit Card Number: " + maskCreditCardNumber("1234123412341234"));
    }
}

三. 整合到数据库操作

我们可以将数据脱敏功能集成到数据库操作中,以确保在查询结果中对敏感数据进行脱敏处理。

1. 创建服务类进行数据库操作

假设我们有一个名为User的实体类,其中包含敏感信息,如手机号、身份证号等。

public class User {
    private int id;
    private String name;
    private String phoneNumber;
    private String idNumber;
    private String email;
    private String creditCardNumber;

    // Getters and setters
    // ...
}

2. 创建数据库操作服务类

我们创建一个服务类UserService,用于从数据库中查询用户信息并进行脱敏处理。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class UserService {
    private static final String URL = "jdbc:mysql://localhost:3306/sensitive_data_db";
    private static final String USER = "root";
    private static final String PASSWORD = "password";

    public User getUserById(int userId) throws Exception {
        User user = null;
        try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD)) {
            String sql = "SELECT * FROM users WHERE id = ?";
            try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
                pstmt.setInt(1, userId);
                ResultSet rs = pstmt.executeQuery();
                if (rs.next()) {
                    user = new User();
                    user.setId(rs.getInt("id"));
                    user.setName(rs.getString("name"));
                    user.setPhoneNumber(DataMaskingUtil.maskPhoneNumber(rs.getString("phone_number")));
                    user.setIdNumber(DataMaskingUtil.maskIDNumber(rs.getString("id_number")));
                    user.setEmail(DataMaskingUtil.maskEmail(rs.getString("email")));
                    user.setCreditCardNumber(DataMaskingUtil.maskCreditCardNumber(rs.getString("credit_card_number")));
                }
            }
        }
        return user;
    }

    public static void main(String[] args) throws Exception {
        UserService userService = new UserService();
        User user = userService.getUserById(1);
        if (user != null) {
            System.out.println("User ID: " + user.getId());
            System.out.println("Name: " + user.getName());
            System.out.println("Phone Number: " + user.getPhoneNumber());
            System.out.println("ID Number: " + user.getIdNumber());
            System.out.println("Email: " + user.getEmail());
            System.out.println("Credit Card Number: " + user.getCreditCardNumber());
        }
    }
}

四. 测试数据脱敏

运行上述代码,可以看到从数据库中查询到的用户信息已经经过了脱敏处理,敏感数据部分被替换为特定的掩码字符。

总结

通过以上步骤,我们详细介绍了如何在Java应用程序中进行数据脱敏。这个过程包括:

  1. 创建数据脱敏工具类,提供多种脱敏方法。
  2. 创建数据库操作服务类,将数据脱敏功能集成到数据库查询中。
  3. 测试数据脱敏功能,确保敏感数据在查询结果中被适当掩码。

通过这种方式,可以有效保护数据隐私,防止敏感信息泄露。

到此这篇关于MySQL数据脱敏的实现方法的文章就介绍到这了,更多相关MySQL数据脱敏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • navicat连接mysql时出现1045错误的解决方法

    navicat连接mysql时出现1045错误的解决方法

    这篇文章主要为大家详细介绍了navicat连接mysql时出现1045错误的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • MySQL千万不要这样写update语句

    MySQL千万不要这样写update语句

    MySQL中update语句用于更新表中的现有数据,亦可用UPDATE语句来更改表中单个行,一组行或所有行的列值,这篇文章主要给大家介绍了关于MySQL千万不要这样写update语句的相关资料,需要的朋友可以参考下
    2021-11-11
  • 一文详解如何重置你的MySQL或MariaDB的root密码

    一文详解如何重置你的MySQL或MariaDB的root密码

    本文主要介绍了如何重置MySQL和MariaDB的root密码,当你忘记或者丢失了数据库的root密码时,只要你可以访问服务器并拥有一个sudo-enabled用户账户,你就可以恢复访问权限并重置密码,需要的朋友可以参考下
    2024-10-10
  • 使用xtrabackup实现mysql备份

    使用xtrabackup实现mysql备份

    Xtrabackup 是percona公司的开源项目,用以实现类似innodb官方的热备份工具InnoDB Hot Backup的功能,能够非常快速地备份与恢复MySQL数据库。今天我们就来详细讨论下Xtrabackup的使用方法
    2016-11-11
  • mysql数据库存储过程之游标(光标cursor)详解

    mysql数据库存储过程之游标(光标cursor)详解

    这篇文章主要介绍了mysql数据库存储过程之游标(光标cursor)详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Mysql脏页flush及收缩表空间原理解析

    Mysql脏页flush及收缩表空间原理解析

    这篇文章主要介绍了Mysql脏页flush及收缩表空间原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • MySQL数据管理操作示例讲解

    MySQL数据管理操作示例讲解

    MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性
    2022-12-12
  • Mysql表的操作方法详细介绍

    Mysql表的操作方法详细介绍

    这篇文章主要为大家详细介绍了MySQL数据库中表常用的一些操作方法,文中的示例代码讲解详细, 对我们学习MySQL有一定帮助,需要的可以参考一下
    2022-09-09
  • 一次MySQL启动导致的事故实战记录

    一次MySQL启动导致的事故实战记录

    这篇文章主要给大家介绍了一次MySQL启动导致的事故实战记录,记录了MySQL 启动成功但未监听端口的解决方法,文中给出了详细的解决方法,需要的朋友可以参考下
    2021-09-09
  • Mysql允许他人访问本机数据库的实现步骤

    Mysql允许他人访问本机数据库的实现步骤

    mysql允许其他电脑访问,授权mysql允许其他电脑访问,本文就来介绍一下Mysql允许他人访问本机数据库的实现步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11

最新评论