專業只做數據庫實訓和認證的品牌機構

微信公眾號新浪微博
免費咨詢電話:400-0909-964
當前位置: 網站首頁 > postgresql > 教程 > PostgreSQL培訓:V10用戶密碼認證及加密算法scram-sha-256

PostgreSQL培訓:V10用戶密碼認證及加密算法scram-sha-256

文章來源: 更新時間:2020/6/16 11:18:14

在線老師點擊咨詢:

最新學訊:近期OCP認證正在報名中,因考試人員較多請盡快報名獲取最近考試時間,報名費用請聯系在線老師,甲骨文官方認證,報名從速!

我要咨詢

官方手冊關于用戶密碼的表述如下:

PostgreSQL數據庫口令獨立于操作系統用戶口令。每個數據庫用戶的口令被存儲在pg_authid系統目錄中。

口令可以用 SQL 命令CREATE USER和ALTER ROLE管理,例如CREATE USER foo WITH PASSWORD 'secret', 或者psql命令\password。如果沒有為一個用戶設置口令,那么存儲的口令為空并且對該用戶的口令認證總會失敗。

不同的基于密碼的身份驗證方法的可用性取決于用戶的密碼在服務器上是如何加密的 (或更準確地說是哈希)。

這是在設置密碼時由配置參數 password_encryption(默認值)控制的。

如果使用 scram-sha-256設置對密碼進行了加密, 那么它可以用于身份驗證方法scram-sha-256和password (但在后一種情況下密碼傳輸將以純文本形式)。如上所述, 認證方法規范md5會自動切換到使用scram-sha-256方法, 所以它也可以工作。

如果密碼是使用md5設置加密的, 那么它只能用于md5和password認證方法規范 (同樣,在后一種情況下用明文傳輸密碼)。

(以前的PostgreSQL版本支持以純文本格式在服務器上存儲密碼,這已不再可行。) 要查看當前存儲的密碼哈希值,請查看系統目錄pg_authid。

在確保所有正在使用的客戶端庫足夠新以支持SCRAM后, 要將現有安裝從md5升級到scram-sha-256, 在postgresql.conf中設置 password_encryption = 'scram-sha-256', 讓所有用戶設置新密碼,并將pg_hba.conf 中的認證方法聲明更改為scram-sha-256。

以下進行試驗驗證

在PG V10.3環境進行驗證如下內容

1. 按默認參數配置新創建用戶,將會以md5加密的形式存放到pg_user表中。

默認參數配置 password_encryption=md5

[postgres@db1 data]$ createuser  u6 -W
Password:    #輸入密碼
  
postgres=# create user u7 password 'Password@app';
CREATE ROLE
  
postgres=# select * from pg_authid where rolname='u7';
 rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | 
rolconnlimit |             rolpassword             | rolvaliduntil 
---------+----------+------------+---------------+-------------+-------------+----------------+--------------+-
-------------+-------------------------------------+---------------
 u7      | f        | t          | f             | f           | t           | f              | f            | 
          -1 | md52ff22216c0d97fc881437cea333277c9 |

#會話級別修改用戶角色密碼加密算法

postgres=# set password_encryption to "scram-sha-256"; 
SET
postgres=# show password_encryption ;
 password_encryption 
---------------------
 scram-sha-256
(1 row)
  
postgres=# create user u8 password 'Password@app';
CREATE ROLE
  
postgres=#  select * from pg_authid where rolname='u8';
 rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | 
rolconnlimit |                                                              rolpassword                        
                                      | rolvaliduntil 
---------+----------+------------+---------------+-------------+-------------+----------------+--------------+-
-------------+-------------------------------------------------------------------------------------------------
--------------------------------------+---------------
 u8      | f        | t          | f             | f           | t           | f              | f            | 
          -1 | SCRAM-SHA-256$4096:TZbsCC/eQxS2Iso+g/lTcg==$OLz+2ysTOp6yTxJ3GWciRyu5ktbRNP3gOM4tiHFFEaM=:7z9pTYY
DQsMh5LTJtPCIZm7bPhuWejVjDECe/LRdVzA= | 
  
#修改pg_hba.conf 本地連接的method方法為md5 
# TYPE  DATABASE        USER            ADDRESS                 METHOD
  
# "local" is for Unix domain socket connections only
local   all             all                                    md5
  
#執行以下指令使修改生效
pg_ctl reload
  
  
分別用u7 u8用戶連接數據庫測試,結果是可以正常連接!
  
  
#修改pg_hba.conf 本地連接的method方法為scram-sha-256
# TYPE  DATABASE        USER            ADDRESS                 METHOD
  
