千家信息网

postgresql中PLProxy如何配置

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,小编给大家分享一下postgresql中PLProxy如何配置,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.下载plproxy-2.6.tar.gz网址:https://plpr
千家信息网最后更新 2024年09月22日postgresql中PLProxy如何配置

小编给大家分享一下postgresql中PLProxy如何配置,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

1.下载plproxy-2.6.tar.gz

网址:https://plproxy.github.io/

root用户上传到 /home/soft目录

# cd /home/

# chown postgres.postgres soft

# cd soft

# chown postgres.postgres plproxy-2.6.tar.gz

2.编译安装

前提:postgresql 9.5.2源码安装,/opt/pgsql/9.5.2

postgres用户PATH环境变量

[postgres@pgtest ~]$ more .bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs

export LD_LIBRARY_PATH=/usr/local/mysql/lib/mysql:/opt/pgsql/9.5.2/lib

export PATH=/usr/local/mysql/bin:/opt/pgbouncer/1.7.2/bin:/opt/pgsql/9.5.2/bin:$PATH

export MANPATH=/opt/pgsql/9.5.2/share/man:$MANPATH

[postgres@pgtest ~]$

postgres用户执行以下命令

$ tar zxvf plproxy-2.6.tar.gz

$ make

......

......

......

gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -O2 -fpic -I/opt/pgsql/9.5.2/include/server -I/opt/pgsql/9.5.2/include -DNO_SELECT=0 -I. -I./ -I/opt/pgsql/9.5.2/include/server -I/opt/pgsql/9.5.2/include/internal -D_GNU_SOURCE -c -o src/aatree.o src/aatree.c

gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -O2 -fpic -shared -o plproxy.so src/scanner.o src/parser.tab.o src/cluster.o src/execute.o src/function.o src/main.o src/query.o src/result.o src/type.o src/poll_compat.o src/aatree.o -L/opt/pgsql/9.5.2/lib -Wl,--as-needed -Wl,-rpath,'/opt/pgsql/9.5.2/lib',--enable-new-dtags -L/opt/pgsql/9.5.2/lib -lpq

echo "create extension plproxy;" > sql/plproxy.sql

cat sql/plproxy_lang.sql sql/plproxy_fdw.sql > sql/plproxy--2.6.0.sql

cat sql/ext_update_validator.sql >sql/plproxy--2.3.0--2.6.0.sql

cat sql/ext_update_validator.sql >sql/plproxy--2.4.0--2.6.0.sql

cat sql/ext_update_validator.sql >sql/plproxy--2.5.0--2.6.0.sql

cat sql/ext_unpackaged.sql > sql/plproxy--unpackaged--2.6.0.sql

$

$ make install

/bin/mkdir -p '/opt/pgsql/9.5.2/lib'

/bin/mkdir -p '/opt/pgsql/9.5.2/share/extension'

/bin/mkdir -p '/opt/pgsql/9.5.2/share/extension'

/usr/bin/install -c -m 755 plproxy.so '/opt/pgsql/9.5.2/lib/plproxy.so'

/usr/bin/install -c -m 644 .//plproxy.control '/opt/pgsql/9.5.2/share/extension/'

/usr/bin/install -c -m 644 sql/plproxy--2.6.0.sql sql/plproxy--2.3.0--2.6.0.sql sql/plproxy--2.4.0--2.6.0.sql sql/plproxy--2.5.0--2.6.0.sql sql/plproxy--unpackaged--2.6.0.sql '/opt/pgsql/9.5.2/share/extension/'

$

3.proxy

proxy节点:

ipaddress:192.168.199.201

user: proxy

password: proxy

database:proxy

data节点

ipaddress:192.168.199.201

user: datauser

password: datauser

database:db0、db1、db2、db3

[postgres@pgtest ~]$ psql

psql (9.5.2)

Type "help" for help.

postgres=# \l

List of databases

