Ami*_*eza 9 authentication postgresql
我正在使用postgresql
并且作为学习的一部分,我尝试更改登录方法以获得更安全的登录方法。例如使用scram-sha-256
而不是md5
. 我尝试将我的文件更改为,password_encryption
并将方法更改为,您可以在下面的配置中看到更改:scram-sha256
postgresql.conf
pg_hba.conf
scram-sha-256
# - Authentication -
#authentication_timeout = 1min # 1s-600s
password_encryption = scram-sha-256 # md5 or scram-sha-256
#db_user_namespace = off
and
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
Run Code Online (Sandbox Code Playgroud)
然后重新启动服务器后,cmd
当出现以下错误时,我尝试使用登录:
C:\Users\amir>psql -U postgres postgres
Password for user postgres:
psql: error: could not connect to server: FATAL: password authentication failed for user "postgres"
Run Code Online (Sandbox Code Playgroud)
md5
我可以通过将所有内容更改为方法并忽略password_encryption
文件来解决问题postgresql.conf
。我该如何解决这个问题?我是否必须将配置更改为默认值,然后尝试创建用户并为其分配加密密码。
每个用户密码散列都保存在表中pg_authid
。它包括用于将密码转换为其哈希值的哈希算法。
在 postgresql.conf 中设置时password_encryption
,您正在设置默认加密,即创建用户或(重新)设置密码时使用的加密。该表pg_authid
未更新。
当更改 pg_hba.conf 时,您是说仅接受使用给定方法散列的密码。该表pg_authid
未更新。
文档中有一个重要注释:
为了方便从 md5 方法到较新的 SCRAM 方法的转换,如果在 pg_hba.conf 中将 md5 指定为方法,但服务器上的用户密码已针对 SCRAM 进行加密(见下文),则将自动选择基于 SCRAM 的身份验证
所以解决办法是
postgres
使用新密码加密升级服务的最佳方法是:
1.使用“ssh”连接到您的服务器或打开终端。
\n2.更改password_encryption
参数
编辑postgresql.conf
并更改password_encryption
为
password_encryption = scram-sha-256\n
Run Code Online (Sandbox Code Playgroud)\n注意:确保删除#
行开头的哈希值。然后通过运行以下命令重新加载服务器:
sudo systemctl restart postgresql.service\n
Run Code Online (Sandbox Code Playgroud)\n另一种选择是:
\nsudo service postgresql restart\n
Run Code Online (Sandbox Code Playgroud)\n另一种选择是:
\npg_ctl reload -D <data-dir-path>\n
Run Code Online (Sandbox Code Playgroud)\n其中<data-dir-path>
是 PostgreSQL 数据目录。
另外,您可以使用以下命令运行此 SQL 语句psql
:
SELECT pg_reload_conf();\n
Run Code Online (Sandbox Code Playgroud)\n2.A. 现在切换到postgres
用户并运行psql
sudo -u postgres psql\n
Run Code Online (Sandbox Code Playgroud)\n2.B. 然后,查看日志文件以查看重新加载是否成功,并通过 SQL 检查新值:
\nSHOW password_encryption;\n
Run Code Online (Sandbox Code Playgroud)\n请注意,即使您更改了参数,只要将身份验证方法设置pg_hba.conf
为 md5,旧的 MD5 密码仍然有效。
设置password_encryption
in时postgresql.conf
,您正在设置默认加密(即创建用户或重新设置密码时使用的加密)。该表pg_authid
未更新。
更改时pg_hba.conf
,您是说仅接受使用给定方法散列的密码。该表pg_authid
也未更新。
3.重新设置密码
\n所有通过密码验证的用户都必须更改其密码。在 psql 中,超级用户可以更改任何用户\xe2\x80\x99s 的密码
\n\\password <user>\n
Run Code Online (Sandbox Code Playgroud)\n即使用户设置与以前相同的密码,该密码现在也将使用 进行哈希处理SHA-256
。在继续下一步之前,请检查该表pg_authid
并确保它不再包含 MD5 哈希密码。
SELECT\n rolname, rolpassword ~ \'^SCRAM-SHA-256\\$\' AS has_upgraded\nFROM pg_authid\nWHERE rolcanlogin;\n
Run Code Online (Sandbox Code Playgroud)\n此查询查找具有LOGIN
权限的用户(即他们可以登录到您的 PostgreSQL 集群)并确定他们的密码是否仍然存在于PostgreSQL-style MD5
哈希中。如果has_upgraded
是FALSE
,则用户需要重新哈希其密码。
归档时间: |
|
查看次数: |
22786 次 |
最近记录: |