广告
返回顶部
首页 > 资讯 > 数据库 >怎么使用PostgreSQL的插件postgresql_anonymizer
  • 107
分享到

怎么使用PostgreSQL的插件postgresql_anonymizer

postgresql_anonymizerpostgresql 2022-10-18 23:10:21 107人浏览 泡泡鱼
摘要

本篇内容主要讲解“怎么使用postgresql的插件postgresql_anonymizer”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Postgr

本篇内容主要讲解“怎么使用postgresql插件postgresql_anonymizer”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用PostgreSQL的插件postgresql_anonymizer”吧!

安装
依赖tsm_system_rows和ddlx两个扩展,需提前安装妥当。

[local:/data/pg12]:5432 pg12@testdb=# create extension tsm_system_rows;
CREATE EXTENSION
[local:/data/pg12]:5432 pg12@testdb=# create extension ddlx;
CREATE EXTENSION
[local:/data/pg12]:5432 pg12@testdb=#

clone代码,编译安装

[pg12@localhost contrib]$ git clone https://gitlab.com/dalibo/postgresql_anonymizer.git -b 0.5.0
Cloning into 'postgresql_anonymizer'...
remote: Enumerating objects: 2396, done.
remote: Counting objects: 100% (2396/2396), done.
remote: Compressing objects: 100% (854/854), done.
remote: Total 2396 (delta 1524), reused 2379 (delta 1513)
Receiving objects: 100% (2396/2396), 12.85 MiB | 55.00 KiB/s, done.
Resolving deltas: 100% (1524/1524), done.
Note: checking out 'c108008719a1394b55779ff7115f188511c6ec89'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by perfORMing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
  git checkout -b new_branch_name

编译安装