# "local" is for Unix domain socket connections only
local   all             all                                   scram-sha-256 
  
#執行以下指令使修改生效
pg_ctl reload


分別用u7、 u8用戶連接數據庫測試,測試結果為u7不能連接;u8用戶連接正常。

[postgres@db1 data]$ psql -U u7
Password for user u7: 
psql: FATAL:  password authentication failed for user "u7"
[postgres@db1 data]$ psql -U u8
Password for user u8: 
psql (10.3)
Type "help" for help.
  
postgres=>

證明了用戶密碼用md5加密存儲,如果用連接認證使用scram-sha-256,將會連接受限。

解決方法是重新修改密碼用md5加密的用戶的密碼,使用新的認證加密算法scram-sha-256。

#修改pg_hba.conf 本地連接的method方法為scram-sha-256

# TYPE DATABASE USER ADDRESS trust

#以postgres用戶執行以下指令使修改生效

pg_ctl reload
  
postgres=# show password_encryption 
postgres-# ;
 password_encryption 
---------------------
 scram-sha-256
(1 row)
  
postgres=# alter user u7 password 'Password@app';
ALTER ROLE
postgres=# select * from pg_authid where rolname ='u7';
 rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolbypassrls | 
rolconnlimit |                                                              rolpassword                        
                                      | rolvaliduntil 
---------+----------+------------+---------------+-------------+-------------+----------------+--------------+-
-------------+-------------------------------------------------------------------------------------------------
--------------------------------------+---------------
 u7      | f        | t          | f             | f           | t           | f              | f            | 
          -1 | SCRAM-SHA-256$4096:ulZwjxU4EwJ/hE2ymuoXXA==$4lEaJUNg4e5WabH+jRu0LBo97UFjCjWtuu0IKpoJyjg=:SK9jv1Z
+1QCgl2EAWtL0LN2xAYpRyWBAYYvU5wA+Agw= | 
(1 row)
  
postgres=#

再次通過修改pg_hba.conf的認證方法為SCRAM-SHA-256后,u7用戶連接數據庫正常。

#修改pg_hba.conf 本地連接的method方法為scram-sha-256
# TYPE  DATABASE        USER            ADDRESS                 METHOD
  
# "local" is for Unix domain socket connections only
local   all             all                                   scram-sha-256

#執行以下指令使修改生效

 [postgres@db1 data]$ pg_ctl reload
server signaled
[postgres@db1 data]$ 
[postgres@db1 data]$ psql -U u7 
Password for user u7:   #手動輸入密碼Password@app
psql (10.3)
Type "help" for help.
  
postgres=>

小結:如果數據庫版本升級到PG V10,處于安全考慮認證及加密方式修改為scram-sha-256后,需要考慮兩個地方:

1)原來用戶的密碼重新按先的加密方法進行修改;

2)保證客戶端支持新的認證方法(本節沒有驗證)。

本文地址:http://www.nicesm.com/postgresql/jiaocheng/24852709648.html 轉載請注明!


在線預約 搶先報名 獲取課程排期

Oracle培訓機構

金牌講師<>

冉乃綱-老師CUUG金牌講師
冉老師 CUUG金牌講師 Oracle及RedHat高級講師、Unix/Linux 資深專家...[詳細了解老師]

免費咨詢上課流程 客服在線中

陳衛星-老師CUUG金牌講師
陳老師 CUUG金牌講師 精通Oracle管理、備份恢復、性能優化 11年Ora...[詳細了解老師]

免費咨詢上課流程 客服在線中

選學校如何選擇適合自己的學校

CUUG -CHINA UNIX USER GROUP,是國際UNIX組織UNIFORUM的中國代表,是國內悠久的專業UNIX培訓機構,被譽為中國UNIX 的搖籃。多年來,以提高教學質量為本,強調素質教育,積極引進、消化國外的新技術,有效的結合中國....[詳情]

一站式服務(從入學到就業一幫到底)

入學

學習

就業

實操

食宿
關閉
海淀校區:北京市海淀區紫竹園路88號紫竹花園D座703(CUUG)
課程咨詢:010-59426307 010-59426319 400-0909-964
企業服務:139 1050 4818(劉經理)
部分信息來源于網絡,如有錯誤請聯系指正!
微信:聞老師
微信:于老師
版權所有@北京神腦資訊技術有限公司 (CUUG,中國UNIX用戶協會) Copyright 2016 ALL Rights Reserved 京ICP備11008061號-1