本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 SCRAM 進行 PostgreSQL 密碼加密
Salted Challenge Response Authentication Mechanism (SCRAM) 是 PostgreSQL 預設訊息摘要 (MD5) 演算法的替代選項,用於加密密碼。SCRAM 身分驗證機制被認為比 MD5 更安全。若要進一步了解這兩種不同的密碼保護方法,請參閱 PostgreSQL 文件中的 Password Authentication
建議您使用 SCRAM 作為 Aurora PostgreSQL 資料庫叢集的密碼加密配置,而不是使用 MD5。Aurora PostgreSQL 第 10 版和所有較高的主要和次要版本都支援 SCRAM。這是一種加密的挑戰回應機制,使用 scram-sha-256 演算法進行密碼身分驗證和加密。
您可能需要更新程式庫,用戶端應用程式才會支援 SCRAM。例如,42.2.0 之前的 JDBC 版本不支援 SCRAM。如需詳細資訊,請參閱 PostgreSQL JDBC 驅動程式文件中的 PostgreSQL JDBC Driver
Aurora PostgreSQL 14 版和更新版本預設支援 scram-sha-256 用於新資料庫叢集的密碼加密。對於這些版本,預設資料庫叢集參數群組 (default.aurora-postgresql14
) password_encryption
的值設定為 scram-sha-256。不支援 SCRAMAurora Serverless v1。
設定 Aurora PostgreSQL 資料庫叢集為需要 SCRAM
對於 Aurora PostgreSQL 14.3 和更新版本,您可以要求 Aurora PostgreSQL 資料庫叢集僅接受使用 scram-sha-256 演算法的密碼。
重要
對於 PostgreSQL 資料庫的現有 RDS 代理,如果您將資料庫驗證修改為僅使用 SCRAM
,則該代理會變成無法使用,最多持續 60 秒。若要避免發生此問題,請執行下列其中一項:
確定資料庫同時允許
SCRAM
和MD5
身分驗證。若只要使用
SCRAM
身分驗證,請建立新代理、將應用程式流量遷移至新代理,然後刪除先前與資料庫相關聯的代理。
在對系統進行變更之前,請確保您了解完整過程,如下所示:
獲得所有資料庫使用者的所有角色與密碼加密相關資訊。
針對控制密碼加密的參數,再次檢查 Aurora PostgreSQL 資料庫叢集的參數設定。
如果您的 Aurora PostgreSQL 資料庫叢集使用預設參數群組,則需要建立自訂資料庫叢集參數群組,並將其套用到 Aurora PostgreSQL 資料庫叢集,讓您可以在需要時修改參數。如果您的 Aurora PostgreSQL 資料庫叢集使用自訂參數群組,則您稍後可以視需要在過程中修改必要參數。
-
將
password_encryption
參數變更為scram-sha-256
。 -
通知所有資料庫使用者他們必須更新密碼。針對您的
postgres
帳戶進行相同的動作。系統會使用 scram-sha-256 演算法加密與儲存新密碼。 驗證確認使用加密類型將所有密碼加密。
-
如果所有密碼都使用 scram-sha-256,您可以將
rds.accepted_password_auth_method
參數從md5+scram
變更為scram-sha-256
。
警告
在您僅將 rds.accepted_password_auth_method
變更為 scram-sha-256 後,則任何具有 md5
加密密碼的使用者 (角色) 將無法連線。
讓您的 Aurora PostgreSQL 資料庫叢集準備好需要 SCRAM
對 Aurora PostgreSQL 資料庫叢集進行任何變更之前,請檢查所有現有的資料庫使用者帳戶。另外,請檢查用於密碼的加密類型。您可以使用 rds_tools
擴充功能執行這些任務。若要查看哪些 PostgreSQL 版本支援 rds_tools
,請參閱 Amazon RDS for PostgreSQL 的延伸版本。
獲得資料庫使用者 (角色) 與密碼加密方法清單
使用
psql
連線至 Aurora PostgreSQL 資料庫叢集上的主要執行個體 ,如下所示。psql --host=
cluster-name-instance-1.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --password安裝
rds_tools
擴充功能。postgres=>
CREATE EXTENSION rds_tools;
CREATE EXTENSION
取得角色和加密清單。
postgres=>
SELECT * FROM rds_tools.role_password_encryption_type();您會看到類似下列的輸出。
rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | md5 user_465 | md5 postgres | md5 (8 rows)
建立自訂資料庫叢集參數群組
注意
如果您的 Aurora PostgreSQL 資料庫叢集已使用自訂參數群組,則不需要建立新的群組。
如需 Aurora 的參數群組概觀,請參閱 在 Amazon Aurora 中建立資料庫叢集參數群組。
用於密碼的密碼加密類型是在某一個參數 (亦即 password_encryption
) 中設定的。Aurora PostgreSQL 資料庫叢集允許的加密則是在另一個參數 (亦即 rds.accepted_password_auth_method
) 中設定的。若要從這些預設值變更,則需要您建立自訂資料庫叢集參數群組,並套用到您的叢集。
您也可以使用 AWS Management Console 或 RDS API 來建立自訂資料庫叢集參數群組。如需詳細資訊,請參閱 在 Amazon Aurora 中建立資料庫叢集參數群組。
您可以使用資料庫執行個體與自訂參數群組建立關聯。
建立自訂資料庫叢集參數群組
使用
create-db-cluster-parameter-group
CLI 命令以建立叢集的自訂參數群組。以下範例使用aurora-postgresql13
作為此自訂參數群組的來源。對於 Linux、 macOS或 Unix:
aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name '
docs-lab-scram-passwords
' \ --db-parameter-group-family aurora-postgresql13 --description 'Custom DB cluster parameter group for SCRAM
'在 Windows 中:
aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name "
docs-lab-scram-passwords
" ^ --db-parameter-group-family aurora-postgresql13 --description "Custom DB cluster parameter group for SCRAM
"現在您可以將自訂參數群組與叢集建立關聯。
使用
modify-db-cluster
CLI 命令將此自訂參數群組套用至您的 Aurora PostgreSQL 資料庫叢集。對於 Linux、 macOS或 Unix:
aws rds modify-db-cluster --db-cluster-identifier '
your-instance-name
' \ --db-cluster-parameter-group-name "docs-lab-scram-passwords
在 Windows 中:
aws rds modify-db-cluster --db-cluster-identifier "
your-instance-name
" ^ --db-cluster-parameter-group-name "docs-lab-scram-passwords
若要重新同步 Aurora PostgreSQL 資料庫叢集與自訂資料庫叢集參數群組,以及 ,請重新啟動叢集的主要與所有其他執行個體。
設定密碼加密以使用 SCRAM
Aurora PostgreSQL 資料庫叢集使用的密碼加密機制是在資料庫叢集參數群組的 password_encryption
參數中設定的。允許的值為未設定、md5
或 scram-sha-256
。預設值視 Aurora PostgreSQL 版本而定,如下所示:
Aurora PostgreSQL 14 – 預設值為
scram-sha-256
Aurora PostgreSQL 13 – 預設值為
md5
透過將自訂資料庫叢集參數群組連接至 Aurora PostgreSQL 資料庫叢集,您可以修改密碼加密參數的值。

