MySQL数据库中很可能包含有价值且敏感的信息。MySQL通过使用加密,访问控制,审计,视图等功能来保护此类数据。但是,在许多情况下,用户需要共享一些此类数据,但又必须同时保护敏感信息。这就是需要使用数据屏蔽和反识别技术的地方。
屏蔽数据
敏感数据可以是任何东西的数字。例如,您的数据可能包含PII(个人身份信息),PHI(受保护的健康信息),PCI(支付卡信息),财务数据,知识产权或教育相关信息。又很多法规及条例,对这些敏感数据的处理和共享进行了规范。
§ PCI DSS
§ HIPAA
§ 欧盟通用数据保护条例(GDPR)
§ ITAR
§ EAR
当然,还有更多涉及数据保护的法规。此外,公司有自己的内部规范来处理机密信息。
有些情况下,需要在生产环境的MySQL数据库之外共享数据。这些共享数据的用户包括 - 分析师,开发人员,业务合作伙伴和监管机构 - 出于各种原因需要某种形式的此类数据。但是,DBA需要保护数据并提供足够的数据以满足这类用户的需求。这类用户需要部分数据来执行以下任务:
§ 数据分析
§ 应用开发
§ 测试
§ 审计
§ 训练
当从MySQL数据库共享和导出数据时,需要使用诸如下列的技术清除敏感信息:
§ 数据屏蔽
§ 数据反识别
§ 模糊处理
§ 随机化
§ 随机格式化数据
以下内容显示了从MySQL数据库进行数据导出屏蔽和反标识的步骤。
屏蔽和导出数据的7个步骤
1. 安装或升级
MySQL企业服务器
MySQL Workbench 8.0 和/或 MySQLShell 8.0
2. 加载 MySQL屏蔽插件和函数
3. 在数据列上创建一个select语句
4. 确定哪些列是敏感的
5. 为每列选择合适的屏蔽类型
6. 将屏蔽功能添加到具有敏感数据的列
7. 选择所需格式导出数据
现在让我们深入了解每个步骤的“操作方法”
第1步 - 安装/升级到MySQL EE
MySQL EE的安装和升级说明。您可以安装8.0或5.7
MySQL企业服务器
可选但推荐(并在本博客中使用)
MySQL Workbench 8.0
MySQL Shell 8.0
安装和升级说明(使用8.0版本的MySQL Workbench和Shell,因为它们同时支持MySQL Server 8.0和5.7)
注意:也可以使用mysql客户端工具,但是输出格式更受限制,因为MySQL Workbench和Shell提供了更多的结果格式选项。
第2步 - 加载屏蔽插件和功能
请参阅 - 数据屏蔽安装
仅供参考,无需重启服务器。

第3步 - 在数据列上创建一个select语句
简单的方法是使用MySQLWorkbench

步骤4 - 运行Select并确定哪些列是敏感的
例如 - 在这里我们看到“users”表上的选择 - 显示了许多敏感数据列。薪水,SSN等 - 用户不希望按原样分享大部分此类信息。

步骤5 - 为每列选择合适的屏蔽类型
在此示例中,所选列显示了敏感数据。为了保护这些数据,我将展示如何
§ 让部分名称混淆
§ 使工资计划范围模糊不清
§ 使用标准SSN屏蔽
§ 屏蔽信用卡PAN数据
执行第5步的任务如下:
1. 完全省略select语句中对目标数据导出不必要的列
§ 越少越好
2. 确定哪些列是敏感的
3. 对于那些敏感列,确定满足安全要求所需的适当屏蔽,混淆或随机数据替换。
a. MySQL屏蔽和反识别概述
b. 有关MySQL屏蔽和反识别的文档
步骤6 - 将屏蔽功能添加到具有敏感数据的列
例如,使用SELECT创建屏蔽数据

在这里,您可以看到在Workbench中运行的语句

在Workbench中,您会注意到屏蔽列显示为BLOB - 如果您查看BLOB并选择文本,您将看到文本。这是因为MySQL的UDF不返回类型信息,将其视为二进制数据类型。
接下来我将修改屏蔽列选择并添加CAST。现在,您可以按预期查看结果数据。
例如,使用SELECT添加CAST创建屏蔽数据

如何在Workbench列中查看屏蔽结果

步骤7 - 选择所需格式导出数据
如果您使用MySQL Workbench,您可以轻松地从select语句中导出大量的屏蔽数据(数千条记录)。

但是,对于更大的结果集,您可能希望以批处理模式运行此屏蔽数据的导出。此时可以使用MySQL Shell。
首先为使用屏蔽的select语句创建一个文件。

§ 将此SQL保存到文件中。
下一步 - 确定所需的结果格式 -
选项包括选项卡,表格,垂直,JSON(格式化 - 易于阅读),JSON(原始)
§ 选择结果格式
§ -result-format选项包括:tabbed,table,vertical,json或json raw
§ 选择协议 - 经典或X协议。(5.7使用-sqlc,8.0)
§ -sqlc for classic(3306)
§ -sqlx for new X Protocol(33060)
例子
§ 运行命令 - for tabbed
§ mysqlsh -result-format = tabbed -user = root -password-sqlc -file = maskeduser.sql | head-20

§ 运行命令 - json
§ mysqlsh -result-format = json raw -user = root-password -sqlc -file = maskeduser.sql

§ 运行命令 - “pretty”格式 json
§ mysqlsh -result-format = json -user = root -password-sqlc -file = maskeduser.sql

如果结果非常大 - 那么可选择通过管道压缩到zip。
§ 运行命令 - 压缩为zip
§ mysqlsh -result-format = tabbed -user = root -password-sqlc -file = maskeduser.sql | zip f.zip -
§ 检查zip文件 -
§ unzip -l f.zip
结论
这篇博客展示了使用数据屏蔽和反识别来保护数据。您很可能需要MySQL EE Masking,MySQL Workbench和MySQL Shell,这些工具来获得并保持对PCI,GDPR,HIPAA等法规的遵守。它只需要几个简单的步骤。
感谢您使用MySQL!
博客原文地址:https://mysqlserverteam.com/exporting-masked-and-de-identified-data-from-mysql/




