PostgreSQL如何实现特定列脱敏,postgresql 怎么获取函数返回的异常PostgreSQL如何对特定的列脱敏1需求在某些情况下,某些表的某些列包含敏感数据(如用户信息表、用户的手机号码)。自然,我们只希望“管理员”用户看到这些敏感数据,而其他用户希望他们看到“处理过的”——脱敏的数据。2实施方案介绍方案一......
1需求
在某些情况下,某些表的某些列包含敏感数据(如用户信息表、用户的手机号码)。自然,我们只希望“管理员”用户看到这些敏感数据,而其他用户希望他们看到“处理过的”——脱敏的数据。
2实施方案介绍
方案一:使用pg匿名插件PostgreSQL anonymous
方案二:利用视图脱敏;
2.1方案一:使用pg匿名插件PostgreSQL anonymous
(示例来自插件的官方文档)
修改配置文件:shared preload libraries = pg stat statements,anon
.创建和激活插件。
如果级联上不存在扩展,则创建扩展;
SELECT anon . mask init();
2.声明屏蔽的用户
打造角色天网;
评论角色天网被蒙面;
3.声明屏蔽规则。
people.name列上的注释被函数anon.randomlastname()屏蔽;
people.phone列上的注释被函数anon.partial(phone,2,$$******$,2)屏蔽;
4.查询阻止敏感信息的用户。
\!psql test U skynet c SELECT *从人;
id 姓名电话
+ +
T800 n3xtchen 13******11
2.2方案2:通过使用视图脱敏
(来自本地开发环境的示例)
.创建测试用户
创建用户根;
创建普通用户;
2.切换到根表创建视图。
设置角色根;
创建表userphonenumber(id int,username name,phone number name);
插入user phone number值(1,张三,12345678);
插入user phone number值(1,李四,56781234);
创建或替换视图memberphonenumber为
挑选
S.id,
s .用户名,
substring(S.phonenumber,1,1) * * * * * * * * substring(s . phonenumber,8,8)作为phone number
从用户电话号码作为S;
3.回收表的权限,授予普通用户查看权限。
从公共电话中撤销所有用户电话号码;
将memberphonenumber上的所有权限授予normal user
4.用普通用户测试。
重置角色;
设置角色normal user
select * from用户电话号码;
select * from member phone number;
结果如下:
3优缺点对比
一般来说,如果你喜欢偷懒和尝鲜,可以使用postgresqlanonymizer插件;但是如果想要稳定,建议使用视图。
4参考
1.PostgreSQL:匿名器工具官网:https://labs.dalibo.com/postgresqlanonymizer
2.PostgreSQL:匿名工具官方文档:https://postgresqlanonymizer.readthedocs.io/en/stable/
特别声明:以上文章内容仅代表作者本人观点,不代表ESG跨境电商观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与ESG跨境电商联系。
二维码加载中...
使用微信扫一扫登录
使用账号密码登录
平台顾问
微信扫一扫
马上联系在线顾问
小程序
ESG跨境小程序
手机入驻更便捷
返回顶部