Name | Owner | Encoding | Collate | Ctype | Access privileges

-----------+----------+----------+-------------+-------------+-----------------------

postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |

template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +

| | | | | postgres=CTc/postgres

template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +

| | | | | postgres=CTc/postgres

(3 rows)

创建role

postgres=# create role proxy nosuperuser login encrypted password 'proxy';

CREATE ROLE

创建proxy数据库

postgres=# create database proxy;

CREATE DATABASE

postgres=# \c proxy

You are now connected to database "proxy" as user "postgres".

加载扩展proxy

proxy=# create extension plproxy;

CREATE EXTENSION

proxy=#

调整proxy库权限

proxy=# grant all on database proxy to proxy;

GRANT

proxy=# \c proxy proxy

You are now connected to database "proxy" as user "proxy".

proxy=>

创建workschema schema, 目的是和数据节点的schema匹配, 这样的话可以省去在代理函数中写target强行指定schema.

数据节点也建立这个schema。

proxy=> create schema workschema;

CREATE SCHEMA

proxy=>

创建data节点数据库

proxy=> \c postgres postgres

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

postgres=# create role datauser nosuperuser login encrypted password 'datauser';

CREATE ROLE

postgres=# create database db0;

CREATE DATABASE

postgres=# create database db1;

CREATE DATABASE

postgres=# create database db2;

CREATE DATABASE

postgres=# create database db3;

CREATE DATABASE

postgres=#

调整权限, 赋予给后面将要给user mapping中配置的option user权限.

postgres=# grant all on database db0 to datauser;

GRANT

postgres=# grant all on database db1 to datauser;

GRANT

postgres=# grant all on database db2 to datauser;

GRANT

postgres=# grant all on database db3 to datauser;

GRANT

postgres=#

每个库创建schema

postgres=# \c db0 datauser

You are now connected to database "db0" as user "datauser".

db0=> create schema workschema;

CREATE SCHEMA

db0=> \c db1 datauser

You are now connected to database "db1" as user "datauser".

db1=> create schema workschema;

CREATE SCHEMA

db1=> \c db2 datauser

You are now connected to database "db2" as user "datauser".

db2=> create schema workschema;

CREATE SCHEMA

db2=> \c db3 datauser

You are now connected to database "db3" as user "datauser".

db3=> create schema workschema;

CREATE SCHEMA

db3=>

使用超级用户在proxy数据库中创建server.

postgres=# \c proxy postgres

proxy=#CREATE SERVER cluster_srv1 FOREIGN DATA WRAPPER plproxy options (connection_lifetime '1800',

p0 'dbname=db0 hostaddr=192.168.199.201 port=1921 application_name=test',

p1 'dbname=db1 hostaddr=192.168.199.201 port=1921',

p2 'dbname=db2 hostaddr=192.168.199.201 port=1921',

p3 'dbname=db3 hostaddr=192.168.199.201 port=1921');

CREATE SERVER

proxy=#

创建server时可以使用libpq中的选项. 例如本例使用了application_name.

将server权限赋予给proxy用户.

proxy=# GRANT usage ON FOREIGN SERVER cluster_srv1 to proxy;

GRANT

proxy=#

配置proxy用户的连接cluster_srv1的选项.

proxy=# GRANT usage ON FOREIGN SERVER cluster_srv1 to proxy;

GRANT

proxy=# CREATE USER MAPPING FOR PROXY SERVER cluster_srv1 options(user 'datauser');

CREATE USER MAPPING

proxy=#

用户proxy连接到cluster_srv1时使用datauser用户连接, 这里不需要配置password, 因为我们将使用trust认证.

修改数据节点的pg_hba.conf

从proxy节点使用datauser用户连接数据库db0, db1, db2,db3使用trust认证.

# TYPE DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only

local all all trust

# IPv4 local connections:

host all all 127.0.0.1/32 trust

host db0 datauser 192.168.199.0/24 trust

