Mysql与Oceanbase数据脱敏比较

数据脱敏:在数据处理和数据存储过程中,通过一定的算法和技术,将敏感数据进行加工处理、模糊化或替换,使得数据无法识别或难以还原,从而达到保护数据安全、防止数据泄露的目的。  

相关参考资料: 

Oceanbase官方参考资料

Oceanbase与Mysql兼容性对比

OceanBase开发者中心提供的数据脱敏技术,到底怎么样?

ODC解读:数据脱敏在数据库协同开发的关键作用

Mysql数据脱敏组件与插件及相关函数

MySQL数据脱敏(Data masking plugin functions)

Mysql数据脱敏

以银行为例的数据库问题

信用卡处理公司使用以下方式提供一套敏感数据服务,例如:

  • 每秒处理大量金融交易。

  • 存储大量与交易相关的数据。

  • 保护与交易相关的数据,并严格保护个人数据。

  • 处理客户对使用可逆交易的投诉或屏蔽部分数据。

典型的事务可能包括许多类型的敏感事务信息,包括:

  • 信用卡号。

  • 交易类型和金额。

  • 商户类型。

  • 交易密码(用于确认交易合法性)。

  • 配备GPS终端的地理位置(用于欺诈检测)。

然后,这些类型的信息可能会在银行或其他拥有客户个人数据的发卡金融机构内合并 ,例如:

  • 完整的客户姓名(个人或公司)。

  • 地址。

  • 出生日期。

  • 社会安全号码。

  • 电子邮件地址。

  • 电话号码。

卡片处理公司和金融机构需要访问该数据。其中一些角色可能只需要访问被屏蔽的数据。其他角色可能要求根据具体情况访问原始数据,这会记录在审核日志中。

屏蔽和去标识化是合规性的核心,因此MySQL企业数据脱敏和去标识化可以帮助应用程序开发人员满足隐私要求:

  • PCI – DSS:支付卡数据。

  • HIPAA:健康数据隐私、健康信息技术 经济和临床卫生法案(HITECH法案)。

  • 欧盟通用数据保护指令 (GDPR):保护 个人数据。

  • 数据保护法(英国):个人数据保护。

  • 萨班斯·奥克斯利法案、GLBA、美国爱国者法案、身份盗窃和 1998年《假设威慑法》。

  • FERPA – 学生数据、NASD、CA SB1386 和 AB 1950、州数据 《巴塞尔协议II》保护法。

Mysql数据脱敏实现方法

MySQL企业数据脱敏和去标识化最初是在MySQL 8.0.13中作为插件实现的。从MySQL 8.0.33开始,MySQL企业版还为以下组件提供了访问数据屏蔽和去标识化功能。

从官网给出的表格可以看到,组件与插件相比还是很有优势的

故接下来我们主要围绕组件开展叙述

MySQL企业数据脱敏和去标识化数据库的表和组件包括:

  • masking_dictionaries table
  • component_masking component
  • component_masking_functions component
