Hologres为您提供数据脱敏功能,支持按照列级别设置脱敏。启用该功能后,如果您查询的数据涉及敏感信息,则在展示结果中,该部分数据会被脱敏展示,提高了对敏感及私密数据的保护。本文为您介绍Hologres如何开启、查询及删除数据脱敏功能。
背景信息
随着大数据时代的来临,大数据、云计算和人工智能等新技术应用不断深化,为数据的深度挖掘及分析提供了强有力的支撑,大数据中蕴含的巨大价值被逐步挖掘出来。与此同时也带来了敏感及私密信息保护方面的棘手难题。
Hologres提供的数据脱敏功能,实现了数据在高效共享、挖掘及分析的同时,使得敏感及隐私信息不被泄露,提高了对敏感及私密数据的保护。
使用限制
- 出于安全考虑,Hologres暂不支持从设置了脱敏规则的表和列向未设置脱敏规则的表和列导入数据,相关报错信息如下。
错误原因:ERROR: The insert table has not set SECURITY LABEL
- 数据脱敏会一定程度的影响查询性能,影响程度和脱敏方式、数据量都有关,性能有10%~20%的下降,极端场景可能存在数倍性能下降。
使用数据脱敏
Hologres支持对目标列或目标用户设置数据脱敏。使用数据脱敏前,您需登录目标数据库开启脱敏功能。完成后可配置对应的脱敏规则,针对某一列或某个用户设置脱敏。具体操作步骤如下。
高级技巧
- 对不同用户设置脱敏
默认情况下所有用户都会脱敏,可以单独设置某些用户不脱敏。
- 命令格式如下
SECURITY LABEL FOR hg_anon ON ROLE user_name IS '[label_name|all]:[masked|unmasked]';
参数 说明 user_name 账号ID。请通过用户信息页面获取。 label_name 系统预设的脱敏函数,您可以使用 show hg_anon_labels;
SQL查看当前数据库设置的label_name。masked 使用数据脱敏。 unmasked 不使用数据脱敏。 - 使用示例
- 对账号ID为1365xxxxxxxxxxxx的用户不脱敏的语句如下。
SECURITY LABEL FOR hg_anon ON ROLE "1365xxxxxxxxxxxx" IS 'all:unmasked';
- 对账号ID为1365xxxxxxxxxxxx的用户针对
phone
标签的列设置为不脱敏的语句如下。SECURITY LABEL FOR hg_anon ON ROLE "1365xxxxxxxxxxxx" IS 'phone:unmasked';
- 对账号ID为1365xxxxxxxxxxxx的用户不脱敏的语句如下。
- 相关命令
- 查看对用户设置的脱敏情况
select usename, label from pg_shseclabel s inner join pg_catalog.pg_user u on s.objoid = u.usesysid;
- 删除对用户设置的脱敏
SECURITY LABEL FOR hg_anon ON ROLE "1365xxxxxxxxxxxx" IS NULL;
- 查看对用户设置的脱敏情况
- 命令格式如下
- 自定义脱敏规则
如果默认的label_name无法满足需求,您可以通过修改GUC的hg_anon_lables参数自定义脱敏规则。
- 命令
ALTER DATABASE <db_name> SET hg_anon_labels = '[ {"label": <label_name1>, "method", <method1>}, {"label": <label_name2>, "method", <method2>}, ... ]'; --label_name是您自定义的名称,method是Hologres内置的一些方法。
说明 执行ALTER DATABASE命令后,当前链接会不生效,需要重开一个连接。您可使用如下命令查看设置是否生效。show hg_anon_enable;
- 示例
ALTER DATABASE test_db SET hg_anon_labels = '[ {"label":"ip", "method":{"desensType":"mask", "type":"ip"}}, {"label":"email", "method":{"desensType":"mask", "type":"email"}}, {"label":"name", "method":{"desensType":"mask", "type":"name"}}, {"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}}, {"label":"hash", "method":{"desensType":"hash", "type":"md5", "salt":""}}]';
- 参数说明:
脱敏项 脱敏内容描述 脱敏结果示例 {"desensType":"mask", "type":"ip"} IP地址脱敏。 192.*.*.* {"desensType":"mask", "type":"email"} 邮箱地址脱敏。 abc***@example.net {"desensType":"mask", "type":"name"} 名称脱敏。 *五 {"desensType":"hash", "type":"md5", "salt":""} Hash脱敏。 e086aa137fa19f67d27b39d0eca186103228f322c9c98a125554a24f875f0f7e {"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}}{"label":"last_mask", "method":{"desensType":"mask", "type":"user_define", "before":0, "after":1}} 自定义内容脱敏。 无
- 命令
使用示例
使用Hologres数据脱敏功能完整的使用示例如下。
使用数据保护伞进行数据脱敏
您不仅可以手工设置脱敏规则,也可以使用数据保护伞进行数据脱敏。
- 使用限制。
- 仅Hologres V1.1及以上版本支持使用数据保护伞进行数据脱敏,如果您的实例是V1.1以下版本,请您提交工单或加入在线支持钉钉群申请升级实例。
- 为了能够检测出敏感数据,保护伞对于主账号设置不脱敏的规则。
- 目前每天9:00:00,保护伞会抽样数据,识别敏感数据,并对设置的敏感数据列设置脱敏规则。
- 目前Hologres支持使用数据保护伞进行数据脱敏的Region有:中国(香港)。
- 使用方法。
- 开启脱敏功能。
数据脱敏功能默认不开启,需要拥有Superuser权限的用户在对应的数据库中执行如下命令开启该功能。
db_name为需要开启数据脱敏功能的数据库。--安装数据脱敏EXTENSION CREATE EXTENSION IF NOT EXISTS hg_anon; --对指定的数据库开启数据脱敏功能,默认为关闭状态 ALTER DATABASE <db_name> SET hg_anon_enable = on;
重要hg_anon_enable
是一个GUC,运行ALTER DATABASE命令后当前连接不生效。- 您可以使用如下SQL查看设置是否生效。
show hg_anon_enable;
- 设置脱敏数据库。
- 登录数据保护伞控制台,详情请参见进入数据保护伞。
- 在左侧导航栏,单击数据识别规则页面。 ,进入
- 在敏感数据识别页面创建一条数据识别规则,详情请参见敏感数据识别。
- 在左侧导航栏,单击数据脱敏管理,进入数据脱敏管理页面。
- 在脱敏场景下拉列表中,选择Hologres展示脱敏(hologres_display_desense_code),并单击右侧选择脱敏database。
- 在授权账号脱敏对话框,从未脱敏database列表选择需要脱敏的数据库显示在脱敏database列表中,单击我同意授权数据保护伞对该database脱敏,单击确定。
- 在数据脱敏管理页面,单击右上方的新建脱敏规则,详情请参见数据脱敏管理,之后系统会对您设置的数据库进行脱敏。
- 开启脱敏功能。
常见问题
按照使用示例发现数据未脱敏。
- 问题现象:按照使用示例执行后发现查询出的数据未进行脱敏。
- 可能原因:
- 对部分用户设置了不脱敏的规则。
- 未设置脱敏标签。
- 解决方法:
- 执行如下SQL命令检查是否对于部分用户设置了不脱敏的规则。
默认情况下该SQL查询结果为空,表示对所有用户均需要进行数据脱敏;若不为空,请对用户设置为脱敏,详情请参见高级技巧。select usename , label from pg_shseclabel s inner join pg_catalog.pg_user u on s.objoid = u.usesysid;
- 使用如下SQL,检查设置的脱敏标签。
如果结果中并未包含ip等标签,请执行如下SQL命令设置脱敏标签。show hg_anon_labels;
以上标签对应的规则请参见默认的label_name。ALTER DATABASE compress_test SET hg_anon_labels = '[ {"label":"ip", "method":{"desensType":"mask", "type":"ip"}}, {"label":"email", "method":{"desensType":"mask", "type":"email"}}, {"label":"name", "method":{"desensType":"mask", "type":"name"}}, {"label":"id", "method":{"desensType":"mask", "type":"id"}}, {"label":"phone", "method":{"desensType":"mask", "type":"phone"}}, {"label":"bank_id", "method":{"desensType":"mask", "type":"bank_id"}}, {"label":"hash", "method":{"desensType":"hash", "type":"md5", "salt":""}}, {"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}} ]';
- 执行如下SQL命令检查是否对于部分用户设置了不脱敏的规则。