host db1 datauser 192.168.199.0/24 trust

host db2 datauser 192.168.199.0/24 trust

host db3 datauser 192.168.199.0/24 trust

$ pg_ctl reload -D /pgdata95/

server signaled

$

在plproxy节点创建代理函数

使用超级用户创建plproxy函数, 然后把函数权限赋予给proxy权限.

postgres=# \c proxy

You are now connected to database "proxy" as user "postgres".

proxy=# CREATE OR REPLACE FUNCTION workschema.dy(sql text)

proxy-# RETURNS SETOF record AS

proxy-# $BODY$

proxy$# cluster 'cluster_srv1';

proxy$# run on all;

proxy$# $BODY$

proxy-# LANGUAGE 'plproxy';

CREATE FUNCTION

proxy=# grant execute on function workschema.dy(text) to proxy;

GRANT

proxy=#

在数据节点创建实体函数

db0\db1\db2\db3 数据库 datauser用户

CREATE OR REPLACE FUNCTION workschema.dy(sql text)

RETURNS SETOF record

AS $BODY$

declare rec record;

begin

for rec in execute sql loop

return next rec;

end loop;

return;

end;

$BODY$

LANGUAGE 'plpgsql';

在proxy节点中就可以访问数据节点了。

# \c proxy proxy

proxy=> select * from workschema.dy('select count(*) from pg_class') as t(i int8);

i

-----

311

311

311

311

(4 rows)

proxy=> select sum(i) from workschema.dy('select count(*) from pg_class') as t(i int8);

sum

------

1244

(1 row)

proxy=>

plproxy节点测试

在数据节点创建测试表.

db0\db1\db2\db3 数据库 datauser用户

创建表

create table t(id int);

创建实体函数

CREATE OR REPLACE FUNCTION workschema.f_test4()

RETURNS int

AS $$

declare

begin

insert into t(id) values(1);

return 0;

end;

$$

LANGUAGE 'plpgsql';

proxy 创建代理函数

在proxy节点创建代理函数, 并且将执行权限赋予给proxy用户.

proxy=> \c proxy postgres

CREATE OR REPLACE FUNCTION workschema.f_test4()

RETURNS int

AS $$

cluster 'cluster_srv1';

run on 0;

$$

LANGUAGE 'plproxy' strict;

proxy=# grant execute on function workschema.f_test4() to proxy;

GRANT

执行代理函数

proxy=# \c proxy proxy

You are now connected to database "proxy" as user "proxy".

proxy=>

proxy=>

proxy=>

proxy=> select * from workschema.f_test4();

f_test4

---------

0

(1 row)

proxy=>

看完了这篇文章,相信你对"postgresql中PLProxy如何配置"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

节点 用户 数据 函数 权限 数据库 配置 代理 实体 篇文章 测试 认证 调整 这样的话 前提 变量 命令 完了 更多 源码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南昌软件开发公司怎么样 网络安全防护体系的建设思路 扬职大计算机网络技术怎么样 腾讯的服务器放在贵州哪里 网络安全活动图片 广州市网络安全处 计算机网络技术短视频 中国移动的认证服务器地址怎么写 数据库的字段名称可以更改么 建立大数据库意义 云服务器上的数据能备份到本地吗 苹果文件管理怎么连接服务器 西安飞腾服务器 计算机网络技术期末网络技术 oppor9服务器在哪里 数据库utf8中文排序规则 庄河im即时通讯软件开发 不需要输密码的网络安全吗 定制软件开发服务收入确认 校园网络安全论文1500 数据库中课程名用什么类型表示 冰河 网络安全 怎样做好当前网络安全工作 臭氧消毒服务器 北京众鑫互联网科技有限公司 2020网络安全案例 中国互联网改变世界的科技 国内服务器哪个地区的好 安徽数据软件开发服务应用 英雄联盟全球服务器客户端
0