全部产品
云市场

敏感数据管理

更新时间:2019-10-12 13:46:47

需求背景

SQLConsole-数据查询的帮助手册里面已经介绍,若表上存在敏感、机密字段,并且未单独开通对应字段级别的权限,则在查询结果中会以******显示数据查询脱敏的相关内容,这可理解为对敏感数据进行全遮掩。

然而,在某些场合下研发人员或者测试人员需要感知敏感数据的一部分内容进行问题排查;本文介绍的“敏感数据管理”基于数据遮掩开放的脱敏方式,配合敏感字段权限对脱敏方式的扩展,就能做到这一点。

支持范围

  • 数据遮掩目前只支持关系型数据库、OLAP数据库,NoSQL如MongoDB、Redis暂不支持。

数据遮掩介绍

数据遮掩对数据查询(跨库查询)、数据导出提供了更灵活的脱敏遮掩方式。举个例子:手机号码,我们可以控制只对中间某几位进行遮掩,如136xxxxx799。

数据遮掩基于DMS企业版内置的遮掩算法来实现,用户可基于内置的遮掩算法对敏感字段需要的遮掩效果进行定制

遮掩算法

遮掩算法,是用来实现上述所说部分脱敏的核心,一个遮掩算法,决定了一个敏感字段的脱敏方式:

  • 要怎么来实现部分脱敏,哪些部分需要脱敏展示,哪些部分需要原文展示
  • 脱敏展示使用什么字符来展示,是******还是XXXXXX

算法种类

目前系统内置以下3种遮掩算法:

  • 固定位置:需要脱敏的位置非常明确,比如前N位,中间几位(从第M位到第N位),最后几位,进行脱敏处理
  • 固定字符:需要脱敏的字符非常明确,比如将邮寄地址“浙江省杭州市”进行脱敏处理
  • 全遮掩:对整个数据进行脱敏(算是对原始脱敏能力的一个扩展,让脱敏可以不再是“******”)

算法暂不支持自定义实现,用户仅能使用系统提供的内置算法

支持的数据类型

遮掩算法作用在字段数据内容上面,目前遮掩算法没有对字段类型进行强限制,但是仍推荐只运用在字符串类型、数字类型的字段上面,且字符串类型长度尽可能短,最好是一些格式固定的字段,比如手机号,邮箱号码,身份证号码,姓名等等;太长的字符串在进行算法运算会消耗DB服务一定的计算资源

敏感列权限——脱敏方式

为了迎合部分脱敏的能力,需要对申请的敏感列权限进行区分;原先的敏感列权限,包括查询、导出、变更,如果申请者申请了某个库、某个表的某个敏感列的查询权限,则在SQL查询,对这个敏感列数据的查询结果,直接以明文展示;

遮掩算法的引入,提供了部分脱敏的能力;敏感列权限的申请,增加了脱敏方式来与部分脱敏搭配使用,如下图所示:

权限申请确认

半脱敏

以查询权限为例,若申请时脱敏方式选择的是“半脱敏”,且当前敏感字段定义了遮掩算法(可提供半脱敏能力),则当申请者在SQL查询对这个字段数据的查询结果,将运用配置的遮掩算法来进行脱敏处理,不再是以前的“******”,而是根据定义在该字段上面的遮掩算法,来决定其展示

明文

同样以查询权限为例子,若申请时脱敏方式选择选择的是“明文”,则用户在SQL查询对这个字段数据的查询结果,将直接明文展示;

以上描述的逻辑用下面的流程图来展示,理解起来更直观:

流程

操作指南

功能入口

数据遮掩功能,归纳到“【系统管理】”->“【敏感数据管理】”菜单页里面。仅限DMS企业版内的管理员、安全管理员、DBA角色可见入口可操作。入口处总览整个企业定义的所有敏感字段,在此处可进行对特定敏感字段设置特定的数据遮掩算法;此外,作为管理视图,可在此处方便的调整敏感字段安全级别。

【温馨提示】

  • 1、此处只能看到敏感(安全级别为敏感或者机密)字段,非敏感(安全级别是内部)字段无法在这个页面被搜索到;如果在此总览页面内容为空,则证明您的企业内还没有定义过敏感字段
  • 2、作为管理视图,此处调整敏感字段安全级别仅限于调整原来已经被定为敏感的字段

