PostgreSQL如何實現特定列脫敏

      網友投稿 812 2025-04-01

      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;

      PostgreSQL如何實現特定列脫敏

      -- 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/

      云數據庫 PostgreSQL

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Excel表格中基本函數應用的操作方法(excel表格各種函數用法)
      下一篇:GitLab CI/CD教程(一):為什么要學GitLab CI/CD?
      相關文章
      亚洲国产综合精品中文字幕 | 亚洲欧洲日产v特级毛片| 亚洲乱码中文字幕综合234| 亚洲国产成人AV网站| 亚洲欧洲无码一区二区三区| 精品国产日韩久久亚洲| 中文字幕亚洲码在线| 亚洲色在线无码国产精品不卡| 亚洲视频无码高清在线| 在线亚洲午夜片AV大片| 亚洲中文字幕无码亚洲成A人片| 久久亚洲国产成人影院| 亚洲一区AV无码少妇电影| 亚洲欧美成人综合久久久| 亚洲av日韩av永久在线观看 | 久久亚洲AV午夜福利精品一区| 亚洲国产精品无码久久久蜜芽| 人人狠狠综合久久亚洲88| 亚洲国产精品久久久久久| 久久精品国产亚洲av麻豆色欲| 亚洲精品一区二区三区四区乱码 | 亚洲一级黄色视频| 亚洲毛片αv无线播放一区| 精品国产_亚洲人成在线高清| 亚洲va国产va天堂va久久| 亚洲嫩模在线观看| 亚洲高清视频免费| 亚洲人xxx日本人18| 亚洲国产一区二区三区在线观看 | 久久亚洲私人国产精品| 亚洲白色白色在线播放| 国产精品亚洲自在线播放页码 | 亚洲精品国偷自产在线| 亚洲影院在线观看| 狠狠色香婷婷久久亚洲精品| 无码天堂va亚洲va在线va| 中文字幕第13亚洲另类| 久久久亚洲精品无码| 亚洲国产超清无码专区| 亚洲乱色伦图片区小说| 亚洲第一黄片大全|