PostgreSQL 13是发布一些很酷的功能,如指数提高,分区增强,和许多其他人。随着这些增强功能,有一些与安全相关的增强,需要一些解释。主要有两个:一是有关libpq postgres_fdw相关,另一个是。众所周知postgres_fdw被认为是一个“参考实现”的其他数据包装,所有其他数据包装跟随他们的脚步在发展。这是一个支持数据包装。这个博客将解释安全postgresq_fdw的变化。
1 -超级用户可以允许non-superusers postgres_fdw上建立一个无密码连接
以前,只有超级用户可以建立一个无密码连接使用postgres_fdw PostgreSQL。没有其他无密码认证方法是允许的。它被观察到,在某些情况下不需要密码,所以是没有意义的,限制。因此,PostgreSQL 13引入了一个新选项允许超级用户(password_required)可以给non-superusers postgres_fdw使用无密码连接。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
postgres
=
#创建扩展postgres_fdw;
创建
扩展
postgres
=
#创建服务器postgres_svr外国数据包装postgres_fdw选项(dbname postgres的);
创建
服务器
postgres
=
#创建FORIENG表foo_for (INT)服务器postgres_svr选项(table_name“foo”);
创建
外国
表
postgres
=
#创建用户映射的流浪汉服务器postgres_svr;
创建
用户
映射
postgres
=
#从foo_for SELECT *;
一个
- - -
- - - - - -
1
2
3
(
3
行
)
|
当我们从non-superuser执行相同的查询,然后我们将得到这个错误信息:
错误:密码是必需的
细节:Non-superusers必须提供一个密码的用户映射
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
postgres
=
#创建用户nonsup;
创建
角色
postgres
=
#创建用户映射nonsup服务器postgres_svr;
创建
用户
映射
postgres
=
#格兰特所有foo_for nonsup;
格兰特
流浪的
@
流浪的
:
/
工作
/
数据
美元
psql
postgres
- - - - - -
U
nonsup
;
psql
(
13.0
)
类型
“帮助”
为
帮助
.gydF4y2Ba
postgres
=
>
选择
*
从
foo_for
;
2020年
- - - - - -
09年
- - - - - -
28
13
:
00
:
02.798
UTC
(
16702年
]
错误
:
密码
是
要求
2020年
- - - - - -
09年
- - - - - -
28
13
:
00
:
02.798
UTC
(
16702年
]
细节
:
非
- - - - - -
超级用户
必须
提供
一个
密码
在
的
用户
映射
.gydF4y2Ba
2020年
- - - - - -
09年
- - - - - -
28
13
:
00
:
02.798
UTC
(
16702年
]
声明
:
选择
*
从
foo_for
;
错误
:
密码
是
要求
细节
:
非
- - - - - -
超级用户
必须
提供
一个
密码
在
的
用户
映射
.gydF4y2Ba
|
现在执行相同的查询设置新的参数后,从non-superuser password_required“假”在创建用户映射。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
21
|
流浪的
@
流浪的
:
/
工作
/
数据
美元
psql
postgres
psql
(
13.0
)
类型
“帮助”
为
帮助
.gydF4y2Ba
postgres
=
#删除用户映射为nonsup服务器postgres_svr;
下降
用户
映射
postgres
=
#创建用户映射为nonsup服务器postgres_svr选项(password_required '错误');
创建
用户
映射
流浪的
@
流浪的
:
/
工作
/
数据
美元
psql
postgres
- - - - - -
U
nonsup
;
psql
(
13.0
)
类型
“帮助”
为
帮助
.gydF4y2Ba
postgres
=
>
选择
*
从
foo_for
;
一个
- - -
- - - - - -
1
2
3
(
3
行
)
|
2 -通过SSL证书身份验证
提供了一个新选项在postgres_fdw使用SSL证书进行身份验证。为了达到这个目标,这两个新选项添加到使用该特性sslkey sslcert。
在执行这个任务之前,我们需要为服务器和客户端配置SSL。有许多可用的博客(如何启用SSL身份验证的教育局Postgres先进的服务器和SSL证书为PostgreSQL为PostgreSQL)设置SSL,这个博客试图配置SSL的最低要求。
第一步:生成的关键PGDATA美元
|
1
2
3
4
5
6
7
8
9
10
11
12
|
流浪的
@
流浪的
美元
openssl
genrsa
- - - - - -
des3
- - - - - -
出
服务器
。key
1024年
生成
RSA
私人
关键
,
1024年
位
长
模量
(
2
质数
)
.gydF4y2Ba
+ +
+ +
+
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
+ +
+ +
+
如ydF4y2Ba
是
65537年
(
0 x010001
)
输入
通过
短语
为
服务器
。key
:
验证
- - - - - -
输入
通过
短语
为
服务器
。key
:
流浪的
@
流浪的
美元
openssl
rsa
- - - - - -
在
服务器
。key
- - - - - -
出
服务器
。key
输入
通过
短语
为
服务器
。key
:
写作
RSA
关键
|
步骤2:改变server.key的模式
|
1
|
流浪的
@
流浪的
美元
修改文件权限
噩
- - - - - -
特权
服务器
。key
|
第三步:生成证书
|
1
2
3
4
5
6
7
8
9
10
11
12
|
流浪的
@
流浪的
美元
openssl
要求的事情
- - - - - -
新
- - - - - -
关键
服务器
。key
- - - - - -
天
3650年
- - - - - -
出
服务器
.crt
- - - - - -
x509
- - -
- - -
- - - - - -
国家
的名字
(
2
信
代码
)
(
非盟
]
:
PK
状态
或
省
的名字
(
完整的
的名字
)
(
一些
- - - - - -
状态
]
:
自己的特色
位置
的名字
(
如
,
城市
)
(
]
:
伊斯兰堡
组织
的名字
(
如
,
公司
)
(
互联网
Widgits
企业
有限公司
]
:
雷竞技下载官网
组织
单位
的名字
(
如
,
部分
)
(
]
:
Dev
常见的
的名字
(
如ydF4y2Ba
.g
.gydF4y2Ba
服务器
FQDN
或
你的
的名字
)
(
]
:
本地主机
电子邮件
地址
(
]
:
ibrar
.ahmad
@
Gmail
com
流浪的
@
流浪的
美元
cp
服务器
.crt
根
.crt
|
现在我们需要生成客户端证书。
第四步:生成一个客户机密钥
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
21
22
23
24
25
26
27
28
29日
|
流浪的
@
流浪的
美元
openssl
genrsa
- - - - - -
des3
- - - - - -
出
/
tmp
/
postgresql
。key
1024年
生成
RSA
私人
关键
,
1024年
位
长
模量
(
2
质数
)
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
+ +
+ +
+
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
.gydF4y2Ba
+ +
+ +
+
如ydF4y2Ba
是
65537年
(
0 x010001
)
输入
通过
短语
为
/
tmp
/
postgresql
。key
:
验证
- - - - - -
输入
通过
短语
为
/
tmp
/
postgresql
。key
:
流浪的
@
流浪的
美元
openssl
rsa
- - - - - -
在
/
tmp
/
postgresql
。key
- - - - - -
出
/
tmp
/
postgresql
。key
输入
通过
短语
为
/
tmp
/
postgresql
。key
:
写作
RSA
关键
流浪的
@
流浪的
美元
openssl
要求的事情
- - - - - -
新
- - - - - -
关键
/
tmp
/
postgresql
。key
- - - - - -
出
/
tmp
/
postgresql
csr
- - -
- - -
- - - - - -
国家
的名字
(
2
信
代码
)
(
非盟
]
:
PK
状态
或
省
的名字
(
完整的
的名字
)
(
一些
- - - - - -
状态
]
:
自己的特色
位置
的名字
(
如
,
城市
)
(
]
:
伊斯兰堡
组织
的名字
(
如
,
公司
)
(
互联网
Widgits
企业
有限公司
]
:
雷竞技下载官网
组织
单位
的名字
(
如
,
部分
)
(
]
:
Dev
常见的
的名字
(
如ydF4y2Ba
.g
.gydF4y2Ba
服务器
FQDN
或
你的
的名字
)
(
]
:
127.0.0.1
电子邮件
地址
(
]
:
ibrar
.ahmad
@
Gmail
com
请
输入
的
后
“额外的”
属性
来
是
发送
与
你的
证书
请求
一个
挑战
密码
(
]
:
巴基斯坦
一个
可选
公司
的名字
(
]
:
雷竞技下载官网
|
第五步:复制根。crt到客户端
|
1
|
流浪的
@
流浪的
美元
cp
data5555
/
根
.crt
/
tmp
/
|
第六步:测试连接使用一个证书
|
1
2
3
4
5
|
流浪的
@
流浪的
美元
psql
“主机=本地主机端口= postgres用户= = 5555 dbname ibrar sslmode = verify-full sslcert = / tmp / postgresql。crt sslkey = / tmp / postgresql。关键sslrootcert = / tmp /根。crt'
psql
(
13.0
)
SSL
连接
(
协议
:
TLSv1
.gydF4y2Ba
3
,
密码
:
TLS_AES_256_GCM_SHA384
,
位
:
256年
,
压缩
:
从
)
类型
“帮助”
为
帮助
.gydF4y2Ba
postgres
=
>
\
问
|
现在我们已经准备好了,我们可以创建一个外国在PostgreSQL服务器证书。
|
1
2
3
4
5
6
7
8
|
postgres
=
#创建服务器postgres_ssl_svr外国数据包装postgres_fdw选项(dbname postgres,举办“localhost”,港口‘5555’,sslcert / tmp / postgresql。crt, sslkey / tmp / postgresql。关键', sslrootcert '/tmp/root.crt');
创建
服务器
postgres
=
#创建用户映射的流浪汉服务器postgres_ssl_svr;
创建
用户
映射
postgres
=
#创建外国表foo_ssl_for (int)服务器postgres_ssl_svr选项(table_name“foo”);
创建
外国
表
|
现在我们已经做好准备,将查询通过postgres_fdw外国表使用证书身份验证。
|
1
2
3
4
5
6
7
8
|
postgres
=
#从foo_ssl_for select *;
一个
- - -
- - - - - -
1
2
3
(
3
行
)
|
注意:只有超级用户可以修改用户映射选项sslcert和sslkey设置。
我们的白皮书”为什么选择PostgreSQL ?”看着PostgreSQL的特点和优点,提出了一些实际的用法示例。我们还研究如何对企业有用PostgreSQL从Oracle迁移。







