写点什么

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

发布于: 2020 年 09 月 02 日

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



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/



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



发布于: 2020 年 09 月 02 日阅读数: 56
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
如何实现特定列脱敏?这两种方法你都要会