云社区 博客 博客详情
云社区 博客 博客详情

PostgreSQL如何实现特定列脱敏

大象数据库 发表于 2020-08-31 20:41:38 08-31 20:41
大象数据库 发表于 2020-08-31 20:41:38 2020/08/31
0
1

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

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/


登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
评论文章 //点赞 收藏 1
点赞
分享文章到微博
分享文章到朋友圈

评论 (0)


0/1000
评论

登录后可评论,请 登录注册

评论

您还没有写博客的权限!

温馨提示

您确认删除评论吗?

确定
取消
温馨提示

您确认删除评论吗?

删除操作无法恢复,请谨慎操作。

确定
取消
温馨提示

您确认删除博客吗?

确定
取消

确认删除

您确认删除博客吗?

确认删除

您确认删除评论吗?

温馨提示

登录超时或用户已下线,请重新登录!!!

确定
取消