使用密碼政策管理內建驗證

如要強化內建資料庫驗證機制的安全性,您可以為 AlloyDB for PostgreSQL 執行個體上的資料庫使用者設定及管理密碼政策。

如要概略瞭解 AlloyDB 提供的驗證方式,請參閱「驗證」。

關於密碼政策

如果應用程式的資料庫使用者透過內建的密碼驗證方法,向 AlloyDB 執行個體驗證身分,您可以強制要求使用高強度密碼,提高驗證安全性。您可以為執行個體設定密碼政策,定義並啟用密碼強制執行功能。

密碼政策限制

AlloyDB 密碼政策有下列限制:

  • 密碼政策僅適用於內建 (BUILT_IN) 資料庫使用者。以 IAM 為基礎 (IAM_BASED) 的資料庫使用者不適用執行個體密碼政策。

  • 密碼政策只會套用至設定政策後建立的密碼。變更密碼政策不會影響現有的使用者密碼。

  • 密碼政策僅適用於以純文字輸入的密碼。密碼政策不適用於以加密字串形式輸入的密碼。

設定執行個體密碼政策

您可以設定執行個體的密碼旗標,為執行個體設定密碼政策。

  • 禁止使用使用者名稱:禁止在密碼中使用使用者名稱。

  • 密碼複雜度:檢查密碼是否包含允許數量的小寫、大寫、數字和非英數字元。此外,請確認密碼長度是否有效。

  • 密碼到期:要求定期更換密碼。

如要查看 AlloyDB 支援的密碼政策旗標清單,請參閱「密碼政策旗標」。

為符合安全標準並遵循安全性建議工具的指引,您必須將主要強制執行旗標設為 ON,同時啟用這三個選項:

  • password.enforce_password_does_not_contain_username
  • password.enforce_complexity
  • password.enforce_expiration

如果將這三個旗標中的任何一個設為 OFF 或省略,安全性建議工具會將執行個體標記為未啟用密碼政策。

強制執行密碼複雜度

如要強制執行密碼複雜度政策,請按照下列步驟操作:

  1. 將 password.enforce_complexity 旗標設為 ON。
  2. 使用密碼政策旗標定義密碼政策。

舉例來說,如要強制執行密碼政策,規定密碼必須包含至少一個大寫字母、一個數字,且長度至少為 10 個字元,則必須設定下列旗標:

  • 將 password.enforce_complexity 旗標設為 ON

  • 將 password.min_uppercase_letters 旗標設為 1

  • 將 password.min_numerical_chars 旗標設為 1

  • 將 password.min_pass_length 旗標設為 10

設定這些旗標後,如果嘗試設定不符合這項密碼政策的資料庫使用者密碼,就會失敗。舉例來說,設定這項政策後,下列 psql 用戶端指令會失敗,因為密碼 foo 少於 10 個字元,且不含數字或大寫字元。

CREATE USER USERNAME WITH PASSWORD 'foo';

強制執行密碼到期設定

如要強制執行密碼到期政策,請按照下列步驟操作:

  1. 將 password.enforce_expiration 旗標設為 ON。

  2. 將 password.expiration_in_days 旗標設為密碼設定後到期前的天數。

  3. 將 password.notify_expiration_in_days 旗標設為密碼到期前的天數,使用者就會開始收到密碼到期通知。

舉例來說,如要強制執行密碼政策,規定密碼在 30 天後到期,並在密碼到期前 15 天通知使用者,請設定下列項目:

  • 將 password.enforce_expiration 旗標設為 ON

  • 將 password.expiration_in_days 旗標設為 30

  • 將 password.notify_expiration_in_days 旗標設為 15

如果使用者在密碼到期前的通知期間連線,AlloyDB 會在用戶端連線中顯示下列訊息,並寫入 postgres.log:

Caution: Password is set to expire soon. Be sure to update the password before the expiration time.

如果使用者的密碼過期,就無法連線至 AlloyDB 執行個體。如要重設使用者密碼,請參閱「變更資料庫使用者密碼」。

禁止在密碼中加入使用者名稱

如要強制執行密碼不得包含使用者名稱的政策,請按照下列步驟操作:

舉例來說,如要避免密碼包含使用者名稱做為子字串,請設定下列項目:

  • 將 password.enforce_password_does_not_contain_username 旗標設為 ON

如果設定這個旗標,則下列作業會失敗,因為密碼 alex-secret 包含使用者名稱 alex:

CREATE USER alex WITH PASSWORD 'alex-secret';

後續步驟