Part01-基础概念与理论知识
1.1 数据脱敏概述
数据脱敏是指通过技术手段对敏感数据进行处理,使其在保持业务可用性的同时,不泄露敏感信息。MySQL提供了多种数据脱敏方法,用于保护用户隐私和敏感数据。风哥教程参考MySQL官方文档Security部分的数据脱敏相关内容。更多视频教程www.fgedu.net.cn
mysql> SELECT VERSION();
+———–+
| VERSION() |
+———–+
| 8.4.0 |
+———–+
1 row in set (0.00 sec)
1.2 数据脱敏方法
MySQL支持多种数据脱敏方法,包括屏蔽、替换、加密、截断等。不同的脱敏方法适用于不同类型的敏感数据,如个人身份证号、手机号、银行卡号等。学习交流加群风哥微信: itpux-com
哈希:对敏感数据进行哈希处理。
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 数据脱敏策略
在生产环境中,需要制定合理的数据脱敏策略,明确哪些数据需要脱敏、使用哪种脱敏方法、脱敏的程度等。风哥提示:生产环境中应根据数据的敏感程度和业务需求,选择合适的脱敏策略,确保数据安全的同时不影响业务功能。
对脱敏数据进行访问控制,防止未授权访问。
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> 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. 监控与审计:监控脱敏操作,确保脱敏规则的有效执行。
对脱敏数据进行分类管理,根据敏感程度采用不同的脱敏方法;5. 建立数据脱敏的审计机制,记录脱敏操作。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