创建masking_dictionaries table 
CREATE TABLE IF NOT EXISTS
mysql.masking_dictionaries(
    Dictionary VARCHAR(256) NOT NULL,
    Term VARCHAR(256) NOT NULL,
    UNIQUE INDEX dictionary_term_idx (Dictionary, Term),
    INDEX dictionary_idx (Dictionary)
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
安装组件
INSTALL COMPONENT 'file://component_masking';
INSTALL COMPONENT 'file://component_masking_functions';

 以下是组件中的函数及其功能

举一些与银行相关的函数使用范例

mask_pan(str [, mask_char])和mask_pan_relaxed()

屏蔽支付卡主帐号并且将除最后四位数字之外的所有数字替换为字符X

mysql> SELECT mask_pan(gen_rnd_pan());
+-------------------------+
| mask_pan(gen_rnd_pan()) |
+-------------------------+
| XXXXXXXXXXXX9102        |
+-------------------------+
mysql> SELECT mask_pan(gen_rnd_pan(19));
+---------------------------+
| mask_pan(gen_rnd_pan(19)) |
+---------------------------+
| XXXXXXXXXXXXXXX8268       |
+---------------------------+
mysql> SELECT mask_pan('a*Z');
ERROR 1123 (HY000): Can't initialize function 'mask_pan'; Argument 0 is too short.
mysql> SELECT mask_pan_relaxed(gen_rnd_pan());
+---------------------------------+
| mask_pan_relaxed(gen_rnd_pan()) |
+---------------------------------+
| 551279XXXXXX3108                |
+---------------------------------+
mysql> SELECT mask_pan_relaxed(gen_rnd_pan(19));
+-----------------------------------+
| mask_pan_relaxed(gen_rnd_pan(19)) |
+-----------------------------------+
| 462634XXXXXXXXX6739               |
+-----------------------------------+
mysql> SELECT mask_pan_relaxed('a*Z');
ERROR 1123 (HY000): Can't initialize function 'mask_pan_relaxed'; Argument 0 is too short.

可以发现Mysql的数据脱敏算法更多专注于国际卡号,如mask_ssn()遮挡美国社会安全号码、mask_uk_nin()遮挡英国国家保险号码等,各个国家有各个国家的卡号格式(数字与字母的组合),也就需要不同的算法,这也是它能够国际化的重要因素。

此外,在Mysql官网中检索MySQL Workbench 功能时发现只有企业英文版支持很多安全功能的实现,而且在数据脱敏方面并没有像Oceanbase的ODC那样方便,需要手动调用组件,这也大大增加了时间成本

故在国内企业使用Mysql也是有很多局限性在里面的。

Oceanbase数据脱敏

要实现数据脱敏,关键要解决两个问题:

  • 如何知道数据库中的哪些列是敏感数据?
  • 对敏感数据采用什么方式进行脱敏处理?

为了解决第一个问题,官方引入了敏感列的概念:将数据库中存储敏感数据的物理列标记为敏感列,在数据出库时,所有涉及敏感列的数据都会被视为敏感数据。

至于第二个问题,官方提供了 21 种不同的数据脱敏算法,包括全脱敏和半脱敏方式,覆盖了中/英文姓名、手机号、邮箱、证件号码、地址、车牌号、IP 等常见敏感数据类型。

蚂蚁集团提供的算法:能覆盖绝大部分应用场景。

三种方式配置敏感列的识别规则

为了最大程度满足用户的需求,ODC 支持三种方式配置敏感列的识别规则,分别是:

路径

就是根据敏感列所处的库、表、列来匹配。这种方式最为简单粗暴,能满足用户的大部分需求。

正则

基于正则表达式,根据库名、表名、列名和列备注来匹配。这种方式适用于敏感列分布在多个数据库,且需要批量添加的场景。

脚本

基于 Groovy 脚本匹配。这种方式非常灵活,可以实现大范围筛选,也可以实现特别细粒度的定制化匹配规则,非常推荐用户使用这种方法。只需花五分钟的时间熟悉 Groovy 语法,就可以愉快地 coding 识别规则。

 Oceanbase数据脱敏支持的算法及示例

由于ODC并未列出社区版Oceanbase的数据库安全规范选项,故无法查看ODC 支持的全部脱敏算法。

ODC社区版:

ODC企业版:

在官网中仅找到三个脱敏函数示例

地址
if (("varchar".equals(column.type) || "char".equals(column.type))) {
    if (column.name.indexOf("address") >= 0) {
        return true;
    }
    if (column.comment != null &&
            (column.comment.toLowerCase().indexOf("address") >= 0
                    || column.comment.indexOf("地址") >= 0
                    || column.comment.indexOf("住址") >= 0
                    || column.comment.indexOf("位置") >= 0)) {
        return true;
    }
}
return false;
手机号
if (column.name.length() == 11 && ("varchar".equals(column.type) || "char".equals(column.type))) {
    if (column.name.indexOf("phone") >= 0 || column.name.indexOf("mobile") >= 0) {
        return true;
    }
    if (column.comment != null &&
            (column.comment.toLowerCase().indexOf("phone") >= 0
                    || column.comment.indexOf("电话") >= 0
                    || column.comment.indexOf("mobile") >= 0
                    || column.comment.indexOf("手机") >= 0)) {
        return true;
    }
}
return false;
身份证号
if (column.name.length() >= 15 && ("varchar".equals(column.type) || "char".equals(column.type))) {
    if (column.name.indexOf("id_number") >= 0 || column.name.indexOf("identity_card") >= 0) {
        return true;
    }
    if (column.comment != null &&
            (column.comment.toLowerCase().indexOf("identity card") >= 0
                    || column.comment.indexOf("身份证") >= 0)) {
        return true;
    }
}
return false;

虽然 ODC 4.2.0 版本已经解决了从零到一的动态数据脱敏问题,但仍然需要管理员花费较多的精力来主动监控库中的敏感数据。实际上,ODC 目前只是一个执行者,需要用户判断哪些数据是敏感的。 未来,希望集团能实现角色反转,让 ODC 能够主动帮助用户识别和提示可能包含敏感数据的情况,并建议使用何种脱敏算法来更好地保护这些数据。

与Mysql对比,Oceanbase的脱敏算法的优势

  • Oceanbase更侧重于国内的环境,比如车牌格式、银行卡号格式等,能为国内企业提供针对性服务
  • Oceanbase有简洁的UI界面,提供三种数据脱敏方式,便于管理员进行管理,上手难度低
  • OceanBase 的分布式架构能够有效处理大规模数据,可以在数据脱敏过程中保持较高的可用性和性能。

如果要从Mysql迁移到Oceanbase,我们需要注意的问题

  • 数据类型兼容性OceanBase 支持大部分 MySQL 的数据类型,但某些特定数据类型可能需要进行转换。迁移前需要检查现有数据类型,并根据需要进行调整。

  • 脱敏规则的迁移:如果在 MySQL 中使用了插件或存储过程实现数据脱敏,在迁移到 OceanBase 时,可能需要重新实现这些脱敏规则,确保在新环境下正常工作。

  • 性能测试:在迁移过程中,进行性能测试非常重要,尤其是在涉及大规模数据查询和脱敏操作时,确保 OceanBase 能够满足性能要求。

  • 监控与调优:迁移后需要对 OceanBase 进行监控和性能调优,以确保数据脱敏操作能够高效运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值