[pg12@localhost contrib]$ cd postgresql_anonymizer/
[pg12@localhost postgresql_anonymizer]$ make
mkdir -p anon
cp anon.sql anon/anon--0.5.0.sql
cp data/default/* anon/
GCc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -g -O0 -DOPTIMIZER_DEBUG -g3 -gdwarf-2 -fPIC -I. -I./ -I/appdb/pg12/pg12.1/include/postgresql/server -I/appdb/pg12/pg12.1/include/postgresql/internal  -D_GNU_SOURCE -I/usr/include/libxml2   -c -o anon.o anon.c -MMD -MP -MF .deps/anon.Po
gcc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -g -O0 -DOPTIMIZER_DEBUG -g3 -gdwarf-2 -fPIC anon.o -L/appdb/pg12/pg12.1/lib   -Wl,--as-needed -Wl,-rpath,'/appdb/pg12/pg12.1/lib',--enable-new-dtags  -shared -o anon.so
[pg12@localhost postgresql_anonymizer]$ make install
mkdir -p anon
cp anon.sql anon/anon--0.5.0.sql
cp data/default/* anon/
/bin/mkdir -p '/appdb/pg12/pg12.1/share/postgresql/extension'
/bin/mkdir -p '/appdb/pg12/pg12.1/share/postgresql/extension/anon'
/bin/mkdir -p '/appdb/pg12/pg12.1/lib/postgresql'
/bin/install -c -m 644 .//anon.control '/appdb/pg12/pg12.1/share/postgresql/extension/'
/bin/install -c -m 644 .//anon/*  '/appdb/pg12/pg12.1/share/postgresql/extension/anon/'
/bin/install -c -m 755  anon.so '/appdb/pg12/pg12.1/lib/postgresql/'
[pg12@localhost postgresql_anonymizer]$

体验
创建扩展,添加到加载库中shared_preload_libraries,重启实例

[local:/data/pg12]:5432 pg12@testdb=# CREATE EXTENSION IF NOT EXISTS anon CASCADE;
CREATE EXTENSION
[local:/data/pg12]:5432 pg12@testdb=# alter system set shared_preload_libraries = 'anon';
ALTER SYSTEM
[local:/data/pg12]:5432 pg12@testdb=# 
[local:/data/pg12]:5432 pg12@testdb=# exit
[pg12@localhost contrib]$ pg_ctl restart
waiting for server to shut down.... done
server stopped
waiting for server to start....2019-11-19 16:41:45.940 CST [15439] LOG:  starting PostgreSQL 12.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16), 64-bit
2019-11-19 16:41:45.940 CST [15439] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2019-11-19 16:41:45.940 CST [15439] LOG:  listening on IPv6 address "::", port 5432
2019-11-19 16:41:45.943 CST [15439] LOG:  listening on Unix Socket "/data/pg12/.s.PGSQL.5432"
2019-11-19 16:41:46.013 CST [15439] LOG:  redirecting log output to logging collector process
2019-11-19 16:41:46.013 CST [15439] HINT:  Future log output will appear in directory "pg_log".
 done
server started
[pg12@localhost contrib]$

插件提供的函数

[local:/data/pg12]:5432 pg12@testdb=# select * from pg_namespace where nspname='anon';
  oid  | nspname | nspowner | nspacl 
-------+---------+----------+--------
 17050 | anon    |       10 | 
(1 row)
[local:/data/pg12]:5432 pg12@testdb=# \d pg_proc
                   Table "pg_catalog.pg_proc"
     Column      |     Type     | Collation | Nullable | Default 
-----------------+--------------+-----------+----------+---------
 oid             | oid          |           | not null | 
 proname         | name         |           | not null | 
 pronamespace    | oid          |           | not null | 
 proowner        | oid          |           | not null | 
 prolang         | oid          |           | not null | 
 procost         | real         |           | not null | 
 prorows         | real         |           | not null | 
 provariadic     | oid          |           | not null | 
 prosupport      | regproc      |           | not null | 
 prokind         | "char"       |           | not null | 
 prosecdef       | boolean      |           | not null | 
 proleakproof    | boolean      |           | not null | 
 proisstrict     | boolean      |           | not null | 
 proretset       | boolean      |           | not null | 
 provolatile     | "char"       |           | not null | 
 proparallel     | "char"       |           | not null | 
 pronargs        | smallint     |           | not null | 
 pronargdefaults | smallint     |           | not null | 
 prorettype      | oid          |           | not null | 
 proargtypes     | oidvector    |           | not null | 
 proallargtypes  | oid[]        |           |          | 
 proargmodes     | "char"[]     |           |          | 
 proargnames     | text[]       | C         |          | 
[local:/data/pg12]:5432 pg12@testdb=# select proname from pg_proc where pronamespace = 17050;
           proname            
------------------------------
 dump
 generalize_int4range
 random_date_between
 random_date
 random_int_between
 add_noise_on_numeric_column
 add_noise_on_datetime_column
 shuffle_column
 load
 load
 isloaded
 unload
 random_string
 random_zip
 random_phone
 fake_first_name
 fake_last_name
 fake_email
 fake_city_in_country
 fake_city
 fake_region_in_country
 fake_region
 fake_country
 fake_company
 fake_iban
 fake_siren
 fake_siret
 lorem_ipsum
 random_first_name
 random_last_name
 random_email
 random_city_in_country
 random_city
 random_region_in_country
 random_region
 random_country
 random_company
 random_iban
 random_siren
 random_siret
 partial
 partial_email
 source_schema
 mask_schema
 anonymize_column
 anonymize_table
 anonymize_database
 static_substitution
 hasmask
 mask_columns
 mask_create
 mask_filters
 mask_create_view
 mask_drop_view
 get_copy_statement
 start_dynamic_masking
 mask_init
 stop_dynamic_masking
 mask_trigger
 mask_role
 unmask_role
 mask_enable
 mask_disable
 mask_update
 dump_ddl
 dump_data
 generalize_int8range
 generalize_numrange
 generalize_tsrange
 generalize_tstzrange
 generalize_daterange
 k_anonymity
(72 rows)

下面创建一张”隐私”表,使用该插件实现动态脱敏

[local:/data/pg12]:5432 pg12@testdb=# drop table t_masking;
ERROR:  table "t_masking" does not exist
[local:/data/pg12]:5432 pg12@testdb=# create table t_masking(id serial,name varchar(20),zipcode varchar(20));
 values('王五','230100');
CREATE TABLE
[local:/data/pg12]:5432 pg12@testdb=# 
[local:/data/pg12]:5432 pg12@testdb=# insert into t_masking(name,zipcode) values('张三','440100');
INSERT 0 1
[local:/data/pg12]:5432 pg12@testdb=# insert into t_masking(name,zipcode) values('李四','420100');
INSERT 0 1
[local:/data/pg12]:5432 pg12@testdb=# insert into t_masking(name,zipcode) values('王五','230100');
INSERT 0 1
[local:/data/pg12]:5432 pg12@testdb=#

启用动态脱敏,创建脱敏用户masking

[local:/data/pg12]:5432 pg12@testdb=# SELECT anon.start_dynamic_masking();
 start_dynamic_masking 
-----------------------
 t
(1 row)
[local:/data/pg12]:5432 pg12@testdb=# 
[local:/data/pg12]:5432 pg12@testdb=# CREATE ROLE masking LOGIN with passWord 'root';
ERROR:  syntax error at or near "with"
LINE 1: CREATE ROLE masking LOGIN with password 'root';
                                  ^
[local:/data/pg12]:5432 pg12@testdb=# CREATE user masking with password 'root';
CREATE ROLE

打标签

[local:/data/pg12]:5432 pg12@testdb=# SECURITY LABEL FOR anon ON ROLE masking IS 'MASKED';
SECURITY LABEL
[local:/data/pg12]:5432 pg12@testdb=# SECURITY LABEL FOR anon ON COLUMN t_masking.name is 'MASKED WITH FUNCTION anon.fake_last_name()';
SECURITY LABEL
[local:/data/pg12]:5432 pg12@testdb=# SECURITY LABEL FOR anon ON COLUMN t_masking.zipcode is 'MASKED WITH FUNCTION anon.random_zip()';
SECURITY LABEL
[local:/data/pg12]:5432 pg12@testdb=#

t_masking的数据

[local:/data/pg12]:5432 pg12@testdb=# select * from t_masking;
 id | name | zipcode 
----+------+---------
  1 | 张三 | 440100
  2 | 李四 | 420100
  3 | 王五 | 230100
(3 rows)
[local:/data/pg12]:5432 pg12@testdb=#

用户masking登录查询得到的数据

[pg12@localhost pgddl]$ psql -U masking
Expanded display is used automatically.
psql (12.1)
Type "help" for help.
[local:/data/pg12]:5432 masking@testdb=> select * from t_masking;
 id |   name   | zipcode 
----+----------+---------
  1 | MalaGISi | 46864
  2 | Hausner  | 55255
  3 | DeGolyer | 82186
(3 rows)
[local:/data/pg12]:5432 masking@testdb=>

可以看到,数据已被“脱敏”。

到此,相信大家对“怎么使用PostgreSQL的插件postgresql_anonymizer”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么使用PostgreSQL的插件postgresql_anonymizer

本文链接: https://www.lsjlt.com/news/63552.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么使用PostgreSQL的插件postgresql_anonymizer
    本篇内容主要讲解“怎么使用PostgreSQL的插件postgresql_anonymizer”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Postgr...
    99+
    2022-10-18
    postgresql_anonymizer postgresql
  • 怎么使用PostgreSQL的插件pgmetries
    这篇文章主要介绍“怎么使用PostgreSQL的插件pgmetries”,在日常操作中,相信很多人在怎么使用PostgreSQL的插件pgmetries问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操...
    99+
    2022-10-18
    pgmetries postgresql
  • PostgreSQL中怎么使用pg_prewarm插件
    这篇文章主要介绍“PostgreSQL中怎么使用pg_prewarm插件”,在日常操作中,相信很多人在PostgreSQL中怎么使用pg_prewarm插件问题上存在疑惑,小编查阅了各式资料,整理出简单好用...
    99+
    2022-10-18
    pg_prewarm postgresql
  • 怎么使用PostgreSQL contrib中的dblink插件
    这篇文章主要介绍“怎么使用PostgreSQL contrib中的dblink插件”,在日常操作中,相信很多人在怎么使用PostgreSQL contrib中的dblink插件问题上存在疑惑,小编查阅了各式...
    99+
    2022-10-18
    dblink postgresql
  • 怎么安装使用PostgreSQL中pageinspcet插件
    本篇内容主要讲解“怎么安装使用PostgreSQL中pageinspcet插件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么安装使用PostgreSQL中p...
    99+
    2022-10-19
    pageinspcet postgresql
  • 怎么安装PostgreSQL的插件pg_catcheck
    这篇文章主要讲解了“怎么安装PostgreSQL的插件pg_catcheck”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么安装PostgreSQL的插件...
    99+
    2022-10-18
    postgresql
  • PostgreSQL的插件pg_variables有什么作用
    本篇内容主要讲解“PostgreSQL的插件pg_variables有什么作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL的插件pg_va...
    99+
    2022-10-18
    postgresql pg_variables
  • Postgresql Postgis插件综合使用教程
    数据库支持Postgis扩展: Postgresql 空间扩展需要Postgis插件 构建数据(aggregate_build_data)和聚合查询(aggregate_search): Postgesql 空间点聚合查询实验 ...
    99+
    2015-07-14
    Postgresql Postgis插件综合使用教程
  • vue的插件怎么使用
    本篇内容主要讲解“vue的插件怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue的插件怎么使用”吧! vue的插件是为应用...
    99+
    2022-10-19
    vue
  • a.vim插件怎么使用
    本篇内容介绍了“a.vim插件怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!A.vim如果你一直用像 C、C++ 这样的语言进行开发...
    99+
    2023-06-27
  • validationEngine插件怎么使用
    validationEngine插件是一个用于表单验证的jQuery插件,可以用于验证表单的输入内容是否符合要求。下面是使用vali...
    99+
    2023-08-19
    validationEngine
  • discuzx2插件怎么使用
    要使用DiscuzX2插件,您需要按照以下步骤进行操作:1. 下载插件:您可以在Discuz官方论坛或第三方插件站点上找到并下载需要...
    99+
    2023-08-24
    discuzx2
  • PostgreSQL怎么使用
    这篇文章主要讲解了“PostgreSQL怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PostgreSQL怎么使用”吧!PostgreSQL 是一个免费的对象-关系数据库服务器(OR...
    99+
    2023-06-28
  • 怎么使用PostgreSQL的INDEX_CLEANUP
    这篇文章主要讲解了“怎么使用PostgreSQL的INDEX_CLEANUP”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用PostgreSQL的IN...
    99+
    2022-10-18
    postgresql
  • 怎么使用PostgreSQL的pg_stat_statements
    本篇内容主要讲解“怎么使用PostgreSQL的pg_stat_statements”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用PostgreSQL的...
    99+
    2022-10-18
    postgresql
  • 怎么使用PostgreSQL的ExprEvalStep
    本篇内容介绍了“怎么使用PostgreSQL的ExprEvalStep”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2022-10-18
    postgresql exprevalstep
  • 怎么使用Postgresql的Checkpoint
    这篇文章主要讲解了“怎么使用Postgresql的Checkpoint”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Postgresql的Check...
    99+
    2022-10-18
    checkpoint postgresql
  • autojs websocket插件怎么使用
    要使用AutoJS WebSocket插件,你需要按照以下步骤进行操作:1. 下载并安装AutoJS应用程序(如果尚未安装)。2. ...
    99+
    2023-09-09
    autojs websocket
  • golang plugin插件怎么使用
    使用Go语言的插件(plugins)需要注意以下几个步骤: 创建插件模块:首先,你需要创建一个独立的模块来作为插件。这个模块需要...
    99+
    2023-10-20
    golang plugin
  • Jquery插件ThickBox怎么使用
    使用ThickBox插件可以在网页中创建一个弹出式的模态框,用于显示图片、网页内容或者是内嵌的视频。以下是使用ThickBox的步骤...
    99+
    2023-08-18
    Jquery ThickBox
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作