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

背景信息

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

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

使用数据脱敏

  1. 开启数据脱敏。
    数据脱敏功能默认不开启,需要Superuser登录至目标数据库,执行如下命令开启该功能。
    CREATE EXTENSION IF NOT EXISTS hg_anon; //创建hg_anon扩展函数。
    ALTER DATABASE <db_name> SET hg_anon_enable = on;  //为数据库<db_name>开启数据脱敏功能。
    参数说明如下表所示。
    参数 描述
    hg_anon hg_anon是Hologres内部封装的扩展函数,您需要调用该扩展函数才能开启数据脱敏功能。
    <db_name> 需要开启数据脱敏功能的数据库名称。使用时需要替换<db_name>为实际数据库名称。
    hg_anon_enable 选择开启或关闭数据脱敏功能,取值如下:
    • on,开启数据脱敏。
    • off,关闭数据脱敏。
    默认该参数设置为off。
    示例:为数据库“test”开启数据脱敏功能。
    CREATE EXTENSION IF NOT EXISTS hg_anon;
    ALTER DATABASE test SET hg_anon_enable = on;
  2. 设置数据脱敏。
    Hologres支持对目标列或目标用户设置数据脱敏。您可以通过指定具体列名或用户类型,并使用系统预设的脱敏函数进行脱敏。Hologres支持的脱敏函数,详情请参见脱敏函数
    • 对目标列脱敏。
      Superuser或表Owner对目标列进行脱敏的语法如下。
      SECURITY LABEL FOR hg_anon ON COLUMN <tablename>.<col_name> IS label_name;
      参数说明如下表所示。
      参数 描述
      hg_anon hg_anon是Hologres内部封装的扩展函数,您需要调用该扩展函数才能开启数据脱敏功能。
      <tablename> 需要脱敏的列所在的表名称。使用时需要替换<tablename>为实际表名称。
      <col_name> 需要脱敏的列名称。使用时需要替换<col_name>为实际列名称。
      label_name 系统预设的脱敏函数,详情请参见脱敏函数。例如,“replace”脱敏函数用于将任意字符串替换为“xxxx”。
      说明 对多列进行脱敏时,需要多次执行上述语句。
      示例一:对holotest表的id列脱敏,使其显示为xxxx
      SECURITY LABEL FOR hg_anon ON COLUMN holotest.id IS 'replace';
      示例二:对holotest表的idage列脱敏,使其显示为xxxx
      SECURITY LABEL FOR hg_anon ON COLUMN holotest.id IS 'replace'; 
      SECURITY LABEL FOR hg_anon ON COLUMN holotest.age IS 'replace';
    • 对用户或用户组脱敏。
      Superuser对用户或用户组脱敏的语法如下。
       SECURITY LABEL FOR hg_anon ON ROLE user_name IS ANON_RULE;
      参数描述如下表所示。
      参数 描述
      hg_anon hg_anon是Hologres内部封装的扩展函数,您需要调用该扩展函数才能开启数据脱敏功能。
      <user_name> user_name可以为用户或用户组名称。如果需要对多个用户进行相同的脱敏设置,则可以将用户先添加到用户组,再对用户组进行脱敏。使用时需要替换<user_name>为实际用户或用户组名称。
      ANON_RULE 为用户设置脱敏规则的语法格式,详情请参见下文。
      ANON_RULE的语法格式如下所示。
        ANON_RULE:
               [label_name|all]:[masked|unmasked]{;ANON_RULE}
      参数描述如下表所示。
      参数 描述
      label_name|all label_name指系统预设的脱敏函数,详情请参见脱敏函数。使用label_name,则表示对目标用户使用label_name脱敏的列,以指定形式显示。

      使用all表示设置的配置(选择脱敏或不脱敏)对目标用户的所有列生效。

      label_nameall,通常与maskedunmasked配合使用。示例如下:
      • all:masked表示对指定用户的所有列均进行脱敏。
      • replace:masked表示对目标用户使用replace脱敏属性的列进行脱敏。label_name可以为Hologres支持的任意脱敏函数,此处使用replace函数。
      masked 表示对指定用户的目标列均脱敏。通常与label_name|all配合使用。

      例如,使用all:masked对指定用户的所有列均进行脱敏。

      unmasked 表示对指定用户的目标列均不脱敏。通常与label_name|all配合使用。例如,使用all:unmasked对指定用户的所有列均不脱敏。

      如果目标用户在设置脱敏时不包含unmasked参数,则系统默认使用masked参数为目标用户设置脱敏。

      假设使用的label_name为replace,则不同语句的脱敏效果如下:
      • 设置脱敏时使用all:unmasked,则查询时,结果展示的数据为未脱敏的数据。
      • 设置脱敏时使用all:masked,则查询时,结果展示的数据为脱敏后的数据。
      • 设置脱敏时使用all,则查询时,结果展示的数据仍为脱敏后的数据。
      示例一:对用户组 advanced_user的所有列均不脱敏。advanced_user为所有高级用户所在的用户组。
      SECURITY LABEL FOR hg_anon ON ROLE advanced_user IS 'all:unmasked'; 
      示例二:对用户user1使用name脱敏函数的列不进行脱敏。
      SECURITY LABEL FOR hg_anon ON ROLE user1 IS 'name:unmasked';

查看脱敏设置

  • 查看目标表所有列的脱敏设置,示例语句如下。
    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号
  • 上海市浦东****
  • 浙江省杭州市余杭区********