暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL安全机制:数据脱敏插件postgresql_anonymizer的使用

PostgreSQL Anonymizer 是一个扩展,用于掩盖或替换 PostgreSQL 数据库中的个人可识别信息或商业敏感数据。

静态掩码 (Static Masking)

静态掩码是一种将敏感数据在数据库中永久性替换或修改的过程。一旦应用了静态掩码,原始数据就会被覆盖,无法恢复。

优点:

  1. 数据安全性提高:由于敏感数据已被永久替换,即使数据泄露,也不会暴露原始信息。

  2. 符合合规性要求:对于需要永久删除或替换特定信息以满足法规要求的场景非常有用。

  3. 适合非生产环境:在测试或开发环境中使用静态掩码可以确保使用的是去敏感化的数据,减少泄露风险。

缺点:

  1. 不可逆:一旦应用,原始数据就无法恢复,这可能导致某些用例中的数据不再有用。

  2. 性能开销:根据数据库的大小,静态掩码可能需要显著的处理时间和资源。

  3. 数据价值降低:对于需要保持数据统计特性或分析价值的场合,静态掩码可能不是最佳选择。

动态掩码 (Dynamic Masking)

动态掩码是一种在数据被访问时实时应用掩码规则的过程,不修改存储在数据库中的原始数据,而是在查询结果返回给用户之前对数据进行掩码处理。

优点:

  1. 灵活性和透明性:可以根据用户的角色或权限动态地显示不同级别的数据细节,而不需要修改原始数据。

  2. 数据价值保留:原始数据保持不变,确保了数据的完整性和分析价值。

  3. 即时保护:适用于需要即时保护数据安全的环境,如生产环境中的实时数据访问。

缺点:

  1. 性能影响:动态掩码可能会增加数据库查询的处理时间,尤其是在数据量大或访问频繁的情况下。

  2. 安全性依赖于实现:如果动态掩码规则配置不当,可能会导致敏感信息的意外泄露。

  3. 管理复杂性:需要维护掩码规则和访问控制策略,对于有大量用户和复杂权限设置的环境来说,管理难度较高。

安装:

  1. #下载地址

  2. https://gitlab.com/dalibo/postgresql_anonymizer/-/releases

  3. #将postgresql_anonymizer-master.tar.gz文件拷贝至/opt目录下并解压

  4. tar zxvf postgresql_anonymizer-master.tar.gz


  5. #切换目录

  6. [postgres@wypg16 opt]$ cd postgresql_anonymizer-master

  7. [postgres@wypg16 postgresql_anonymizer-master]$


  8. #执行安装

  9. make

  10. make install


  11. #登录psql执行

  12. postgres=# ALTER DATABASE postgres SET session_preload_libraries = 'anon';

  13. ALTER DATABASE


  14. #重启配置生效

  15. [postgres@wypg16 postgresql_anonymizer-master]$ pg_ctl reload

  16. server signaled


  17. #创建并检查插件

  18. postgres=# CREATE EXTENSION anon

  19. postgres-# ;

  20. CREATE EXTENSION

  21. postgres=# \dx

  22. List of installed extensions

  23. Name | Version | Schema | Description

  24. ---------+---------+------------+------------------------------

  25. anon | 1.3.1 | public | Data anonymization tools

  26. plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language


  27. #初始化插件

  28. postgres=# SELECT anon.init();

  29. init

  30. ------

  31. t

  32. (1 row)

案例:

  1. #创建wytb01表,增加数据

  2. postgres=# create table wytb01(name varchar(20),tel varchar(20));

  3. CREATE TABLE

  4. postgres=# insert into wytb01 values('wuyang','13840348888');

  5. INSERT 0 1

  6. postgres=# insert into wytb01 values('laoxu','1384034666');

  7. INSERT 0 1


  8. #查看数据

  9. postgres=# select * from wytb01;

  10. name | tel

  11. --------+-------------

  12. wuyang | 13840348888

  13. laoxu | 1384034666

  14. (2 rows)


  15. #定义加密规则

  16. postgres=# SECURITY LABEL FOR anon ON COLUMN wytb01.tel

  17. postgres-# IS 'MASKED WITH FUNCTION anon.partial(tel,2,$$******$$,2)';

  18. SECURITY LABEL


  19. #定义加密用户wuyang,目的为使用wuyang用户登录后,查询表字段tel为动态加密后的效果

  20. postgres=# CREATE ROLE wuyang LOGIN;

  21. CREATE ROLE

  22. postgres=# SECURITY LABEL FOR anon ON ROLE wuyang IS 'MASKED';

  23. SECURITY LABEL


  24. #开启动态加密

  25. postgres=# SELECT anon.start_dynamic_masking()

  26. postgres-# ;

  27. start_dynamic_masking

  28. -----------------------

  29. t

  30. (1 row)


  31. #切换用户后查询wytb01表数据

  32. postgres=# \c - wuyang

  33. You are now connected to database "postgres" as user "wuyang".

  34. postgres=> select * from wytb01;

  35. name | tel

  36. --------+------------

  37. wuyang | 13******88

  38. laoxu | 13******66

  39. (2 rows)


文章转载自开源软件联盟PostgreSQL分会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论