PostgreSQL 14和SCRAM认证的改变--应该迁移到SCRAM?

最近,一些PG使用者反馈他们切换到PG14后,遇到了一些连接错误。

FATAL:  password authentication failed for a user in the new server?”就是一个有趣的问题。至少在一个案例中,应用程序如下消息令人有点惊讶:

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

这些错误的原因是,新版本的PG将密码加密的默认设置改成了SCRAM认证。尽快最后一个似乎与SCRAM没有之间关系,是的,一些按照脚本识别了,他在寻找“md5”。SCRAM认证在PG中并不是什么新鲜事。从PG10开始就存在,但不影响DBA的日常,因为他不是默认设置。通过显式更改默认设置,作为可选项。那些选择使用的人知道如何使用,但PG社区多年来一直不愿将其作为主要方法,因为许多客户端/应用程序还没准备好进行SCRAM身份认证。但这在PG14中发生变化。随着PG9.6不再支持,情况正在发生变化。限制我们希望所有旧的客户端库都得到升级。SCRAM认证者成为主要密码身份认证方法。但是,那些全部不知道的人总会有一天会收到惊喜。本文就是让那些未了解的人快速理解并解决一些常见的问题。

什么是SCRAM认证?

简而言之,数据库客户端和服务端互相证明和说服对方他们知道密码,而无需交换密码和密码hash。是的,可以按照RFC7677的规定执行加盐挑战和响应SCRAM-SHA-256。这种存储、通信和密码验证的方式使得破解密码变得非常困难。这种方法更能抵抗:字典攻击、回放攻击、Stollen hashes。总的来说,破解基于密码的身份验证变得非常困难。

随着时间推移,改变了什么

Channel Binding

身份验证只是安全通信的一部分。身份验证后,中间的恶意服务器可能会接管并欺骗客户端连接。PG11引入了支持channel binding的SCRAM-SHA-256-PLUS。这是为了确保没有恶意服务器充当真实服务器或进行中间人攻击。从PG13开始,客户端可以请求甚至坚持channel binding。例如:

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

通道绑定通过SSL/TLS工作,因此SSL/TLS配置对于通道绑定工作是必需的。

配置Password Encryption

md5是PG10之前唯一可用的密码加密选项,因此PG允许设置指示“需要密码加密”,默认是md5:

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

由于同样的原因,上述陈述实际上与以下内容相同:

postgres=# set password_encryption TO MD5;
SET

我们甚至可以使用“true”、“1”、“yes”而不是“on”作为等效值。

但是现在我们有多种加密方法,“on”并不能真正表示我们想要的东西。所以从PG14开始,系统期望我们指定加密方法:

postgres=# set password_encryption TO 'scram-sha-256';
SETpostgres=# 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、我的逻辑备份和恢复是否受到影响

(pg_dumpall)逻辑备份和重储PG的globals不会影响SCRAM认证,相同的密码在恢复后工作。事实上,回想下SCRAM身份认证对更改更据弹性会很有趣。例如,如果我们重命名USER,旧的md5密码不再起作用,因为PG生成md5的方式也使用用户名。

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

NOTICE中表明,pg_authid中的密码被清除了,因为旧的Hash不再有效。但SCRAM验证不会出现这种情况,因为我们可以在不影响密码的情况下重命名用户:

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

2、现有/旧的加密方法(md5)是一个很大的漏洞,有没有很大的风险?

这种担心主要来自“MD5”这个名字,这对现代硬件来说太傻了。PG使用md5的方式不同,不仅仅是密码的hash值,它还考虑用户名。此外,它在使用服务器提供的随机盐准备hash后通过线路进行通信。有效地传达的内容将与密码hash不同,因此它不太容易受到攻击。但容易出现字典攻击和泄露用户名密码hash问题。

3、新的scram认证是否带来了复杂性?连接是否需要更长时间?

Scram的有线协议非常有效,并且不知道会导致连接时间下降。而且,与服务器端连接管理的其他开销相比,SCRAM产生的开销将变得非常微不足道。

4、是否必须使用PG14的SCRAM认证并强制其他用户账户切换到它?

绝对不是,只是更改了默认值。旧的Md5仍然是有效的方法,效果很好。如果访问PG环境受到了防火墙/hba规则的限制,使用md5的风险已经很小。

5、为什么切换PG14时收到“FATAL: password authentication failed for user”错误?

最大可能原因是pg_hba.conf条目。如果我们指定“md5”作为认证方法,PG也将允许SCRAM认证。但反过来是行不通的。当创建PG14环境时,很可能将“scram-sha-256”作为认证方法。在某些PG软件包中,安装脚本会自动执行认证,如果认证来自PG客户端而不是应用程序 ,请检查驱动版本以及升级的范围。

6、为什么会收到其他类型的身份认证错误?

最有可能的是后置安装脚本。在许多组织中,使用DevOps工具(Ansible/Chef)甚至shell脚本进行安装后自定义是一种常规做法。其中许多人将做一系列涉及密码加密设置为on的的事情;甚至使用sed修改pg_hba.conf。如果它试图修改不再存在的条目,则预计会失败。

应该关注什么以及如何做

从自动化/部署脚本、工具、应用程序连接和连接池开始的任何东西都可能会中断。将此更改延迟到PG14的主要论据之一是,最旧的支持版本9.6即将停止支持。因此,这是检查您环境以查看是否任何环境具有旧PG库并指定升级计划的合适时机。因为旧版本的PG库无法处理SCRAM。

总之,制定一个好的迁移计划总是好的,即使它并不紧急。

1)请检查环境和应用程序驱动以查看他们是否仍在使用旧版本的PG客户端库,并在需要时升级,参考:https://wiki.postgresql.org/wiki/List_of_drivers

