ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

PostgreSQL 14的SCRAM身份验证

2022-02-11 03:00:23  阅读:385  来源: 互联网

标签:PostgreSQL postgres encryption 身份验证 SCRAM password 14


升级到PostgreSQL14之后,会遇到以下错误:

FATAL:  password authentication failed for a user
FATAL: Connection to database failed: connection to server at “localhost” (::1), port 5432 failed: fe_sendauth: no password supplied

报这些错误的原因是,PostgreSQL修改了默认的密码加密算法,在新版本中改成了SCRAM验证方式。

SCRAM其实并不是PostgreSQL中的新东西,在版本10中就有了,只是在之前的版本中只是可选的设置,而不是默认设置。PostgreSQL社区多年来一直不愿将其作为主要方法,因为许多客户端/应用程序库还没有准备好进行 SCRAM身份验证。

但在PostgreSQL 14中正在发生变化。随着PostgreSQL 9.6不再支持,情况正在发生变化。现在希望所有旧的客户端库都得到升级,SCRAM 身份验证正在成为主要的密码身份验证方法。但是,那些完全不知道的人总有一天会收到惊喜。 这篇文章的目的是让那些尚未了解的人快速了解并解决一些常见问题。

PostgreSQLv14虽然是默认改成了SCRAM验证方式。但是仍然可以使用以前的验证方式。

SCRAM身份验证

身份验证只是安全通信的一部分。身份验证后,中间的恶意服务器可能会接管并欺骗客户端连接。PostgreSQL 11 引入了支持通道绑定的 SCRAM-SHA-256-PLUS。这是为了确保没有恶意服务器充当真实服务器或进行中间人攻击。

从PostgreSQL 13开始,客户端可以通过通道绑定(channel binding)发起请求。

例如:

psql -U postgres -h c76pri channel_binding=prefer
or
psql -U postgres -h c76pri channel_binding=require

通道绑定(channel binding)必须要开启SSL/TLS配置。

设置密码加密

md5是PostgreSQL 10之前唯一可用的密码加密选项,默认为md5。

–Upto PG 13
postgres=# set password_encryption TO ON;
SET

on也可以替换成:true、1、yes。

该语句的作用和下面的等效:

postgres=# set password_encryption TO MD5;
SET

 

现在我们有了多种密码加密算法,从PostgreSQL14开始,就要指定加密算法了:

postgres=# set password_encryption TO 'scram-sha-256';
SET
postgres=# set password_encryption TO 'md5';
SET

 

如果再尝试使用:on、true、yes。就会报错了:

–-From PG 14
postgres=# set password_encryption TO 'on';
ERROR:  invalid value for parameter "password_encryption": "on"
HINT:  Available values: md5, scram-sha-256.

常被提出的问题

1.逻辑备份和还原是否受影响

PostgreSQL的逻辑备份和恢复不会影响SCRAM身份验证,恢复后相同的密码可以工作。

如果我们重命名USER,旧的MD5密码将不再起作用,因为PostgreSQL生成MD5 的方式也使用到用户名。

postgres=# ALTER USER jobin1 RENAME TO jobin;
NOTICE: MD5 password cleared because of role rename
ALTER ROLE

可以看到,pg_authid中的密码哈希值会被清空,因为老的不再有效。

但是,SCRAM验证就不会出现上面的问题:

postgres=# ALTER USER jobin RENAME TO jobin1;
ALTER ROLE

 

 

标签:PostgreSQL,postgres,encryption,身份验证,SCRAM,password,14
来源: https://www.cnblogs.com/abclife/p/15865504.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有