Ibrar Ahmed . .我看到你的视频在索引甚至更多的文章PostgreSQL . .其惊人的和你解释也是完美的。
我也想做一些文章教育局PostgreSQL。像巴特,EFM层叠复制、pg_backrest pg_receivewal甚至一些话题,因为文章没有从头开始. .是否可以联系你. .
openssl点播以及其他关键/ tmp / postgresql。关键的治疗
- - > > >这个命令是不正确的!
@leiyanliang是的命令的最后一个词是失踪。
openssl点播以及其他关键/ tmp / postgresql。关键的治疗/ tmp / postgresql.csr
创建服务器myserver外国数据包装postgres_fdw选项(xx.xx.xx dbname“xxx”,主人”。xx”,端口5555,sslcert / tmp /客户端/客户端。crt, sslkey / tmp /客户端/客户端。关键’, sslrootcert ‘/tmp/client/root.crt’);
创建用户映射为xxxx服务器myserver;
创建外国表服务器myserver abcd(名称文本);
psql '主机=本地主机端口= 5555美元dbname = postgres用户= ibrar sslmode = verify-full sslcert = / tmp / postgresql。crt sslkey = / tmp / postgresql。关键sslrootcert = / tmp /根。crt’
工作好…
但通过postgresql_fdw不工作
从abcd select count (*);
错误:无法连接到服务器“myserver”
(细节:致命的连接需要一个有效的客户端证书)
我用postgresql-13 . .
谢谢