1. 首页 > MySQL教程 > 正文

MySQL教程FG204-MySQL数据脱敏

Part01-基础概念与理论知识

1.1 数据脱敏概述

数据脱敏是指通过技术手段对敏感数据进行处理,使其在保持业务可用性的同时,不泄露敏感信息。MySQL提供了多种数据脱敏方法,用于保护用户隐私和敏感数据。风哥教程参考MySQL官方文档Security部分的数据脱敏相关内容。更多视频教程www.fgedu.net.cn

# 查看MySQL版本(需要MySQL 8.0+)
mysql> SELECT VERSION();
+———–+
| VERSION() |
+———–+
| 8.4.0 |
+———–+
1 row in set (0.00 sec)

1.2 数据脱敏方法

MySQL支持多种数据脱敏方法,包括屏蔽、替换、加密、截断等。不同的脱敏方法适用于不同类型的敏感数据,如个人身份证号、手机号、银行卡号等。学习交流加群风哥微信: itpux-com

常见脱敏方法:1. 屏蔽:将敏感部分用特定字符(如*)替换;2. 替换:用随机数据替换敏感数据;3. 加密:对敏感数据进行加密处理;4. 截断:保留部分数据,截断其余部分;5.
哈希:对敏感数据进行哈希处理。

1.3 数据脱敏应用场景

数据脱敏广泛应用于以下场景:1. 开发测试环境:使用脱敏数据进行开发和测试;2. 数据分析:在保护隐私的前提下进行数据分析;3. 报表生成:在报表中展示脱敏后的数据;4.
外部共享:与第三方共享数据时保护敏感信息。学习交流加群风哥QQ113257174

# 创建测试表
mysql> CREATE TABLE fgedudb.fgedu_users (
-> id INT PRIMARY KEY AUTO_INCREMENT,
-> name VARCHAR(50) NOT NULL,
-> id_card VARCHAR(18) NOT NULL,
-> phone VARCHAR(11) NOT NULL,
-> email VARCHAR(100) NOT NULL,
-> bank_card VARCHAR(19) NOT NULL,
-> salary DECIMAL(10,2) NOT NULL
-> );
Query OK, 0 rows affected (0.01 sec)

# 插入测试数据
mysql> INSERT INTO fgedudb.fgedu_users (name, id_card, phone, email, bank_card, salary) VALUES
-> (‘张三’, ‘110101199001011234’, ‘13812345678’, ‘zhangsan@example.com’, ‘6222021234567890123’, 10000.00),
-> (‘李四’, ‘310101199102022345’, ‘13987654321’, ‘lisi@example.com’, ‘6222029876543210987’, 15000.00),
-> (‘王五’, ‘440101199203033456’, ‘13765432109’, ‘wangwu@example.com’, ‘6222025678901234567’, 20000.00);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

Part02-生产环境规划与建议

2.1 数据脱敏策略

在生产环境中,需要制定合理的数据脱敏策略,明确哪些数据需要脱敏、使用哪种脱敏方法、脱敏的程度等。风哥提示:生产环境中应根据数据的敏感程度和业务需求,选择合适的脱敏策略,确保数据安全的同时不影响业务功能。

生产环境建议:1. 对不同类型的敏感数据采用不同的脱敏方法;2. 建立脱敏规则库,统一管理脱敏策略;3. 定期审查脱敏效果,确保脱敏的有效性;4.
对脱敏数据进行访问控制,防止未授权访问。

2.2 敏感数据识别

识别敏感数据是数据脱敏的前提。需要根据业务需求和法规要求,识别出需要脱敏的敏感数据,如个人身份信息、财务信息、健康信息等。更多学习教程公众号风哥教程itpux_com

# 查看表结构,识别敏感字段
mysql> DESC fgedudb.fgedu_users;
+———-+—————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+———-+—————+——+—–+———+—————-+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| id_card | varchar(18) | NO | | NULL | |
| phone | varchar(11) | NO | | NULL | |
| email | varchar(100) | NO | | NULL | |
| bank_card| varchar(19) | NO | | NULL | |
| salary | decimal(10,2) | NO | | NULL | |
+———-+—————+——+—–+———+—————-+
7 rows in set (0.00 sec)

# 敏感字段识别结果:
# id_card(身份证号)、phone(手机号)、bank_card(银行卡号)、salary( salary)

2.3 脱敏规则设计

