由于业务上的需要,很多企业需要在非生产环境中使用生产系统的真实业务数据,比如在测试系统中用真实数据运行各项测试用例、在培训系统中用业务数据进行演示等等。而往往在非生产环境中不具备生产环境中的各项数据保护措施,如权限控制、访问控制等等,使得在这些环境中对生产数据的保护面临严峻的挑战。再加上测试环节的复杂性,如引入第三方测试伙伴,数据分发过程等,数据安全更加难以保证,数据泄露的风险很高。从 Optim 测试数据管理以及数据隐私保护项目的运行经验看,在非生产系统中使用真实数据进行测试前,先将数据漂白然后再分发、使用是保护数据的有效方式。数据漂白 ( 又叫数据脱敏或数据变形 ) 是指在非生产环境中将涉及个人隐私或其它需要保护的敏感业务数据,进行移除、屏蔽以及转换的一系列系统过程,目的是将敏感数据进行脱敏处理,以达到对其保护的目的。数据漂白需要明确数据漂白范围、确定数据漂白需求,以及实现有效的数据漂白技术。
什么样的数据是敏感数据?这个问题的答案,当然是根据不同业务系统的特点、测试背景而各不相同。通常可能被视为敏感数据的业务数据包含客户个人隐私数据以及某些关键的敏感业务数据:
具体数据漂白项目中涉及的敏感数据范围,需要由业务人员以及漂白项目人员共同确定。明确敏感数据范围之后,下一个问题需要确定数据漂白的具体需求,即明确数据漂白要做到什么程度、漂白成什么样的目标数据。
数据漂白对数据安全、数据质量、漂白效率等各个方面都有不同的要求,而各个需求之间有相互关联的特点:
前面讨论了有效数据漂白需要注意的几个方面的问题,而最终的检验标准是数据是否足够安全、是否能满足测试用例要求。然而由于不同的业务系统以及不同的测试环境对数据漂白都有不同程度的要求,因此数据使用哪种数据漂白技术,取决于需求中对以上三个方面需求的权衡。根据前面讨论的三个方面的需求,针对常见的敏感数据类型,在 Optim TDM 以及 Data Privacy 的框架下提出具体的实现方式。 个人隐私数据的漂白:个人身份信息是最常见的需要脱敏的隐私信息,而在不同的测试系统中对个人身份信息的处理要求是不一样的。如通常情况下要求把真实的个人信息脱敏,且存在少量重复数据不影响测试场景的情况下,使用 Optim Data Privacy 函数库可以很好的完成个人身份信息脱敏的任务。具体步骤如下:
在 Optim 项目范围内的任何一个 DBAlias 中创建包含模拟用户数据的查找表,并生成用于替换真实数据的姓名、身份证号码等个人信息数据。如下表所示:
表 1. 查找表数据
| ID | NAME | ADDRESS | PHONENUM | CITY |
|---|---|---|---|---|
| 1 | 宗制 | 广东省广州市衡山路 2083 号 | 13010000000 | 广州市 |
| 2 | 傅力 | 山东省济南市衡山路 187 号 | 13010022504 | 济南市 |
| 3 | 许前 | 四川省成都市太姥路 1698 号 | 13010022516 | 成都市 |
| 4 | 魏议 | 广东省广州市衡山路 3319 号 | 13010000003 | 广州市 |
| 5 | 程定 | 北京市黄山路 1953 号 | 13010022527 | 黄山 |
| ... | ... | ... | ... | ... |
当测试系统要求处理的个人身份信息需要保持排他性、以及在多遍漂白中保持一致等特殊要求,且 Optim 的自带漂白方式不能满足时,需要通过 Optim 提供的扩展接口,实现特殊业务要求的数据漂白功能。Optim TDM 解决方案提供特定接口规范,用户按照接口规范编写的扩展程序 (User Exit) 都能被 Optim 调用。下面以中文客户姓名作为示例。
中文客户姓名的变形要求:要求隐去真实客户性能,漂白结果为测试人员可识别的中文姓名,即姓名组成符合常见的中文姓名特点:为常用姓氏和人名的组合,并且保持一致性以及排他性,并且要求漂白结果是不可逆的。
漂白算法说明: 使用常用姓氏以及常用汉字来代替原姓名,组成新的姓名数据。对常见的 850 个姓氏以及 3500 个姓名常用汉字实现一对一映射,如此最多可以产生超过 100 亿个不重复的常用姓名,对国内的数据漂白项目来说是足够的。具体漂白算法设计如下: 姓和名分别处理,对于每个汉字首先定位其在常用姓氏和常用汉字数组中的位置,然后根据用户输入参数值和内部汉字序列产生新的姓和名数据。对于不在常用姓名范围内的姓氏和名字,使用与其 Hash 值一致的姓氏或者名字来代替。只有当漂白客户姓名不在常用姓氏以及常用名字范围内,其漂白结果才可能与另外的客户名称重复,实际测试中这样的重复数据是小于万分之一的。为提高汉字的定位效率,程序内部分别预先设计大小为 1000 的姓式 Hash 桶和名字 Hash 桶来存放数据。单个汉字的查找过程描述如下所示:
在实际应用中,由于 Hash 算法、Hash 桶数据不公开,且用户输入参数在漂白执行时才指定,可以充分保证漂白算法的不可逆。实际漂白效果如下:
图 3. 中文姓名 Column map 设置
图 4. 中文姓名漂白效果
通常情况下推荐使用 Optim 自带的漂白函数进行漂白,但当业务数据漂白有特殊业务规则时,可根据需要采用额外的漂白方式。下面以账号类数据为示例,介绍一种通用的漂白算法。 账号数据的变形需求:账号类数据一般由字母和数据组成,通常做为客户的唯一标识,要求数据漂白后严格保持不重复。有些账号 ( 如银行卡号 ) 由前几位字符来表示不同的账号类型,业务测试场景要求这些类型判定字符保持不变。由于账号数据分散在系统中的多张表中,需要在不同的变形过程中处理,要求对同样的账号变形结果保持唯一性和排他性。同时变形算法具备一定程度的通用性。
漂白算法说明:用户输入参数指定保留原号码的前 N 位,对其他字符进行变形并实现一一映射变形,以保正变形唯一性:程序内部保持一个全局映射表,映射表的映射规则根据用户输入的参数在运行时生成。映射表包含 10 组映射规则,分别用于字符顺序尾号为 0 到 9 的 10 类字符的变形。运行时对于每个字符按照其对应的映射规则变形,并保持原格式不变(即保持大小写以及数字字符格式不变)。
图 5. 账号数据漂白 Column map 设置
图 6. 账号数据漂白效果
通过以上实例,读者可以了解到 Optim TDM 解决方案可以满足不同项目对敏感数据的不同漂白需求:通常情况下,如果对漂白结果一致性要求不高的漂白需求,例如不需要实现一一映射的漂白效果时,都可以使用 Optim 自带的漂白函数库完成漂白;当部分关键数据需要特殊的漂白要求时,通过 Optim 提供的扩展接口,可以很方便的实现满足要求的漂白算法,从而实现敏感数据的全覆盖漂白。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9950964/viewspace-1656143/ ,如需转载,请注明出处,否则将追究法律责任。