暂无图片
暂无图片
7
暂无图片
暂无图片
1
暂无图片

PostgreSQL中使用scram-sha-256认证

原创 贺晓群 2020-11-10
12536

PostgreSQL10版本开始提供了基于SCRAM-SHA-256密码认证方法。在以前的版本中使用MD5认证方法,使用自定义安全性较低的challenge-response机制。 它可以防止密码嗅探,并避免以纯文本形式将密码存储在服务器上, 但如果攻击者设法从服务器窃取密码的哈希值,则无法再提供保护。此外,MD5哈希算法现在不再被认为对于确定的攻击是安全的。如RRFC 7677中所述, 方法scram-sha-256执行SCRAM-SHA-256认证。可防止密码在不可信连接上嗅探,并支持以密码散列的形式将密码存储在服务器上, 这种形式被认为是安全的。对于新上的实例建议直接使用SCRAM-SHA-256密码认证方法(initdb时指定auth为scram-sha-256),但是对于从MD5升级上来的实例稍微麻烦一点,下面主要列举MD5到SCRAM-SHA-256升级操作步骤:

1. 前提条件

  • 首先确保PostgreSQL实例版本是10及以上版本
postgres=# SELECT version();
                                                 version                                                 
---------------------------------------------------------------------------------------------------------
 PostgreSQL 13.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)
复制
  • 连接PostgreSQL数据库的驱动有SCRAM兼容性。PostgreSQL社区已经提供了一个驱动列表,请检查你的客户端驱动是否已支持SCRAM。

2. 配置pg_hba.conf认证

pg_hba.conf配置文件决定了你的客户端怎么连接到PostgreSQL实例,基于升级到SCRAM的目的,请确保你的密码认证方法已经设置为md5,这里估计有人不明白,明明我们现在要把认证方式升级为scram-sha-256,为什么还把认证方式设置为md5呢?PG为了简化从md5方法到新的SCRAM方法的转换,如果在pg_hba.conf中将认证方法设置为md5,但服务器上用户的密码是SCRAM加密的,PG会自动选择基于SCRAM的认证,这样就给到了一个过渡时间,到后面第五步密码全部升级完后再把认证方式修改为scram-sha-256。

#TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 md5

3. 修改password_encryption参数

password_encryption参数决定了密码怎么被hash。默认为md5,修改为scram-sha-256,步骤如下:

--查询当前参数值
postgres=# SELECT name,setting,source,enumvals FROM pg_settings WHERE name = 'password_encryption';
        name         | setting |   source  |      enumvals       
---------------------+---------+-----------+---------------------
 password_encryption | md5     | default   | {md5,scram-sha-256}
(1 row)
--修改参数
postgres=# ALTER SYSTEM SET password_encryption TO 'scram-sha-256';
ALTER SYSTEM
--修改此产生需要重新加载配置
postgres=# SELECT pg_reload_conf();
 pg_reload_conf 
----------------
 t
(1 row)
--修改后参数值
postgres=# SELECT name,setting,source,enumvals FROM pg_settings WHERE name = 'password_encryption';
        name         |    setting    |      source        |      enumvals       
---------------------+---------------+--------------------+---------------------
 password_encryption | scram-sha-256 | configuration file | {md5,scram-sha-256}
(1 row)
复制

4. 查询需要升级密码的用户

查询出哪些还没有升级密码的用户,在下面步骤进行密码升级

postgres=# SELECT rolname FROM pg_authid WHERE rolcanlogin AND rolpassword !~ '^SCRAM-SHA-256\$';
 rolname 
---------
 test
 test1
 test2
(3 rows)
复制

5. 密码升级

使用\password修改密码,系统将提示您输入新密码。此新密码将转换为SCRAM验证程序,并且此用户的升级将完成。这个命令会提示要求输入新口令、对口令加密然后把加密后的口令作为一个ALTER ROLE命令发送到服务器。这确保新口令不会以明文的形式出现在命令历史、服务器日志或者其他地方。不建议直接使用ALTER ROLE进行修改。

--修改密码
postgres=# \password test
Enter new password: 
Enter it again: 
--test的密码已不在下面结果中,代表升级完成
postgres=# SELECT rolname FROM pg_authid WHERE rolcanlogin AND rolpassword !~ '^SCRAM-SHA-256\$';
 rolname 
---------
 test1
 test2
(2 rows)
--加密后hash值如下
postgres=# SELECT rolname,rolpassword FROM pg_authid WHERE rolcanlogin;
 rolname |                                                              rolpassword                                                              
---------+---------------------------------------------------------------------------------------------------------------------------------------
 test1   | md5********************************
 test2   | md5********************************
 test    | SCRAM-SHA-256$4096:OU+ksv2lqF3Hk70cazGf6Q==$L6bD7XY5EsUl+VIn/KVP3cfzns4+AUrSRbtJ4+SGObs=:BPkXFJ+15/n+KLekj04FpBjMHH7Z1mYfA66/dHUfyN0=
(3 rows)
复制

6. 重配置pg_hba.conf认证

一旦所有密码都升级,需要更新pg_hba.conf配置,并将所有使用md5的条目修改为scram-sha-256

--以下查询语句返回0条,代表所有密码已升级
postgres=# SELECT rolname FROM pg_authid WHERE rolcanlogin AND rolpassword !~ '^SCRAM-SHA-256\$';
 rolname 
---------
(0 rows)
--修改完配置需要reload配置
postgres=# SELECT pg_reload_conf();
 pg_reload_conf 
----------------
 t
(1 row)
复制

#TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 scram-sha-256

至此所有的PostgreSQL用户账户都已经升级为使用SCRAM进行身份验证!

最后修改时间:2020-11-13 08:39:35
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
4人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

筱悦星辰
暂无图片
1年前
评论
暂无图片 1
一路坚持、一路收获,一切都会有最好的结果。
1年前
暂无图片 1
评论