[转帖]pg_hba.conf 中 md5 和 scram-sha-256 的区别

pg,hba,conf,md5,scram,sha,区别 · 浏览次数 : 0

小编点评

**20.5. 口令认证** **方法:** * scram-sha-256 (挑战-响应) * md5 (挑战-响应) * password (明文) * gss (GSSAPI) * sspi (SSPI) * ldap (LDAP) * radius (RADIUS) * cert (SSL 客户端证书) * pam (操作系统提供的 PAM 认证) * bsd (由操作系统提供的 BSD 认证服务) **安全性:** * **scram-sha-256:**最安全的方法,但旧的客户端库不支持。 * **md5:**安全性较低,但能防止口令嗅探。 * **password:**明文口令易于盗。 * **gss:**只适用于 TCP/IP 连接。 * **sspi:**仅适用于 Windows 上。 * **ldap:**需要设置 LDAP 服务器。 * **radius:**只适用于本地连接。 * **cert:**使用 SSL 客户端证书进行认证。 * **pam:**需要在用户设置中手动配置。 * **bsd:**仅适用于本地连接。

正文

db: postgresql 11

auth-method
指定当一个连接匹配这个记录时,要使用的认证方法。下面对可能的选择做了概述,详见第 20.3 节。

trust
无条件地允许连接。这种方法允许任何可以与PostgreSQL数据库服务器连接的用户以他们期望的任意PostgreSQL数据库用户身份登入,而不需要口令或者其他任何认证。详见第 20.4 节。

reject
无条件地拒绝连接。这有助于从一个组中“过滤出”特定主机,例如一个reject行可以阻塞一个特定的主机连接,而后面一行允许一个特定网络中的其余主机进行连接。

scram-sha-256
执行SCRAM-SHA-256认证来验证用户的口令。详见第 20.5 节。

md5
执行SCRAM-SHA-256或MD5认证来验证用户的口令。详见第 20.5 节。

password
要求客户端提供一个未加密的口令进行认证。因为口令是以明文形式在网络上发送的,所以我们不应该在不可信的网络上使用这种方式。详见第 20.5 节。

gss
用 GSSAPI 认证用户。只对 TCP/IP 连接可用。详见第 20.6 节。

sspi
用 SSPI 来认证用户。只在 Windows 上可用。详见第 20.7 节。

ident
通过联系客户端的 ident 服务器获取客户端的操作系统名,并且检查它是否匹配被请求的数据库用户名。Ident 认证只能在 TCIP/IP 连接上使用。当为本地连接指定这种认证方式时,将用 peer 认证来替代。详见第 20.8 节。

peer
从操作系统获得客户端的操作系统用户,并且检查它是否匹配被请求的数据库用户名。这只对本地连接可用。详见第 20.9 节。

ldap
使用LDAP服务器认证。详见第 20.10 节。

radius
用 RADIUS 服务器认证。详见第 20.11 节。

cert
使用 SSL 客户端证书认证。详见第 20.12 节。

pam
使用操作系统提供的可插入认证模块服务(PAM)认证。详见第 20.13 节。

bsd
使用由操作系统提供的 BSD 认证服务进行认证。详见第 20.14 节。

==================================================================

20.5. 口令认证
有几种基于口令的认证方法。这些方法的过程类似,但是区别在于用户口令如何被存放在服务器上以及客户端提供的口令如何被通过连接发送。

scram-sha-256
方法scram-sha-256按照RFC 7677中的描述执行SCRAM-SHA-256认证。它使用的是一种挑战-响应的方案,可以防止在不可信连接上对口令的嗅探并且支持在服务器上以一种加密哈希的方式存放口令,因此被认为是安全的。

这是当前提供的方法中最安全的一种,但是旧的客户端库不支持这种方法。

md5
方法md5使用一种自定义的安全性较低的挑战-响应机制。它能防止口令嗅探并且防止口令在服务器上以明文存储,但是无法保护攻击者想办法从服务器上窃取了口令哈希的情况。此外,现在认为MD5哈希算法对于确定攻击已经不再安全。

md5方法不能与db_user_namespace特性一起使用。

为了简化从md5方法到较新的SCRAM方法的转变,如果在pg_hba.conf中指定了md5但是用户在服务器上的口令是为SCRAM(见下文)加密的,则将自动选择基于SCRAM的认证。

password
方法password以明文形式发送口令,因此它对于口令“嗅探”攻击很脆弱。如果可能应该尽量避免使用它。不过,如果连接被SSL加密保护着,那么可以安全地使用password(不过如果依靠SSL,SSL证书认证可能是更好的选择)。

PostgreSQL数据库口令独立于操作系统用户口令。每个数据库用户的口令被存储在pg_authid系统目录中。口令可以用 SQL 命令CREATE USER和ALTER ROLE管理,例如CREATE ROLE foo WITH LOGIN PASSWORD 'secret’或者psql的\password命令。如果没有为一个用户设置口令,那么存储的口令为空并且对该用户的口令认证总会失败。