敏感数据管理入口

算法配置详解

通过“操作”里面的“添加算法”,可对字段设置遮掩算法。

固定位置

固定位置
固定位置算法需要进行两个配置项的设置:

  • 遮掩字符

    • 脱敏展示的字符串,比如 ***xxx,【敏感数据】等等
  • 待遮掩位置

    • 定义数据的哪些位置需要进行脱敏,位置定义使用坐标格式,举个例子:
      • (1,4) 表示遮掩前4位(字符串从1的位置,到4的位置),也可以使用简便写法(4);
      • (8, 10) 表示遮掩中间2位,从第8个字符到第10字符;
      • (-4) 表示最后4位,如果数据是定长的,那么你也可以使用坐标格式来定义,这个简便写法适用于非定长的数据
    • 也可指定多个位置,但是最多不超过3个位置,具体示例:

      (1, 4), (8, 10), (-4)

      表示遮掩前4位,中间2位,最后4位

固定字符

固定字符
该算法也需要进行两个配置项的设置:

  • 遮掩字符:同“固定位置”算法,不赘述
  • 待替换字符:定义哪些个字符需要被替换,可配置多个待脱敏的字符串,但是最多不超过3个;举个例子:

    test

    【说明】对数据内容中的 “test”进行脱敏,脱敏的字符串在“遮掩字符”中定义

实践体验

前置准备

在体验数据遮掩功能之前,需要一些前置准备:

  • 准备一张设置了敏感列的数据表

按以下步骤,可实践体验数据遮掩:

  • 1、管理员、安全管理员或者DBA对某个库表的敏感字段配置遮掩算法,入口为敏感数据管理,操作具体敏感字段的“添加算法”
  • 2、体验者在“权限申请”->“敏感列申请”中申请该敏感字段查询、导出权限,脱敏方式选择“半脱敏”
  • 3、使用数据查询或者数据导出功能来体验效果

查询遮掩示例

查看算法算法配置

权限确认

yuyang_test.base_user 定义了两个敏感字段,phone和phone1,phone1字段的遮掩算法设置如上图所示;其中用户对phone敏感字段有查询(明文)权限,对phone1敏感字段有查询(半脱敏)权限,则在SQL查询查询该表后数据的脱敏展示效果如下所示:

查询结果

数据导出遮掩示例

数据导出,若导出SQL中包含敏感字段,且该用户具备了敏感字段的“半脱敏”导出权限,则提交申请后,该敏感字段的导出内容为经过遮掩算法运算后的结果,假设该字段没有定义遮掩算法,则使用“******”,逻辑同SQL查询。

数据导出

字段查看

注意事项

  • SQL语句无权限或者半脱敏敏感列参与函数运算,数据遮掩无法作用

    • 举个例子,select substr(phone, 10) from base_user,其中phone是敏感字段,因其使用了函数运算,使得脱敏无法正常支持。
    • 如果想要在敏感列上面进行函数运算,需要申请对应敏感列的明文权限
  • 数据遮掩对字段类型无限制,但不排除遮掩算法不适用

    • 场景一
      • 因为系统对敏感列、遮掩算法的定义存储是聚合的,举个例子:
        • 实例A库表字段: dmstest.t1.c1 是敏感字段,c1字段类型是varchar
        • 实例B库表字段: dmstest.t1.c1 同样会被标识为敏感字段,c1字段类型是int
      • 假设遮掩算法按照c1为varchar的数据格式来定义,到了int类型的c1字段,也许就不适用了; 同名库表列的脱敏算法保持一致,因为列的字段类型无法感知,所以遮掩算法暂时没有对字段类型进行强限制。
    • 场景二
      • 非字符串类型的遮掩,比如日期类型,运用遮掩算法以后,也可能出现不适用;原因非字符串类型要进行遮掩脱敏需要先强制转化为字符串类型,但是类型转化过程涉及到了日期格式化,不同DB类型如MySQL、PostgreSQL、SQLServer等的内置转化逻辑互不相同,可能出现遮掩效果不符合预期的情况;目前识别到SQLServer 日期类型在进行数据遮掩算法运算后,得到的日期格式化会存在问题,导致遮掩效果达不到预期