码迷,mamicode.com
首页 > 其他好文 > 详细

如何实现特定列脱敏?这两种方法你都要会

时间:2020-09-16 12:07:15      阅读:34      评论:0      收藏:0      [点我收藏+]

标签:管理员   华为云   raw   官网   htbox   origin   anon   官方   规则   

摘要:有些情况下,有些表的特定列含有敏感数据,如何让特定的人看到特定的数据呢?

1 需求

有些情况下,有些表的特定列含有敏感数据(如用户信息表中,用户手机号),自然,我们只想让“管理员”用户看到这些敏感数据,其他用户我们希望其看到“处理后的”—— 脱敏的数据。

2 实现方案介绍

方案1: 使用pg匿名化插件postgresql_anonymizer;

方案2: 使用视图进行脱敏;

2.1 方案1: 使用pg匿名化插件postgresql_anonymizer

(示例来自插件官方文档)

-- 修改配置文件:   shared_preload_libraries = pg_stat_statements, anon
-- 1. 创建并激活插件
CREATE   EXTENSION IF NOT EXISTS anon CASCADE;
SELECT   anon.mask_init();
-- 2.声明屏蔽的用户
CREATE ROLE   skynet;
COMMENT ON   ROLE skynet IS MASKED;
-- 3.声明屏蔽规则
COMMENT ON   COLUMN people.name IS MASKED WITH FUNCTION anon.random_last_name();
COMMENT ON   COLUMN people.phone IS MASKED WITH FUNCTION   anon.partial(phone,2,$$******$$,2);
-- 4. 查询屏蔽敏感信息的用户
\! psql test   -U skynet -c SELECT * FROM people;
 id    |   name   |     phone
-----+----------+------------
T800 |   n3xtchen | 13******11

2.2 方案2:使用视图进行脱敏

(示例来自本地开发环境)

-- 1. 创建测试用户
create user   root;
create user   normal_user;
-- 2. 切换到root建表 & 视图
set role root;
create table   user_phone_number(id int, user_name name, phone_number name);
insert into   user_phone_number values(1, 张三, 12345678);
insert into   user_phone_number values(1, 李四, 56781234);
create or   replace view member_phone_number as
    SELECT
            S.id,
            S.user_name,
            substring(S.phone_number, 1,1) ||   ****** ||substring(S.phone_number, 8,8) as phone_number
    FROM user_phone_number AS S;
-- 3. 回收表的权限,授予普通用户view权限
revoke all on   user_phone_number from public;
grant all on   member_phone_number to normal_user;
-- 4. 使用普通用户测试
reset role;
set role   normal_user;
select * from   user_phone_number;
select * from   member_phone_number;

结果如下:

技术图片

3 优缺点比较

技术图片

总的来看,喜欢“偷懒”、喜欢尝鲜的话,可以使用 postgresql_anonymizer 插件;但如果追求稳定,建议使用视图来实现。

4 参考

  1. PostgreSQL: 匿名化(Anonymizer)工具 官网:https://labs.dalibo.com/postgresql_anonymizer
  2. PostgreSQL: 匿名化(Anonymizer)工具 官方文档: https://postgresql-anonymizer.readthedocs.io/en/stable/

 

点击关注,第一时间了解华为云新鲜技术~

如何实现特定列脱敏?这两种方法你都要会

标签:管理员   华为云   raw   官网   htbox   origin   anon   官方   规则   

原文地址:https://www.cnblogs.com/huaweiyun/p/13601889.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!