20.5. 密码验证

有几种基于密码的身份验证方法。这些方法的操作类似,但是在用户密码存储在服务器上的方式以及如何通过连接发送 Client 端提供的密码方面有所不同。

这是当前提供的方法中最安全的方法,但是较旧的 Client 端库不支持此方法。

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

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

PostgreSQL 数据库密码与 os 用户密码分开。每个数据库用户的密码存储在pg_authid系统目录中。可以使用 SQL 命令CREATE ROLEALTER ROLE,例如 CREATE ROLE foo WITH LOGIN PASSWORD 'secret' 或 psql 命令\password来 Management 密码。如果未为用户设置密码,则存储的密码为 null,并且该用户的密码身份验证将始终失败。

不同的基于密码的身份验证方法的可用性取决于服务器上用户密码的加密方式(或更准确地说,是散列的)。设置密码时,此设置由配置参数password_encryption控制。如果使用scram-sha-256设置对密码进行了加密,则可以将其用于scram-sha-256password身份验证方法(但在后一种情况下,密码将以纯文本格式传输)。如上所述,在这种情况下,身份验证方法规范md5将自动切换为使用scram-sha-256方法,因此它也将起作用。如果使用md5设置对密码进行了加密,则该密码只能用于md5password身份验证方法规范(同样,密码在后一种情况下以纯文本格式传输)。 (以前的 PostgreSQL 版本支持将密码以纯文本格式存储在服务器上.这不再可能.)要检查当前存储的密码哈希,请参见系统目录pg_authid

在确保所有正在使用的 Client 端库足够新以支持 SCRAM 之后,要将现有安装从md5升级到scram-sha-256,请在postgresql.conf中设置password_encryption = 'scram-sha-256',让所有用户设置新密码,并将pg_hba.conf的身份验证方法规范更改为scram-sha-256

上一章 首页 下一章