Hologres为您提供数据脱敏功能,支持按照列级别设置脱敏。启用该功能后,如果您查询的数据涉及敏感信息,则在展示结果中,该部分数据会被脱敏展示,提高了对敏感及私密数据的保护。本文为您介绍Hologres如何开启、查询及删除数据脱敏功能。

背景信息

随着大数据时代的来临,大数据、云计算和人工智能等新技术应用不断深化,为数据的深度挖掘及分析提供了强有力的支撑,大数据中蕴含的巨大价值被逐步挖掘出来。与此同时也带来了敏感及私密信息保护方面的棘手难题。

Hologres提供的数据脱敏功能,实现了数据在高效共享、挖掘及分析的同时,使得敏感及隐私信息不被泄露,提高了对敏感及私密数据的保护。

使用数据脱敏

  1. 开启数据脱敏。
    数据脱敏功能默认不开启,需要Superuser执行如下命令开启该功能。
    CREATE EXTENSION IF NOT EXISTS hg_anon;
    ALTER DATABASE <db_name> SET hg_anon_enable = on;  //默认是off。
  2. 设置数据脱敏。
    • 对目标列脱敏。
      Superuser或表Owner对目标列进行脱敏的示例语句如下。
      SECURITY LABEL FOR hg_anon ON COLUMN tbname.col_name IS label_name; //label_name指系统预设的脱敏函数。
      SECURITY LABEL FOR hg_anon ON COLUMN holotest.id IS 'replace'; //示例对holotest表的id列脱敏,使其显示为xxx。
    • 对用户或用户组脱敏。
      Superuser对用户或用户组脱敏的语法如下。
       SECURITY LABEL FOR hg_anon ON ROLE user_name IS ANON_RULE;
       ANON_RULE:
               [label_name|all]:[masked|unmasked]{;ANON_RULE}
      参数描述如下表所示。
      参数 描述
      label_name 脱敏函数
      all:unmasked 表示对用户或用户组所有列均不脱敏。
      all:masked 表示对用户或用户组所有列均脱敏。
      说明 如果一个用户及该用户所在的用户组,在设置脱敏时不包含unmasked属性,则系统默认设置该用户或用户组为maseked属性,查询对应的脱敏列数据时会以脱敏的方式展示该列数据。

      例如,脱敏时使用的语句为repalce,而不是replace:unmasked,则结果展示的repalce列数据为脱敏后的数据。

      示例用法如下。
      SECURITY LABEL FOR hg_anon ON ROLE advanced_user IS 'all:unmasked'; //对高级用户advanced_user均不脱敏。
      SECURITY LABEL FOR hg_anon ON ROLE user3 IS 'replace:unmasked'; //对user3用户部分列不脱敏。

查看脱敏设置

  • 查看目标表所有列的脱敏设置,示例语句如下。
    SELECT * FROM pg_seclabel;
    结果如下图所示。查看脱敏设置参数说明如下表所示。
    参数 描述
    objoid 表示目标表。
    objsubid 表示对目标表的第几个字段脱敏。
    label 表示对目标字段脱敏时使用的脱敏函数。
  • 查看当前用户的脱敏设置。
    SELECT * FROM pg_shseclabel;

删除脱敏设置

您可以使用如下语句删除指定表目标列的脱敏设置。
SECURITY LABEL FOR hg_anon ON COLUMN tbname.col_name IS NULL;

脱敏函数

Hologres支持的脱敏函数如下表所示。
脱敏函数 描述 脱敏前的数据 脱敏后的数据
replace 用于将任意字符串替换为xxxx 187222 xxxx
mask 不改变文本的长度,显示文本的前1/3和后1/3部分,中间1/3部分的每个字段替换为*显示。 110106333222011234 110106******011234
cn_id_card 身份证号码脱敏。仅显示首位和末位号码,其余号码替换为*显示。 516626188808082234 5****************4
cn_phone 电话号码脱敏。仅显示前三位和后两位号码,其余号码替换为*显示。 13912345679 139******79
bank_card 银行卡卡号脱敏。仅显示后四位号码,其余号码替换为*显示。 632200020089526127 **************6127
email 邮箱号码脱敏。仅显示@符号之前的前三位字段内容,其余字段替换为*显示。 m1888@163.com m18***@163.com
ip IP及MAC地址。仅保留第一段字节的内容,其余三端字节内容替换为*显示。 192.188.2.2 192.***.*.*
name
中文姓名:
  • 字数大于等于4时,前面两个字替换为*显示。
  • 字数小于等于3时,第一个字替换为*显示。

英文姓名:字段大于等于2时,第一个字段替换为*显示。

  • 成吉思汗
  • 武则天
  • Willam li
  • *思汗
  • *则天
  • * li
address 地址保留省市区县,其余字符替换为*显示。
  • 上海市浦东张江高科
  • 浙江省杭州市余杭区文一西路969号
  • 上海市浦东****
  • 浙江省杭州市余杭区********