適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中的 SCRAM 驗證機制

Salted Challenge Response Authentication Mechanism (SCRAM) 為以密碼為基礎的相互驗證通訊協定。 這是一種質詢-回應方案,可增加多層安全性,並防止在不受信任的連線上嗅探密碼。 SCRAM 支援以密碼編譯雜湊形式,將密碼儲存在伺服器上,以提供進階安全性。

備註

若要使用 SCRAM 認證方法存取 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器,您的用戶端函式庫必須支援 SCRAM。 欲了解更多資訊,請參閱支援 SCRAM 的驅動程式列表

SCRAM 認證會增加應用伺服器額外的運算負擔,因為每次驗證都需要計算用戶端證明。 你可以透過限制應用程式連線池中的連線數量(減少應用程式的聊天聲)或限制客戶端允許的同時交易數量(較大的交易)來降低 SCRAM 帶來的效能負擔。 在遷移到 SCRAM 認證前,先測試你的工作負載。

設定 SCRAM 驗證

前往參數設定

要設定 SCRAM 認證,請在 Azure 入口網站的參數頁面存取:

  1. 登入 Azure 入口網站
  2. 移至您適用於 PostgreSQL 的 Azure 資料庫彈性伺服器。
  3. 在左側選單的 設定中,選擇 參數
  4. 請使用搜尋框找到以下步驟中提到的參數。

設定步驟

  1. password_encryption 改為 SCRAM-SHA-256。 目前,適用於 PostgreSQL 的 Azure 資料庫 僅支援使用 SHA-256 的 SCRAM。

    SCRAM 加密頁面的螢幕擷取畫面。

  2. 允許將 SCRAM-SHA-256 作為驗證方式。

    透過 SCRAM 達成的驗證的螢幕擷取畫面。

    這很重要

    你可以僅選取 SCRAM-SHA-256 方法,強制只使用 SCRAM 驗證。 當你強制執行這種方式時,使用 MD5 認證的使用者就無法連接到伺服器。 在強制執行 SCRAM 之前,先確認 MD5 和 SCRAM-SHA-256 都是認證方式,直到你將所有使用者密碼更新為 SCRAM-SHA-256。 你可以透過步驟 7 提到的查詢來驗證使用者的認證類型。

  3. 儲存變更。 這些屬性是動態的,不需要重啟伺服器。

  4. 從您的 適用於 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.
    
  5. 驗證密碼加密。

    postgres=> show password_encryption;
       password_encryption
    ---------------------
    scram-sha-256
    (1 row)
    
  6. 為使用者更新密碼。

    postgres=> \password myDemoUser
    Enter new password:
    Enter it again:
    postgres=>
    
  7. 透過函 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)
    
  8. 從支援 SCRAM 認證的客戶端連接到你的伺服器。

    當連線至內建受控 PgBouncer 時,也支援 SCRAM 驗證。