將密碼加密設定變更為 scram-sha-256
將密碼加密的值變更為 scram-sha-256,如下所示。變更會立即套用,因為參數是動態的,因此不需要重新啟動即可使變更生效。
對於 Linux、 macOS或 Unix:
aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name \ 'docs-lab-scram-passwords' --parameters 'ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate'
在 Windows 中:
aws rds modify-db-parameter-group --db-parameter-group-name ^ "docs-lab-scram-passwords" --parameters "ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate"
將使用者角色的密碼遷移至 SCRAM
您可以將使用者角色的密碼遷移至 SCRAM,如下說明:
將資料庫使用者 (角色) 密碼從 MD5 遷移至 SCRAM
以管理員使用者身分 (預設使用者名稱
postgres
) 登入,如下所示。psql --host=
cluster-name-instance-1.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --password使用下列命令檢查 RDS for PostgreSQL 資料庫執行個體上
password_encryption
參數的設定。postgres=>
SHOW password_encryption;
password_encryption --------------------- md5 (1 row)
將此參數的值變更為 scram-sha-256。這是動態參數,因此您在進行此變更之後不需要重新啟動執行個體。再次檢查該值以確定它現在已設定為
scram-sha-256
,如下所示。postgres=>
SHOW password_encryption;
password_encryption --------------------- scram-sha-256 (1 row)
通知所有資料庫使用者變更自己的密碼。務必亦為帳戶
postgres
(具有rds_superuser
權限的資料庫使用者) 變更您自己的密碼。labdb=>
ALTER ROLE postgres WITH LOGIN PASSWORD 'change_me';ALTER ROLE
對 Aurora PostgreSQL 資料庫叢集上所有的資料庫重複此程序。
變更參數為需要 SCRAM
這是程序中的最後一個步驟。在以下程序中進行變更後,仍然使用 md5
將密碼加密的任何使用者帳戶 (角色) 將無法登入 Aurora PostgreSQL 資料庫叢集。
rds.accepted_password_auth_method
指定 Aurora PostgreSQL 資料庫叢集在登入程序期間接受的使用者密碼加密方法。預設值為 md5+scram
,這意味著任何一種方法都接受。在下圖中,您可以找到此參數的預設設定。

此參數的允許值為 md5+scram
或僅 scram
。將此參數值變更為 scram
會使此成為一個需求。
將參數值變更為需要對密碼進行 SCRAM 身分驗證
確認 Aurora PostgreSQL 資料庫叢集上所有資料庫的所有資料庫使用者密碼使用
scram-sha-256
進行密碼加密。若要這麼做,請向rds_tools
查詢角色 (使用者) 和加密類型,如下所示。postgres=>
SELECT * FROM rds_tools.role_password_encryption_type();
rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | scram-sha-256 user_465 | scram-sha-256 postgres | scram-sha-256 ( rows)
針對您的 Aurora PostgreSQL 資料庫叢集中所有的資料庫執行個體重複此查詢。
如果所有密碼都使用 scram-sha-256,您可以繼續進行。
將接受的密碼身分驗證值變更為 scram-sha-256,如下所示。
對於 Linux、 macOS或 Unix:
aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name 'docs-lab-scram-passwords' \ --parameters 'ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate'
在 Windows 中:
aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name "docs-lab-scram-passwords" ^ --parameters "ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate"