Salted Challenge Response Authentication Mechanism (SCRAM) 為以密碼為基礎的相互驗證通訊協定。 這是一種質詢-回應方案,可增加多層安全性,並防止在不受信任的連線上嗅探密碼。 SCRAM 支援以密碼編譯雜湊形式,將密碼儲存在伺服器上,以提供進階安全性。
備註
若要使用 SCRAM 驗證方法來存取「適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器」執行個體,您的用戶端程式庫必須支援 SCRAM。 請參閱支援 SCRAM 的驅動程式清單。
SCRAM 驗證會對您的應用程式伺服器造成額外的運算負載,因為每次驗證都需要計算用戶端證明。 可以透過限制應用程式連線集區中的連線數 (減少應用程式中的通訊量) 或限制用戶端允許的並行交易數 (更大的交易數) 來減輕 SCRAM 引入的效能額外負荷。 建議在移轉至 SCRAM 驗證之前先測試您的工作負載。
設定 SCRAM 驗證
將 password_encryption 變更為 SCRAM-SHA-256。 目前,適用於 PostgreSQL 的 Azure 資料庫僅支援使用 SHA-256 的 SCRAM。
允許 SCRAM-SHA-256 作為驗證方法。
這很重要
您可以只選取 SCRAM-SHA-256 方法,只選擇強制執行 SCRAM 驗證。 如此一來,具有 MD5 驗證的使用者能與伺服器連線更久。 因此,在強制執行 SCRAM 之前,您需要同時使用 MD5 和 SCRAM-SHA-256 作為驗證方法,直到將所有使用者密碼更新為 SCRAM-SHA-256 為止。 您可以使用在步驟 #7 中所述的查詢,以驗證使用者的驗證類型。
儲存變更。 這些為動態屬性,不需要將伺服器重新開機。
從您的「適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器」用戶端連線到「適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器」執行個體。 例如,
psql "host=myPGServer.postgres.database.azure.com port=5432 dbname=postgres user=myDemoUser password=<password> sslmode=require" psql (12.3 (Ubuntu 12.3-1.pgdg18.04+1), server 12.6) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help.驗證密碼加密。
postgres=> show password_encryption; password_encryption --------------------- scram-sha-256 (1 row)接著,您就能更新使用者的密碼。
postgres=> \password myDemoUser Enter new password: Enter it again: postgres=>您可以使用
azure_roles_authtype()函數來驗證使用者的驗證類型。postgres=> SELECT * from azure_roles_authtype(); rolename | authtype ---------------------------+----------- azuresu | NOLOGIN pg_monitor | NOLOGIN pg_read_all_settings | NOLOGIN pg_read_all_stats | NOLOGIN pg_stat_scan_tables | NOLOGIN pg_read_server_files | NOLOGIN pg_write_server_files | NOLOGIN pg_execute_server_program | NOLOGIN pg_signal_backend | NOLOGIN replication | NOLOGIN myDemoUser | SCRAM-256 azure_pg_admin | NOLOGIN srtest | SCRAM-256 sr_md5 | MD5 (14 rows)然後,您可以從支援 SCRAM 驗證的用戶端連線至您的伺服器。
當連線至內建受控 PgBouncer 時,也支援 SCRAM 驗證。