根据敏感数据的类型和业务需求,设计合理的脱敏规则。脱敏规则应考虑数据的特性、脱敏后的可用性以及合规要求。from MySQL:www.itpux.com

# 设计脱敏规则示例:
# 1. 身份证号:保留前6位和后4位,中间用*替换
# 2. 手机号:保留前3位和后4位,中间用*替换
# 3. 银行卡号:保留前4位和后4位,中间用*替换
# 4. 邮箱:保留用户名前2位和域名,中间用*替换
# 5. salary:保留万位,其余用*替换

Part03-生产环境项目实施方案

3.1 数据脱敏插件安装

MySQL 8.0+提供了内置的数据脱敏函数,不需要额外安装插件。这些函数可以直接用于数据脱敏操作。

# 查看MySQL内置的脱敏函数
mysql> SHOW FUNCTIONS LIKE ‘%mask%’;
+————————+———————-+—————-+———————-+
| Function_name | Db | Type | Definer |
+————————+———————-+—————-+———————-+
| mask_inner | sys | FUNCTION | mysql.sys@localhost |
| mask_outer | sys | FUNCTION | mysql.sys@localhost |
| mask_pan | sys | FUNCTION | mysql.sys@localhost |
| mask_pan_relaxed | sys | FUNCTION | mysql.sys@localhost |
| mask_ssn | sys | FUNCTION | mysql.sys@localhost |
+————————+———————-+—————-+———————-+
5 rows in set (0.00 sec)

3.2 脱敏规则配置

使用MySQL内置的脱敏函数,配置不同类型数据的脱敏规则。

# 创建脱敏视图
mysql> CREATE VIEW fgedudb.fgedu_users_masked AS
-> SELECT
-> id,
-> name,
-> CONCAT(SUBSTRING(id_card, 1, 6), REPEAT(‘*’, 8), SUBSTRING(id_card, 15, 4)) AS id_card,
-> CONCAT(SUBSTRING(phone, 1, 3), ‘****’, SUBSTRING(phone, 8, 4)) AS phone,
-> CONCAT(SUBSTRING(email, 1, 2), ‘***’, SUBSTRING(email, INSTR(email, ‘@’))) AS email,
-> CONCAT(SUBSTRING(bank_card, 1, 4), ‘ **** **** ‘, SUBSTRING(bank_card, 16, 4)) AS bank_card,
-> CONCAT(FLOOR(salary / 10000) * 10000, ‘****’) AS salary
-> FROM fgedudb.fgedu_users;
Query OK, 0 rows affected (0.00 sec)

3.3 脱敏效果验证

验证脱敏效果,确保敏感数据被正确脱敏,同时保持数据的可用性。

# 查看原始数据
mysql> SELECT * FROM fgedudb.fgedu_users;
+—-+——+——————+————-+——————-+———————+———-+
| id | name | id_card | phone | email | bank_card | salary |
+—-+——+——————+————-+——————-+———————+———-+
| 1 | 张三 | 110101199001011234 | 13812345678 | zhangsan@example.com | 6222021234567890123 | 10000.00 |
| 2 | 李四 | 310101199102022345 | 13987654321 | lisi@example.com | 6222029876543210987 | 15000.00 |
| 3 | 王五 | 440101199203033456 | 13765432109 | wangwu@example.com | 6222025678901234567 | 20000.00 |
+—-+——+——————+————-+——————-+———————+———-+
3 rows in set (0.00 sec)

# 查看脱敏后的数据
mysql> SELECT * FROM fgedudb.fgedu_users_masked;
+—-+——+——————+————-+——————-+———————+———-+
| id | name | id_card | phone | email | bank_card | salary |
+—-+——+——————+————-+——————-+———————+———-+
| 1 | 张三 | 110101********1234 | 138****5678 | zh***@example.com | 6222 **** **** 0123 | 10000**** |
| 2 | 李四 | 310101********2345 | 139****4321 | li***@example.com | 6222 **** **** 0987 | 15000**** |
| 3 | 王五 | 440101********3456 | 137****2109 | wa***@example.com | 6222 **** **** 4567 | 20000**** |
+—-+——+——————+————-+——————-+———————+———-+
3 rows in set (0.00 sec)

Part04-生产案例与实战讲解

4.1 个人信息脱敏

个人信息是最常见的敏感数据,需要进行脱敏处理以保护用户隐私。

