zoukankan      html  css  js  c++  java
  • 如何实现特定列脱敏?这两种方法你都要会

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

    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/

     

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

  • 相关阅读:
    Python函数
    mysql实现体温管理系统
    python操作Mysql
    Python列表,元祖
    word中标题去掉前面的点
    关于浏览器被劫持解决方法
    小程序开发问题
    微信小游戏开发
    yii2修改默认控制器和布局视图
    yii2的url美化设置
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/13601889.html
Copyright © 2011-2022 走看看