2)如果现在有环境使用md5,鼓励用户切换到SCRAM认证。pg_hba.conf中提到的md5也将适用于PG14的SCRAM和MD5身份认证

3)抓住一切机会测试自动化、连接池、其他基础架构并将其迁移到SCRAM认证。

通过更改默认的认证方式,PG社区为未来指明了方向。

原文

https://www.percona.com/blog/postgresql-14-and-recent-scram-authentication-changes-should-i-migrate-to-scram/

PostgreSQL 14和SCRAM认证的改变--应该迁移到SCRAM?相关推荐

  1. PostgreSQL 14 版本发布,快来看看有哪些新特性!

    文章目录 性能增强 数据类型和 SQL 管理功能 复制和恢复 安全增强 更多特性 大家好!我是只谈技术不剪发的 Tony 老师. PostgreSQL 全球开发组于 2021-05-20 发布了 Po ...

  2. 数据3分钟丨CSDN 1024程序员节来啦!PostgreSQL 14和openGauss 2.1.0在同一天正式发布。...

    数据 3 分钟 由 ACDU (中国 DBA 联盟) 与墨天轮联合出品的全新视频节目上线啦-三分钟带你来了解数据行业动态,节目内容主要包含数据行业最新的产品发布.公司大事件.行业新闻等. 本期内容概览 ...

  3. Ubuntu20.04 PostgreSQL 14 安装配置记录

    PostgreSQL 名称来源 It was originally named POSTGRES, referring to its origins as a successor to the Ing ...

  4. PostgreSQL 14及更高版本改进

    PostgreSQL 14及更高版本 本文谈谈PG14中的关键特性及社区中正在谈论PG15及更高版本的内容. PG14的主要特性 逻辑复制的改进 PG14中对逻辑复制进行了几项增强: 1) 正在进行中 ...

  5. PostgreSQL 14中TOAST的新压缩算法LZ4,它有多快?

    对于列压缩选项,PostgreSQL 14提供了新的压缩方法LZ4.与TOAST中现有的PGLZ压缩方法相比,LZ4压缩更快.本文介绍如何使用整个选项,并和其他压缩算法进行性能比较. 背景 PG中,页 ...

  6. 【Kafka】Kafka SCRAM认证 ERROR [ZooKeeperClient] Auth failed

    1.概述 PLAIN认证有个问题,就是不能动态新增用户,每次添加用户后,需要重启正在运行的Kafka集群才能生效.为此,在生产环境,这种认证方式不符合实际业务场景.而SCRAM不一样,使用SCRAM认 ...

  7. 极客日报:阿里旗下App接入微信支付;马斯克成世界首富;PostgreSQL 14 RC 1发布

    一分钟速览新闻点! 阿里回应App接入微信支付 抖音起诉知乎名誉侵权 小米上诉"小米穿戴"图形商标被驳回 拼多多.美团已支持众多主流支付渠道 清华AI学生华智冰首次露正脸唱歌 快手 ...

  8. 我的世界java活板门会被烧没_《我的世界》新版1.14的活板门特性改变了?玩家开发出新的玩法!...

    <我的世界>MC新版1.14的活板门有一个特性,可以提高挖矿效率?<我的世界>新版1.14的活板门特性改变了?玩家开发出新的玩法!在沙盒游戏<我的世界>里面,村民与 ...

  9. PostgreSQL 14分布式Citus单机多实例部署

    什么是Citus Citus是一个PostgreSQL扩展,可将Postgres转换为分布式数据库,因此您可以在任何规模上实现高性能. 使用Citus,您可以使用新的超能力扩展PostgreSQL数据 ...

最新文章

  1. iceberg问题小结
  2. 精通有状态vs无状态(Stateful vs Stateless)一
  3. 25. Leetcode 143. 重排链表 (链表-基础操作类-重排链表)
  4. java中Class.getResource用法(用于配置文件的读取)
  5. 我的第一个可用的Windows驱动完成了
  6. CodeForces - 830C Bamboo Partition(数学+推公式)
  7. 如何提高电脑办公效能
  8. Java IdentityHashMap equals()方法与示例
  9. shell关闭指定进程
  10. 论文浅尝 - 计算机工程 | 知识图谱可视化查询技术综述
  11. GeoServer地图开发解决方案(三):部署地图数据篇
  12. lambert(兰伯特)投影 应用工具_全息投影技术,在哪些场地可以用到
  13. hao123谢幕,那是80后青春的记忆
  14. linux远程桌面密钥,使用 SSH 密钥连接到 Linux VM - Azure Virtual Machines | Microsoft Docs...
  15. 好看的php表格样式,四个好看的CSS样式表格 | 学步园
  16. linux vi 回到命令行,linux vi(linux系统vi命令详解)
  17. 计算机网络笔记四 无线局域网
  18. 《旷野游荡的精灵》 一个会写诗的程序员 2019.3
  19. 3航空公司客户价值分析
  20. 热烈祝贺 | 方正璞华喜获“数字贸易专委会年度示范单位”殊荣及“终身荣誉会长”单位

热门文章

  1. ArcMap进行数据转换
  2. 寒门再难出贵子(很现实,很残酷,慎入)
  3. Java 操作excel 插入删除列,插入删除图片
  4. android微信怎么建群,微信群空间是什么?如何创建微信群空间?
  5. vue created 无效
  6. 莎士比亚文集词频统计并行化算法
  7. 马丁福勒 关于微服务特点的描述
  8. MacBook Pro 时间机器备份(完美解决连接移动硬盘无反应)
  9. “财界奥斯卡”CGMA全球管理会计中国大奖榜单公布
  10. win7命令启动计算机管理,关于Win7中运行的命令