# 使用内置函数进行脱敏
mysql> SELECT
-> name,
-> mask_inner(id_card, 6, 4) AS id_card,
-> mask_inner(phone, 3, 4) AS phone,
-> CONCAT(SUBSTRING(email, 1, 2), ‘***’, SUBSTRING(email, INSTR(email, ‘@’))) AS email
-> FROM fgedudb.fgedu_users;
+——+——————+————-+——————-+
| name | id_card | phone | email |
+——+——————+————-+——————-+
| 张三 | 110101********1234 | 138****5678 | zh***@example.com |
| 李四 | 310101********2345 | 139****4321 | li***@example.com |
| 王五 | 440101********3456 | 137****2109 | wa***@example.com |
+——+——————+————-+——————-+
3 rows in set (0.00 sec)

4.2 财务数据脱敏

财务数据如银行卡号、工资等也需要进行脱敏处理,以防止财务信息泄露。

# 对财务数据进行脱敏
mysql> SELECT
-> name,
-> mask_pan(bank_card) AS bank_card,
-> CONCAT(FLOOR(salary / 10000) * 10000, ‘****’) AS salary
-> FROM fgedudb.fgedu_users;
+——+———————+———-+
| name | bank_card | salary |
+——+———————+———-+
| 张三 | 6222 **** **** 0123 | 10000**** |
| 李四 | 6222 **** **** 0987 | 15000**** |
| 王五 | 6222 **** **** 4567 | 20000**** |
+——+———————+———-+
3 rows in set (0.00 sec)

4.3 脱敏数据使用

脱敏后的数据可以用于开发测试、数据分析、报表生成等场景,既保护了敏感信息,又保持了数据的可用性。

# 创建开发测试用的脱敏表
mysql> CREATE TABLE fgedudb.fgedu_users_dev AS
-> SELECT
-> id,
-> name,
-> mask_inner(id_card, 6, 4) AS id_card,
-> mask_inner(phone, 3, 4) AS phone,
-> CONCAT(SUBSTRING(email, 1, 2), ‘***’, SUBSTRING(email, INSTR(email, ‘@’))) AS email,
-> mask_pan(bank_card) AS bank_card,
-> CONCAT(FLOOR(salary / 10000) * 10000, ‘****’) AS salary
-> FROM fgedudb.fgedu_users;
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0

# 查看开发测试表
mysql> SELECT * FROM fgedudb.fgedu_users_dev;
+—-+——+——————+————-+——————-+———————+———-+
| id | name | id_card | phone | email | bank_card | salary |
+—-+——+——————+————-+——————-+———————+———-+
| 1 | 张三 | 110101********1234 | 138****5678 | zh***@example.com | 6222 **** **** 0123 | 10000**** |
| 2 | 李四 | 310101********2345 | 139****4321 | li***@example.com | 6222 **** **** 0987 | 15000**** |
| 3 | 王五 | 440101********3456 | 137****2109 | wa***@example.com | 6222 **** **** 4567 | 20000**** |
+—-+——+——————+————-+——————-+———————+———-+
3 rows in set (0.00 sec)

Part05-风哥经验总结与分享

通过多年的MySQL数据库管理经验,我总结了以下关于MySQL数据脱敏的关键点:

风哥提示:数据脱敏是保护用户隐私和敏感信息的重要措施,在实施过程中需要平衡安全性和可用性,确保脱敏后的数据既安全又能满足业务需求。

1. 脱敏方法选择:根据数据类型和业务需求选择合适的脱敏方法,如屏蔽、替换、加密等。

2. 脱敏规则设计:设计合理的脱敏规则,确保脱敏后的数据分析和报表生成。

3. 性能考虑:数据脱敏可能会对查询性能产生一定影响,需要在设计时考虑性能因素。

4. 合规性:确保数据脱敏符合相关法规要求,如GDPR、个人信息保护法等。

5. 访问控制:对脱敏数据进行访问控制,防止未授权访问。

6. 监控与审计:监控脱敏操作,确保脱敏规则的有效执行。

生产环境最佳实践:1. 使用视图或存储过程进行数据脱敏,避免直接修改原始数据;2. 建立脱敏规则库,统一管理脱敏策略;3. 定期审查脱敏效果,确保脱敏的有效性;4.
对脱敏数据进行分类管理,根据敏感程度采用不同的脱敏方法;5. 建立数据脱敏的审计机制,记录脱敏操作。
GF-MySQL数据库培训文档系列

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息