不同的基于口令的认证方法的可用性取决于用户的口令在服务器上是如何被加密(或者更准确地说是哈希)的。这由设置口令时的配置参数password_encryption控制。如果口令使用scram-sha-256设置加密,那么它可以被用于认证方法scram-sha-256和password(但后一种情况中口令将以明文传输)。如上所释,在这种情况下,指定的认证方法md5将自动切换到使用scram-sha-256方法。如果口令使用md5设置加密,那么它仅能用于md5和password认证方法说明(同样,后一种情况中口令以明文传输)。(之前的PostgreSQL发行版支持在服务器上存储明文口令。现在已经不可能了)。要检查当前存储的口令哈希,可以参考系统目录pg_authid。

要把现有的安装从md5升级到scram-sha-256,可以在确保所有在用的客户端已经足以支持SCRAM之后,在postgresql.conf中设置password_encryption = ‘scram-sha-256’,然后让所有用户设置新口令并且在pg_hba.conf中将认证方法说明改为scram-sha-256.

参考:
http://postgres.cn/docs/11/auth-pg-hba-conf.html
http://postgres.cn/docs/11/auth-password.html

文章知识点与官方知识档案匹配,可进一步学习相关知识
PostgreSQL技能树首页概览4111 人正在系统学习中

与[转帖]pg_hba.conf 中 md5 和 scram-sha-256 的区别相似的内容:

[转帖]pg_hba.conf 中 md5 和 scram-sha-256 的区别

db: postgresql 11 auth-method 指定当一个连接匹配这个记录时,要使用的认证方法。下面对可能的选择做了概述,详见第 20.3 节。 trust 无条件地允许连接。这种方法允许任何可以与PostgreSQL数据库服务器连接的用户以他们期望的任意PostgreSQL数据库用户身

[转帖]postgresql 的 pg_hba.conf 的行记录顺序

postgresql: 9.6 一直觉得 pg_hba.conf 的行记录与顺序无关,遵循细化优先的规则。今天在回顾 pg_hba.conf 文档时发现这种认识是错的。 下面这段话是从文档拷贝过来的: 因为每一次连接尝试都会顺序地检查pg_hba.conf记录,所以这些记录的顺序是非常关键的。通常,

[转帖]PG网络传输安全SSL介绍及使用示例

PG网络传输安全SSL介绍及使用示例 https://www.cnblogs.com/cqdba/p/16550937.html 目录 SSL 概念介绍 1.1 SSL介绍 1.2 openssl 的req 参数说明 1.3 SSL 请求模式说明 1.4密码套件类别 SSL 类型介绍 2.1自签名私

[转帖]PG-用户|角色管理

https://www.cnblogs.com/binliubiao/p/14415203.html 1. 角色 ​ 决定发起连接的命令的初始访问权限。在PG中,角色和用户相当于是一样的对象。区别在于创建角色时是否又Login权限。 1.1 创建角色 CREATE ROLE name; postgr

[转帖]PG Exporter

http://v0.pigsty.cc/zh/docs/reference/kernel-optimize/ Exporter https://github.com/Vonng/pg_exporter 完全自研的 pg_exporter, 用于收集postgres与pgbouncer的指标: 支持P

[转帖]Oracle、MySQL、PG是如何处理数据库“半页写”的问题的?

数据库“断页”是个很有意思的话题,目前任何数据库应该都绕不过去。我们知道数据库的块大小一般是8k、16k、32k,而操作系统块大小是4k,那么在数据库刷内存中的数据页到磁盘上的时候,就有可能中途遭遇类似操作系统异常断电而导致数据页部分写的情况,进而造成数据块损坏,数据块损坏对于某些数据库是致命的,可

[转帖]人大金仓和PG的关系

作者:山抹微云链接:https://www.zhihu.com/question/582960448/answer/2997151260来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 只针对人大金仓的集中式关系数据库kes86: 结论:kes86应该是人大金仓对pg进

[转帖]源码安装postgresql13+uuid-ossp+pg_pathman

https://www.jianshu.com/p/5331ad46861a 系统版本:Centos7.8 数据库版本:postgresql-13.6 pg_pathman版本:1.5.12 所有文件下载地址:链接:https://pan.baidu.com/s/1XvMk_q4WCtb0rImTq

[转帖]PostgreSQL WAL日志清理

https://www.modb.pro/db/65309 pg_archivecleanup -d $PGDATA/pg_wal `pg_controldata $PGDATA |grep "REDO WAL" |awk '{print $6}'` 作者:崔鹏,曾获得中国PostgreSQL数据库

[转帖]PostgreSQL数据加载工具之pg_bulkload

https://www.jianshu.com/p/b576207f2f3c 1. pg_bulkload介绍 PostgreSQL提供了一个copy命令的便利数据加载工具,copy命令源于PostgreSQL数据库,copy命令支持文件与表之间的数据加载和表对文件的数据卸载。pg_bulkload